]> git.openstreetmap.org Git - rails.git/blobdiff - app/mailers/user_mailer.rb
Add subscribe/unsubscribe buttons to note pages
[rails.git] / app / mailers / user_mailer.rb
index 160dc1996e1cc8134bea00262a1a2c4c78c75150..dee3dafbed35562ab865f11c64fcad4d61e8a067 100644 (file)
@@ -10,11 +10,12 @@ class UserMailer < ApplicationMailer
   before_action :set_shared_template_vars
   before_action :attach_project_logo
 
-  def signup_confirm(user, token)
+  def signup_confirm(user, token, referer = nil)
     with_recipient_locale user do
       @url = url_for(:controller => "confirmations", :action => "confirm",
                      :display_name => user.display_name,
-                     :confirm_string => token.token)
+                     :confirm_string => token,
+                     :referer => referer)
 
       mail :to => user.email,
            :subject => t(".subject")
@@ -25,7 +26,7 @@ class UserMailer < ApplicationMailer
     with_recipient_locale user do
       @address = user.new_email
       @url = url_for(:controller => "confirmations", :action => "confirm_email",
-                     :confirm_string => token.token)
+                     :confirm_string => token)
 
       mail :to => user.new_email,
            :subject => t(".subject")
@@ -104,6 +105,14 @@ class UserMailer < ApplicationMailer
 
       set_references("diary", comment.diary_entry)
 
+      set_list_headers(
+        "#{comment.diary_entry.id}.diary.www.openstreetmap.org",
+        t(".description", :id => comment.diary_entry.id),
+        :archive => @readurl,
+        :subscribe => diary_entry_subscribe_url(comment.diary_entry.user, comment.diary_entry),
+        :unsubscribe => @unsubscribeurl
+      )
+
       mail :from => from_address(comment.user.display_name, "c", comment.id, comment.notification_token(recipient.id), recipient.id),
            :to => recipient.email,
            :subject => t(".subject", :user => comment.user.display_name)
@@ -142,6 +151,12 @@ class UserMailer < ApplicationMailer
 
       set_references("note", comment.note)
 
+      set_list_headers(
+        "#{comment.note.id}.note.www.openstreetmap.org",
+        t(".description", :id => comment.note.id),
+        :archive => @noteurl
+      )
+
       subject = if @owner
                   t(".#{@event}.subject_own", :commenter => @commenter)
                 else
@@ -162,6 +177,7 @@ class UserMailer < ApplicationMailer
       @changeset_comment = comment.changeset.tags["comment"].presence
       @time = comment.created_at
       @changeset_author = comment.changeset.user.display_name
+      @unsubscribe_url = unsubscribe_changeset_url(comment.changeset)
       @author = @commenter
 
       subject = if @owner
@@ -174,6 +190,14 @@ class UserMailer < ApplicationMailer
 
       set_references("changeset", comment.changeset)
 
+      set_list_headers(
+        "#{comment.changeset.id}.changeset.www.openstreetmap.org",
+        t(".description", :id => comment.changeset.id),
+        :subscribe => subscribe_changeset_url(comment.changeset),
+        :unsubscribe => @unsubscribe_url,
+        :archive => @changeset_url
+      )
+
       mail :to => recipient.email, :subject => subject
     end
   end
@@ -223,8 +247,8 @@ class UserMailer < ApplicationMailer
     end
   end
 
-  def with_recipient_locale(recipient, &block)
-    I18n.with_locale(Locale.available.preferred(recipient.preferred_languages), &block)
+  def with_recipient_locale(recipient, &)
+    I18n.with_locale(Locale.available.preferred(recipient.preferred_languages), &)
   end
 
   def from_address(name, type, id, token, user_id = nil)
@@ -246,4 +270,11 @@ class UserMailer < ApplicationMailer
     headers["In-Reply-To"] = ref
     headers["References"] = ref
   end
+
+  def set_list_headers(id, description, options = {})
+    headers["List-ID"] = "#{description} <#{id}>"
+    headers["List-Archive"] = "<#{options[:archive]}>" if options[:archive]
+    headers["List-Subscribe"] = "<#{options[:subscribe]}>" if options[:subscribe]
+    headers["List-Unsubscribe"] = "<#{options[:unsubscribe]}>" if options[:unsubscribe]
+  end
 end