Class: Mailer

Inherits:
ActionMailer::Base
  • Object
show all
Includes:
ActionController::UrlWriter, Redmine::I18n
Defined in:
app/models/mailer.rb

Overview

redMine - project management software Copyright (C) 2006-2007 Jean-Philippe Lang

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods included from Redmine::I18n

#current_language, #day_name, #find_language, #format_date, #format_time, included, #l, #l_hours, #l_or_humanize, #ll, #month_name, #set_language_if_valid, #valid_languages

Class Method Details

+ (Object) controller_path



275
276
277
# File 'app/models/mailer.rb', line 275

def self.controller_path
  ''
end

+ (Object) default_url_options



26
27
28
29
30
# File 'app/models/mailer.rb', line 26

def self.default_url_options
  h = Setting.host_name
  h = h.to_s.gsub(%r{\/.*$}, '') unless Redmine::Utils.relative_url_root.blank?
  { :host => h, :protocol => Setting.protocol }
end

+ (Object) reminders(options = {})

Sends reminders to issue assignees Available options:

  • :days => how many days in the future to remind about (defaults to 7)

  • :tracker => id of tracker for filtering issues (defaults to all trackers)

  • :project => id or identifier of project to process (defaults to all projects)



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'app/models/mailer.rb', line 197

def self.reminders(options={})
  days = options[:days] || 7
  project = options[:project] ? Project.find(options[:project]) : nil
  tracker = options[:tracker] ? Tracker.find(options[:tracker]) : nil

  s = ARCondition.new ["#{IssueStatus.table_name}.is_closed = ? AND #{Issue.table_name}.due_date <= ?", false, days.day.from_now.to_date]
  s << "#{Issue.table_name}.assigned_to_id IS NOT NULL"
  s << "#{Project.table_name}.status = #{Project::STATUS_ACTIVE}"
  s << "#{Issue.table_name}.project_id = #{project.id}" if project
  s << "#{Issue.table_name}.tracker_id = #{tracker.id}" if tracker

  issues_by_assignee = Issue.find(:all, :include => [:status, :assigned_to, :project, :tracker],
                                        :conditions => s.conditions
                                  ).group_by(&:assigned_to)
  issues_by_assignee.each do |assignee, issues|
    deliver_reminder(assignee, issues, days) unless assignee.nil?
  end
end

Instance Method Details

- (Object) account_activated(user)

A registered user's account was activated by an administrator



144
145
146
147
148
149
150
# File 'app/models/mailer.rb', line 144

def (user)
  set_language_if_valid user.language
  recipients user.mail
  subject l(:mail_subject_register, Setting.app_title)
  body :user => user,
       :login_url => url_for(:controller => 'account', :action => 'login')
end

- (Object) account_activation_request(user)



135
136
137
138
139
140
141
# File 'app/models/mailer.rb', line 135

def (user)
  # Send the email to all active administrators
  recipients User.active.find(:all, :conditions => {:admin => true}).collect { |u| u.mail }.compact
  subject l(:mail_subject_account_activation_request, Setting.app_title)
  body :user => user,
       :url => url_for(:controller => 'users', :action => 'index', :status => User::STATUS_REGISTERED, :sort_key => 'created_on', :sort_order => 'desc')
end

- (Object) account_information(user, password)



126
127
128
129
130
131
132
133
# File 'app/models/mailer.rb', line 126

def (user, password)
  set_language_if_valid user.language
  recipients user.mail
  subject l(:mail_subject_register, Setting.app_title)
  body :user => user,
       :password => password,
       :login_url => url_for(:controller => 'account', :action => 'login')
end

- (Object) attachments_added(attachments)



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/models/mailer.rb', line 83

def attachments_added(attachments)
  container = attachments.first.container
  added_to = ''
  added_to_url = ''
  case container.class.name
  when 'Project'
    added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container)
    added_to = "#{l(:label_project)}: #{container}"
  when 'Version'
    added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container.project_id)
    added_to = "#{l(:label_version)}: #{container.name}"
  when 'Document'
    added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id)
    added_to = "#{l(:label_document)}: #{container.title}"
  end
  redmine_headers 'Project' => container.project.identifier
  recipients container.project.recipients
  subject "[#{container.project.name}] #{l(:label_attachment_new)}"
  body :attachments => attachments,
       :added_to => added_to,
       :added_to_url => added_to_url
