|
|
@@ -5,12 +5,12 @@ |
|
|
|
# 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. |
|
|
@@ -19,15 +19,15 @@ class Mailer < ActionMailer::Base |
|
|
|
helper :application |
|
|
|
helper :issues |
|
|
|
helper :custom_fields |
|
|
|
|
|
|
|
|
|
|
|
include ActionController::UrlWriter |
|
|
|
|
|
|
|
def issue_add(issue) |
|
|
|
|
|
|
|
def issue_add(issue) |
|
|
|
redmine_headers 'Project' => issue.project.identifier, |
|
|
|
'Issue-Id' => issue.id, |
|
|
|
'Issue-Author' => issue.author.login |
|
|
|
redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to |
|
|
|
recipients issue.recipients |
|
|
|
recipients issue.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) |
|
|
@@ -50,7 +50,7 @@ class Mailer < ActionMailer::Base |
|
|
|
:journal => journal, |
|
|
|
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue) |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def reminder(user, issues, days) |
|
|
|
set_language_if_valid user.language |
|
|
|
recipients user.mail |
|
|
@@ -59,7 +59,7 @@ class Mailer < ActionMailer::Base |
|
|
|
:days => days, |
|
|
|
:issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'issues.due_date', :sort_order => 'asc') |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def document_added(document) |
|
|
|
redmine_headers 'Project' => document.project.identifier |
|
|
|
recipients document.project.recipients |
|
|
@@ -67,7 +67,7 @@ class Mailer < ActionMailer::Base |
|
|
|
body :document => document, |
|
|
|
:document_url => url_for(:controller => 'documents', :action => 'show', :id => document) |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def attachments_added(attachments) |
|
|
|
container = attachments.first.container |
|
|
|
added_to = '' |
|
|
@@ -104,7 +104,7 @@ class Mailer < ActionMailer::Base |
|
|
|
body :message => message, |
|
|
|
:message_url => url_for(:controller => 'messages', :action => 'show', :board_id => message.board_id, :id => message.root) |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def account_information(user, password) |
|
|
|
set_language_if_valid user.language |
|
|
|
recipients user.mail |
|
|
@@ -113,7 +113,7 @@ class Mailer < ActionMailer::Base |
|
|
|
:password => password, |
|
|
|
:login_url => url_for(:controller => 'account', :action => 'login') |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def account_activation_request(user) |
|
|
|
# Send the email to all active administrators |
|
|
|
recipients User.find_active(:all, :conditions => {:admin => true}).collect { |u| u.mail }.compact |
|
|
@@ -128,7 +128,7 @@ class Mailer < ActionMailer::Base |
|
|
|
subject l(:mail_subject_lost_password, Setting.app_title) |
|
|
|
body :token => token, |
|
|
|
:url => url_for(:controller => 'account', :action => 'lost_password', :token => token.value) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
def register(token) |
|
|
|
set_language_if_valid(token.user.language) |
|
|
@@ -137,7 +137,7 @@ class Mailer < ActionMailer::Base |
|
|
|
body :token => token, |
|
|
|
:url => url_for(:controller => 'account', :action => 'activate', :token => token.value) |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test(user) |
|
|
|
set_language_if_valid(user.language) |
|
|
|
recipients user.mail |
|
|
@@ -148,12 +148,12 @@ class Mailer < ActionMailer::Base |
|
|
|
# Overrides default deliver! method to prevent from sending an email |
|
|
|
# with no recipient, cc or bcc |
|
|
|
def deliver!(mail = @mail) |
|
|
|
return false if (recipients.nil? || recipients.empty?) && |
|
|
|
return false if (recipients.nil? || recipients.empty?) && |
|
|
|
(cc.nil? || cc.empty?) && |
|
|
|
(bcc.nil? || bcc.empty?) |
|
|
|
super |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
# Sends reminders to issue assignees |
|
|
|
# Available options: |
|
|
|
# * :days => how many days in the future to remind about (defaults to 7) |
|
|
@@ -163,13 +163,13 @@ class Mailer < ActionMailer::Base |
|
|
|
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) |
|
|
@@ -185,17 +185,18 @@ class Mailer < ActionMailer::Base |
|
|
|
from Setting.mail_from |
|
|
|
default_url_options[:host] = Setting.host_name |
|
|
|
default_url_options[:protocol] = Setting.protocol |
|
|
|
default_url_options[:skip_relative_url_root] = true |
|
|
|
# Common headers |
|
|
|
headers 'X-Mailer' => 'Redmine', |
|
|
|
'X-Redmine-Host' => Setting.host_name, |
|
|
|
'X-Redmine-Site' => Setting.app_title |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
# Appends a Redmine header field (name is prepended with 'X-Redmine-') |
|
|
|
def redmine_headers(h) |
|
|
|
h.each { |k,v| headers["X-Redmine-#{k}"] = v } |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
# Overrides the create_mail method |
|
|
|
def create_mail |
|
|
|
# Removes the current user from the recipients and cc |
|
|
@@ -209,10 +210,10 @@ class Mailer < ActionMailer::Base |
|
|
|
bcc([recipients, cc].flatten.compact.uniq) |
|
|
|
recipients [] |
|
|
|
cc [] |
|
|
|
end |
|
|
|
end |
|
|
|
super |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
# Renders a message with the corresponding layout |
|
|
|
def render_message(method_name, body) |
|
|
|
layout = method_name.match(%r{text\.html\.(rhtml|rxml)}) ? 'layout.text.html.rhtml' : 'layout.text.plain.rhtml' |
|
|
@@ -234,7 +235,7 @@ class Mailer < ActionMailer::Base |
|
|
|
end |
|
|
|
return value |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
# Makes partial rendering work with Rails 1.2 (retro-compatibility) |
|
|
|
def self.controller_path |
|
|
|
'' |