intial commit, for 'en' locale only, for changeset_comment_notification only, doesn...
authorHerve Saint-Amand <git@saintamh.org>
Thu, 29 Dec 2016 21:54:46 +0000 (21:54 +0000)
committerHerve Saint-Amand <git@saintamh.org>
Thu, 29 Dec 2016 21:54:46 +0000 (21:54 +0000)
app/models/notifier.rb
app/views/notifier/changeset_comment_notification.html.erb
config/locales/en.yml

index 0539bde..b53210c 100644 (file)
@@ -1,3 +1,5 @@
+require "base64"
+
 class Notifier < ActionMailer::Base
   default :from => EMAIL_FROM,
           :return_path => EMAIL_RETURN_PATH,
@@ -154,10 +156,13 @@ class Notifier < ActionMailer::Base
 
   def changeset_comment_notification(comment, recipient)
     with_recipient_locale recipient do
+      @root_url = root_url(:host => SERVER_URL)
       @changeset_url = changeset_url(comment.changeset, :host => SERVER_URL)
       @comment = comment.body
       @owner = recipient == comment.changeset.user
       @commenter = comment.author.display_name
+      @commenter_url = user_url(comment.author.display_name, :host => SERVER_URL)
+      @commenter_thumbnail_src = comment.author.image.url(:small, :host => SERVER_URL)
       @changeset_comment = comment.changeset.tags["comment"].presence
       @time = comment.created_at
       @changeset_author = comment.changeset.user.display_name
@@ -168,6 +173,12 @@ class Notifier < ActionMailer::Base
                   I18n.t("notifier.changeset_comment_notification.commented.subject_other", :commenter => @commenter)
                 end
 
+      attachments.inline['osm_logo_30x30.png'] = {
+        mime_type: 'image/png',
+        encoding: 'base64',
+        content: @@osm_logo_png_bytes,
+      }
+
       mail :to => recipient.email, :subject => subject
     end
   end
@@ -191,4 +202,60 @@ class Notifier < ActionMailer::Base
       EMAIL_FROM
     end
   end
+
+  # FIXME - 2016-12-28 - saintamh - someone please show me a better way to
+  # include this blob in here. If I save it under app/assets, how do I get a
+  # path to it in a portable way?
+  @@osm_logo_png_bytes = <<EOS
+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
+EOS
+
 end