end

- (Object) deliver!(mail = @mail)

Overrides default deliver! method to prevent from sending an email with no recipient, cc or bcc



177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'app/models/mailer.rb', line 177

def deliver!(mail = @mail)
  return false if (recipients.nil? || recipients.empty?) &&
                  (cc.nil? || cc.empty?) &&
                  (bcc.nil? || bcc.empty?)
                  
  # Set Message-Id and References
  if @message_id_object
    mail.message_id = self.class.message_id_for(@message_id_object)
  end
  if @references_objects
    mail.references = @references_objects.collect {|o| self.class.message_id_for(o)}
  end
  super(mail)
end

- (Object) document_added(document)



75
76
77
78
79
80
81
# File 'app/models/mailer.rb', line 75

def document_added(document)
  redmine_headers 'Project' => document.project.identifier
  recipients document.project.recipients
  subject "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}"
  body :document => document,
       :document_url => url_for(:controller => 'documents', :action => 'show', :id => document)
end

- (Object) issue_add(issue)



32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/models/mailer.rb', line 32

def issue_add(issue)
  redmine_headers 'Project' => issue.project.identifier,
                  'Issue-Id' => issue.id,
                  'Issue-Author' => issue.author.
  redmine_headers 'Issue-Assignee' => issue.assigned_to. if issue.assigned_to
  message_id issue
  recipients issue.recipients
  cc(issue.watcher_recipients - @recipients)
  subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}"
  body :issue => issue,
       :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
end

- (Object) issue_edit(journal)



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/models/mailer.rb', line 45

def issue_edit(journal)
  issue = journal.journalized
  redmine_headers 'Project' => issue.project.identifier,
                  'Issue-Id' => issue.id,
                  'Issue-Author' => issue.author.
  redmine_headers 'Issue-Assignee' => issue.assigned_to. if issue.assigned_to
  message_id journal
  references issue
  @author = journal.user
  recipients issue.recipients
  # Watchers in cc
  cc(issue.watcher_recipients - @recipients)
  s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] "
  s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
  s << issue.subject
  subject s
  body :issue => issue,
       :journal => journal,
       :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
end

- (Object) lost_password(token)



152
153
154
155
156
157
158
# File 'app/models/mailer.rb', line 152

def lost_password(token)
  set_language_if_valid(token.user.language)
  recipients token.user.mail
  subject l(:mail_subject_lost_password, Setting.app_title)
  body :token => token,
       :url => url_for(:controller => 'account', :action => 'lost_password', :token => token.value)
end

- (Object) message_posted(message, recipients)



115
116
117
118
119
120
121
122
123
124
# File 'app/models/mailer.rb', line 115

def message_posted(message, recipients)
  redmine_headers 'Project' => message.project.identifier,
                  'Topic-Id' => (message.parent_id || message.id)
  message_id message
  references message.parent unless message.parent.nil?
  recipients(recipients)
  subject "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
  body :message => message,
       :message_url => url_for(:controller => 'messages', :action => 'show', :board_id => message.board_id, :id => message.root)
end

- (Object) news_added(news)



106
107
108
109
110
111
112
113
# File 'app/models/mailer.rb', line 106

def news_added(news)
  redmine_headers 'Project' => news.project.identifier
  message_id news
  recipients news.project.recipients
  subject "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
  body :news => news,
       :news_url => url_for(:controller => 'news', :action => 'show', :id => news)
end

- (Object) register(token)



160
161
162
163
164
165
166
# File 'app/models/mailer.rb', line 160

def register(token)
  set_language_if_valid(token.user.language)
  recipients token.user.mail
  subject l(:mail_subject_register, Setting.app_title)
  body :token => token,
       :url => url_for(:controller => 'account', :action => 'activate', :token => token.value)
end

- (Object) reminder(user, issues, days)



66
67
68
69
70
71
72
73
# File 'app/models/mailer.rb', line 66

def reminder(user, issues, days)
  set_language_if_valid user.language
  recipients user.mail
  subject l(:mail_subject_reminder, issues.size)
  body :issues => issues,
       :days => days,
       :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc')
end

- (Object) test(user)



168
169
170
171
172
173
# File 'app/models/mailer.rb', line 168

def test(user)
  set_language_if_valid(user.language)
  recipients user.mail
  subject 'Redmine test'
  body :url => url_for(:controller => 'welcome')
end