Moved message table HTMl to a partial template
authorHerve Saint-Amand <git@saintamh.org>
Sun, 8 Jan 2017 22:09:10 +0000 (22:09 +0000)
committerHerve Saint-Amand <git@saintamh.org>
Sun, 8 Jan 2017 22:09:10 +0000 (22:09 +0000)
Several notifications are about a message having been sent from one user to another via OSM. I've moved the code for the HTML table that holds the actual user message, with the avatar and the body text, to its own partial template, so that it can be reused. I've updated a second notifier message to the new template, diary_comment_notification.

app/models/notifier.rb
app/views/notifier/_user_message_table.html.erb [new file with mode: 0644]
app/views/notifier/changeset_comment_notification.html.erb
app/views/notifier/diary_comment_notification.html.erb

index 60b682693fa716ba896b116520b013d271028efa..ee40a0d6efad9c48f1c9d242669df674485ce467 100644 (file)
@@ -3,6 +3,7 @@ class Notifier < ActionMailer::Base
           :return_path => EMAIL_RETURN_PATH,
           :auto_submitted => "auto-generated"
   helper :application
+  before_action :set_shared_template_vars
 
   def signup_confirm(user, token)
     with_recipient_locale user do
@@ -106,6 +107,9 @@ class Notifier < ActionMailer::Base
                           :action => "new",
                           :display_name => comment.user.display_name,
                           :title => "Re: #{comment.diary_entry.title}")
+      @user_message_author = @from_user
+
+      attach_user_avatar(comment.user)
 
       mail :from => from_address(comment.user.display_name, "c", comment.id, comment.digest, recipient.id),
            :to => recipient.email,
@@ -154,7 +158,6 @@ 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
@@ -162,6 +165,7 @@ class Notifier < ActionMailer::Base
       @changeset_comment = comment.changeset.tags["comment"].presence
       @time = comment.created_at
       @changeset_author = comment.changeset.user.display_name
+      @user_message_author = @commenter
 
       subject = if @owner
                   I18n.t("notifier.changeset_comment_notification.commented.subject_own", :commenter => @commenter)
@@ -169,8 +173,8 @@ class Notifier < ActionMailer::Base
                   I18n.t("notifier.changeset_comment_notification.commented.subject_other", :commenter => @commenter)
                 end
 
-      attachments.inline["logo.png"] = File.read("#{Rails.root}/app/assets/images/osm_logo_30.png")
-      attachments.inline["avatar.png"] = File.read(user_avatar_file_path(comment.author))
+      attach_project_logo
+      attach_user_avatar(comment.author)
 
       mail :to => recipient.email, :subject => subject
     end
@@ -178,6 +182,19 @@ class Notifier < ActionMailer::Base
 
   private
 
+  def set_shared_template_vars
+    @root_url = root_url(:host => SERVER_URL)
+    attach_project_logo
+  end
+
+  def attach_project_logo
+    attachments.inline["logo.png"] = File.read("#{Rails.root}/app/assets/images/osm_logo_30.png")
+  end
+
+  def attach_user_avatar(user)
+    attachments.inline["avatar.png"] = File.read(user_avatar_file_path(user))
+  end
+
   def user_avatar_file_path(user)
     image = user.image
     if image.file?
diff --git a/app/views/notifier/_user_message_table.html.erb b/app/views/notifier/_user_message_table.html.erb
new file mode 100644 (file)
index 0000000..0a73001
--- /dev/null
@@ -0,0 +1,18 @@
+<table style="font-size: 15px; font-style: italic; margin: 15px; background-color: #eee; width: 520px">
+  <tr>
+    <td style="width: 50px; vertical-align: top; padding: 15px">
+      <%= link_to(
+          image_tag(
+            attachments["avatar.png"].url,
+            alt: @user_message_author,
+            title: @user_message_author
+          ),
+          user_url(@user_message_author, :host => SERVER_URL),
+          :target => "_blank"
+      ) %>
+    </td>
+    <td style="text-align: left; vertical-align: top; padding-right: 10px">
+      <%= captured %>
+    </td>
+  </tr>
+</table>
index 344a4e33d6bb2f53cae944e27a32077d0749cabf..4e271cfb2b0aa9f7e349332247ed56a1bee86479 100644 (file)
       <%= t "notifier.changeset_comment_notification.commented.partial_changeset_without_comment" %>
     <% end %>
   </p>
-  <table style="font-size: 15px; font-style: italic; margin: 15px; background-color: #eee; width: 520px">
-    <tr>
-      <td style="width: 50px; vertical-align: top; padding: 15px">
-        <a href="<%= @commenter_url %>" target="_blank"><%= image_tag attachments["avatar.png"].url, alt: @commenter %></a>
-      </td>
-      <td style="text-align: left; vertical-align: top; padding-right: 10px">
-        <%= @comment.to_html %>
-      </td>
-    </tr>
-  </table>
+
+  <%= render "notifier/user_message_table", :captured => capture { %>
+    <%= @comment.to_html %>
+  <% } %>
+
   <p>
     <%= raw t 'notifier.changeset_comment_notification.details', :url => content_tag("nobr", link_to(@changeset_url, @changeset_url)) %>
   </p>
index b47900a631fc2ef28e90ffe2fe87564beead0c18..ea9a655910173e969121d5ac3c1061076cb89c2d 100644 (file)
@@ -1,9 +1,20 @@
-<p><%= t'notifier.diary_comment_notification.hi', :to_user => @to_user %></p>
+<% content_for :body do %>
+  <p style="margin: 0">
+    <%= t'notifier.diary_comment_notification.hi', :to_user => @to_user %>
+  </p>
+  <p>
+    <%= raw t'notifier.diary_comment_notification.header', :from_user => link_to_user(@from_user), :subject => content_tag("em", @title) %>
+  </p>
 
-<p><%= raw t'notifier.diary_comment_notification.header', :from_user => link_to(@from_user, :host => SERVER_URL, :controller => :user, :action => :view, :display_name => @from_user), :subject => @title %></p>
+  <%= render "notifier/user_message_table", :captured => capture { %>
+    <%= @text.to_html %>
+  <% } %>
+<% end %>
 
-==
-<%= @text.to_html %>
-==
-
-<p><%= raw t'notifier.diary_comment_notification.footer', :readurl => link_to(@readurl, @readurl), :commenturl => link_to(@commenturl, @commenturl), :replyurl => link_to(@replyurl, @replyurl) %></p>
+<% content_for :footer do %>
+  <p><%= raw t'notifier.diary_comment_notification.footer',
+             :readurl => link_to(@readurl, @readurl) + tag(:br),
+             :commenturl => link_to(@commenturl, @commenturl) + tag(:br),
+             :replyurl => link_to(@replyurl, @replyurl)
+  %></p>
+<% end %>