]> git.openstreetmap.org Git - rails.git/blob - app/models/notifier.rb
Merge branch 'master' into notes
[rails.git] / app / models / notifier.rb
1 class Notifier < ActionMailer::Base
2   default :from => EMAIL_FROM,
3           :return_path => EMAIL_RETURN_PATH,
4           :auto_submitted => "auto-generated"
5   helper :application
6
7   def signup_confirm(user, token)
8     @locale = user.preferred_language_from(I18n.available_locales)
9
10     # If we are passed an email address verification token, create
11     # the confirumation URL for account activation.
12     #
13     # Otherwise the email has already been verified e.g. through
14     # a trusted openID provider and the account is active and a
15     # confirmation URL is not needed.
16     if token
17       @url = url_for(:host => SERVER_URL,
18                      :controller => "user", :action => "confirm",
19                      :display_name => user.display_name,
20                      :confirm_string => token.token)
21     end
22
23     mail :to => user.email,
24          :subject => I18n.t('notifier.signup_confirm.subject', :locale => @locale)
25   end
26
27   def email_confirm(user, token)
28     @locale = user.preferred_language_from(I18n.available_locales)
29     @address = user.new_email
30     @url = url_for(:host => SERVER_URL,
31                    :controller => "user", :action => "confirm_email",
32                    :confirm_string => token.token)
33
34     mail :to => user.new_email,
35          :subject => I18n.t('notifier.email_confirm.subject', :locale => @locale)
36   end
37
38   def lost_password(user, token)
39     @locale = user.preferred_language_from(I18n.available_locales)
40     @url = url_for(:host => SERVER_URL,
41                    :controller => "user", :action => "reset_password",
42                    :token => token.token)
43
44     mail :to => user.email,
45          :subject => I18n.t('notifier.lost_password.subject', :locale => @locale)
46   end
47
48   def gpx_success(trace, possible_points)
49     @locale = trace.user.preferred_language_from(I18n.available_locales)
50     @trace_name = trace.name
51     @trace_points = trace.size
52     @trace_description = trace.description
53     @trace_tags = trace.tags
54     @possible_points = possible_points
55
56     mail :to => trace.user.email,
57          :subject => I18n.t('notifier.gpx_notification.success.subject', :locale => @locale)
58   end
59
60   def gpx_failure(trace, error)
61     @locale = trace.user.preferred_language_from(I18n.available_locales)
62     @trace_name = trace.name
63     @trace_description = trace.description
64     @trace_tags = trace.tags
65     @error = error
66
67     mail :to => trace.user.email,
68          :subject => I18n.t('notifier.gpx_notification.failure.subject', :locale => @locale)
69   end
70
71   def message_notification(message)
72     @locale = message.recipient.preferred_language_from(I18n.available_locales)
73     @to_user = message.recipient.display_name
74     @from_user = message.sender.display_name
75     @text = message.body
76     @title = message.title
77     @readurl = url_for(:host => SERVER_URL,
78                        :controller => "message", :action => "read",
79                        :message_id => message.id)
80     @replyurl = url_for(:host => SERVER_URL,
81                         :controller => "message", :action => "reply",
82                         :message_id => message.id)
83
84     mail :from => from_address(message.sender.display_name, "m", message.id, message.digest),
85          :to => message.recipient.email,
86          :subject => I18n.t('notifier.message_notification.subject_header', :subject => message.title, :locale => @locale)
87   end
88
89   def diary_comment_notification(comment)
90     @locale = comment.diary_entry.user.preferred_language_from(I18n.available_locales)
91     @to_user = comment.diary_entry.user.display_name
92     @from_user = comment.user.display_name
93     @text = comment.body
94     @title = comment.diary_entry.title
95     @readurl = url_for(:host => SERVER_URL,
96                        :controller => "diary_entry",
97                        :action => "view",
98                        :display_name => comment.diary_entry.user.display_name,
99                        :id => comment.diary_entry.id,
100                        :anchor => "comment#{comment.id}")
101     @commenturl = url_for(:host => SERVER_URL,
102                           :controller => "diary_entry",
103                           :action => "view",
104                           :display_name => comment.diary_entry.user.display_name,
105                           :id => comment.diary_entry.id,
106                           :anchor => "newcomment")
107     @replyurl = url_for(:host => SERVER_URL,
108                         :controller => "message",
109                         :action => "new",
110                         :display_name => comment.user.display_name,
111                         :title => "Re: #{comment.diary_entry.title}")
112
113     mail :from => from_address(comment.user.display_name, "c", comment.id, comment.digest),
114          :to =>  comment.diary_entry.user.email,
115          :subject => I18n.t('notifier.diary_comment_notification.subject', :user => comment.user.display_name, :locale => @locale)
116   end
117
118   def friend_notification(friend)
119     @locale = friend.befriendee.preferred_language_from(I18n.available_locales)
120     @friend = friend
121
122     mail :to => friend.befriendee.email,
123          :subject => I18n.t('notifier.friend_notification.subject', :user => friend.befriender.display_name, :locale => @locale)
124   end
125
126   def note_comment_notification(comment, recipient)
127     @locale = recipient.preferred_language_from(I18n.available_locales)
128     @noteurl = browse_note_url(comment.note, :host => SERVER_URL)
129     @place = Nominatim.describe_location(comment.note.lat, comment.note.lon, 14, @locale)
130     @comment = comment.body
131     @owner = recipient == comment.note.author
132
133     if comment.author
134       @commenter = comment.author.display_name
135     else
136       @commenter = I18n.t("notifier.note_comment_notification.anonymous")
137     end
138
139     if @owner
140       subject = I18n.t('notifier.note_comment_notification.subject_own', :commenter => @commenter)
141     else
142       subject = I18n.t('notifier.note_comment_notification.subject_other', :commenter => @commenter)
143     end
144
145     mail :to => recipient.email, :subject => subject
146   end
147
148 private
149
150   def from_address(name, type, id, digest)
151     if Object.const_defined?(:MESSAGES_DOMAIN) and domain = MESSAGES_DOMAIN
152       "#{name} <#{type}-#{id}-#{digest[0,6]}@#{domain}>"
153     else
154       EMAIL_FROM
155     end
156   end
157 end