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 60b6826..ee40a0d 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 344a4e3..4e271cf 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 b47900a..ea9a655 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 %>