index b7646a8..dffb290 100644 (file)
@@ -1,20 +1,74 @@
-<p><%= t 'notifier.changeset_comment_notification.greeting' %></p>
-
-<p>
-  <% if @owner %>
-    <%= t "notifier.changeset_comment_notification.commented.your_changeset", :commenter => @commenter, :time => @time %>
-  <% else %>
-    <%= t "notifier.changeset_comment_notification.commented.commented_changeset", :commenter => @commenter, :time => @time, :changeset_author => @changeset_author %>
-  <% end %>
-  <% if @changeset_comment %>
-    <%= t "notifier.changeset_comment_notification.commented.partial_changeset_with_comment", :changeset_comment => @changeset_comment %>
-  <% else %>
-    <%= t "notifier.changeset_comment_notification.commented.partial_changeset_without_comment" %>
-  <% end %>
-</p>
-
-==
-<%= @comment.to_html %>
-==
-
-<p><%= raw t 'notifier.changeset_comment_notification.details', :url => link_to(@changeset_url, @changeset_url) %></p>
+<html>
+  <head>
+    <title></title>
+    <meta charset="UTF-8"></meta>
+  </head>
+  <body style="padding: 0; margin: 0">
+    <table border="0" cellspacing="0" cellpadding="0" width="100%" bgcolor="#eee" style="color: #222; font-family: 'Helvetica Neue', Arial, sans-serif; font-size: 14px; text-align: center">
+      <tr>
+        <td>
+          <table align="center" width="600" cellspacing="10" style="color: #222; font-family: 'Helvetica Neue', Arial, sans-serif; font-size: 14px; margin-left: auto; margin-right: auto">
+            <tr>
+              <td width="30">
+                <a href="<%= @root_url %>" target="_blank">
+                  <%= image_tag attachments["osm_logo_30x30.png"].url, alt: "OpenStreetMap logo", title: "OpenStreetMap", height: "30", width: "30", border: "0" %>
+                </a>
+              </td>
+              <td>
+                <a href="<%= @root_url %>" target="_blank" style="text-decoration: none; color: #000">
+                  <h1 style="font-size: 18px; font-weight: 600; margin: 0; text-align: left">OpenStreetMap</h1>
+                </a>
+              </td>
+            </tr>
+            <tr>
+              <td colspan="2">
+                <table width="100%" bgcolor="#fff" cellspacing="15" style="color: #222; font-family: 'Helvetica Neue', Arial, sans-serif; font-size: 14px; border: solid 1px #ccc">
+                  <tr>
+                    <td>
+                      <p>
+                        <% if @owner %>
+                          <%= t "notifier.changeset_comment_notification.commented.your_changeset_html", :commenter => @commenter, :commenter_url => @commenter_url, :time => @time %>
+                        <% else %>
+                          <%= t "notifier.changeset_comment_notification.commented.commented_changeset_html", :commenter => @commenter, :commenter_url => @commenter_url, :time => @time, :changeset_author => @changeset_author %>
+                        <% end %>
+                        <% if @changeset_comment %>
+                          <%= t "notifier.changeset_comment_notification.commented.partial_changeset_with_comment_html", :changeset_comment => @changeset_comment %>
+                        <% else %>
+                          <%= t "notifier.changeset_comment_notification.commented.partial_changeset_without_comment" %>
+                        <% end %>
+                      </p>
+                      <table style="color: #222; font-family: 'Helvetica Neue', Arial, sans-serif; font-size: 15px; font-style: italic; margin: 15px; background-color: #eee" cellpadding="10">
+                        <tr>
+                          <td style="vertical-align: top">
+                            <a href="<%= @commenter_url %>" target="_blank"><img src="<%= @commenter_thumbnail_src %>"></a>
+                          </td>
+                          <td style="vertical-align: top">
+                            <%= @comment.to_html %>
+                          </td>
+                        </tr>
+                      </table>
+                      <p>
+                        <p><%= raw t 'notifier.changeset_comment_notification.details_html', :url => link_to(@changeset_url, @changeset_url) %></p>
+                      </p>
+                    </td>
+                  </tr>
+                </table>
+              </td>
+            </tr>
+          </table>
+        </td>
+      </tr>
+      <tr>
+        <td align="center">
+          <p>
+            <a style="color: #222" href="<%= @changeset_url %>">Unsubscribe</a>
+            from updates to this changeset
+          </p>
+          <p style="margin-bottom: 10px">
+            <a href="https://www.openstreetmap.org/" target="_blank" style="color: #222">OpenStreetMap.org</a>
+          </p>
+        </td>
+      </tr>
+    </table>
+  </body>
+</html>
index cfff874..5299450 100644 (file)
@@ -1315,10 +1315,20 @@ en:
         subject_own: "[OpenStreetMap] %{commenter} has commented on one of your changesets"
         subject_other: "[OpenStreetMap] %{commenter} has commented on a changeset you are interested in"
         your_changeset: "%{commenter} has left a comment on one of your changesets created at %{time}"
+        your_changeset_html: '<a href="%{commenter_url}" target="_blank" style="text-decoration: none; color: #222"><strong>%{commenter}</strong></a>
+           has left a comment on one of your changesets
+           created at %{time}'
         commented_changeset: "%{commenter} has left a comment on a map changeset you are watching created by %{changeset_author} at %{time}"
+        commented_changeset_html: '<a href="%{commenter_url}" target="_blank" style="text-decoration: none; color: #222"><strong>%{commenter}</strong></a>
+          has left a comment on a map changeset you are watching created by
+          %{changeset_author}
+          at %{time}'
         partial_changeset_with_comment: "with comment '%{changeset_comment}'"
+        partial_changeset_with_comment_html: 'with comment <em>%{changeset_comment}</em>'
         partial_changeset_without_comment: "without comment"
       details: "More details about the changeset can be found at %{url}."
+      details_html: 'More details about the changeset can be found at
+         <nobr>%{url}</nobr>.'
   message:
     inbox:
       title: "Inbox"
@@ -2288,11 +2298,6 @@ en:
         against_oneway_without_exit: Go against one-way on %{name}
         end_oneway_without_exit: End of one-way on %{name}
         roundabout_with_exit: At roundabout take exit %{exit} onto %{name}
-        turn_left_with_exit: At roundabout turn left onto %{name}
-        slight_left_with_exit: At roundabout slight left onto %{name}
-        turn_right_with_exit: At roundabout turn right onto %{name}
-        slight_right_with_exit: At roundabout slight right onto %{name}
-        continue_with_exit: At roundabout continue straight onto %{name}
         unnamed: "unnamed road"
         courtesy: "Directions courtesy of %{link}"
       time: "Time"