##// END OF EJS Templates
Backported r2429, r2430, r248 to r2491 and r2522 from trunk (request and controller objects added to the hooks by default.)....
Backported r2429, r2430, r248 to r2491 and r2522 from trunk (request and controller objects added to the hooks by default.). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.8-stable@2558 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r2490:36b5d4f6af04
r2490:36b5d4f6af04
Show More
mailer.rb
262 lines | 10.3 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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.
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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.
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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 Mailer < ActionMailer::Base
Jean-Philippe Lang
Fixed: "undefined method 'textilizable'" error on email notification when running Repository#fetch_changesets from the console....
r1153 helper :application
helper :issues
helper :custom_fields
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Mailer:...
r864 include ActionController::UrlWriter
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Backported r2429, r2430, r248 to r2491 and r2522 from trunk (request and controller objects added to the hooks by default.)....
r2490 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
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987 def issue_add(issue)
Jean-Philippe Lang
Add the following headers to email notifications (#830, #247):...
r1250 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
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987 recipients issue.recipients
Jean-Philippe Lang
Merged r2164 to r2167, r2188 and r2189 from trunk....
r2214 cc(issue.watcher_recipients - @recipients)
Jean-Philippe Lang
Display the issue status in the email subject only if the status was actually changed....
r1065 subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}"
Jean-Philippe Lang
Mailer:...
r864 body :issue => issue,
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def issue_edit(journal)
issue = journal.journalized
Jean-Philippe Lang
Add the following headers to email notifications (#830, #247):...
r1250 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
Jean-Philippe Lang
Merged r2218 to r2225 from trunk....
r2228 @author = journal.user
Jean-Philippe Lang
Mailer:...
r864 recipients issue.recipients
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 # Watchers in cc
Jean-Philippe Lang
Mailer:...
r864 cc(issue.watcher_recipients - @recipients)
Jean-Philippe Lang
Display the issue status in the email subject only if the status was actually changed....
r1065 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
Jean-Philippe Lang
Mailer:...
r864 body :issue => issue,
:journal => journal,
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Adds a rake task to send reminders. An email is sent to each user with a list of the issues due in the next days, if any....
r1445 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,
Jean-Philippe Lang
Merged r2168 to r2171 from trunk....
r2170 :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc')
Jean-Philippe Lang
Adds a rake task to send reminders. An email is sent to each user with a list of the issues due in the next days, if any....
r1445 end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Removed translated email templates attachments_added and document_added (no longer usefull)....
r823 def document_added(document)
Jean-Philippe Lang
Add the following headers to email notifications (#830, #247):...
r1250 redmine_headers 'Project' => document.project.identifier
Jean-Philippe Lang
Mailer:...
r864 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)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Removed translated email templates attachments_added and document_added (no longer usefull)....
r823 def attachments_added(attachments)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 container = attachments.first.container
Jean-Philippe Lang
Replaced hard-coded urls in Mailer#attachments_add...
r658 added_to = ''
Jean-Philippe Lang
Mailer:...
r864 added_to_url = ''
Jean-Philippe Lang
Replaced hard-coded urls in Mailer#attachments_add...
r658 case container.class.name
Jean-Philippe Lang
Merged r2116, r2117 and r2187 from trunk....
r2215 when 'Project'
added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container)
added_to = "#{l(:label_project)}: #{container}"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 when 'Version'
Jean-Philippe Lang
Mailer:...
r864 added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container.project_id)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 added_to = "#{l(:label_version)}: #{container.name}"
when 'Document'
Jean-Philippe Lang
Mailer:...
r864 added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 added_to = "#{l(:label_document)}: #{container.title}"
end
Jean-Philippe Lang
Add the following headers to email notifications (#830, #247):...
r1250 redmine_headers 'Project' => container.project.identifier
Jean-Philippe Lang
Mailer:...
r864 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
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Mail notification options restored (default is: issue_added and issue_updated)....
r717
def news_added(news)
Jean-Philippe Lang
Add the following headers to email notifications (#830, #247):...
r1250 redmine_headers 'Project' => news.project.identifier
Jean-Philippe Lang
Mailer:...
r864 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)
Jean-Philippe Lang
Mail notification options restored (default is: issue_added and issue_updated)....
r717 end
Jean-Philippe Lang
Mailer:...
r864
def message_posted(message, recipients)
Jean-Philippe Lang
Add the following headers to email notifications (#830, #247):...
r1250 redmine_headers 'Project' => message.project.identifier,
'Topic-Id' => (message.parent_id || message.id)
Jean-Philippe Lang
Mailer:...
r864 recipients(recipients)
subject "[#{message.board.project.name} - #{message.board.name}] #{message.subject}"
body :message => message,
:message_url => url_for(:controller => 'messages', :action => 'show', :board_id => message.board_id, :id => message.root)
end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Mailer:...
r864 def account_information(user, password)
set_language_if_valid user.language
recipients user.mail
Jean-Philippe Lang
Remove hardcoded "Redmine" strings in account related emails. And use application title instead....
r1239 subject l(:mail_subject_register, Setting.app_title)
Jean-Philippe Lang
Mailer:...
r864 body :user => user,
:password => password,
:login_url => url_for(:controller => 'account', :action => 'login')
end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
There's now 3 account activation strategies (available in application settings):...
r902 def account_activation_request(user)
# Send the email to all active administrators
Jean-Philippe Lang
Replaces User.find_active with a named scope....
r2077 recipients User.active.find(:all, :conditions => {:admin => true}).collect { |u| u.mail }.compact
Jean-Philippe Lang
Remove hardcoded "Redmine" strings in account related emails. And use application title instead....
r1239 subject l(:mail_subject_account_activation_request, Setting.app_title)
Jean-Philippe Lang
There's now 3 account activation strategies (available in application settings):...
r902 body :user => user,
:url => url_for(:controller => 'users', :action => 'index', :status => User::STATUS_REGISTERED, :sort_key => 'created_on', :sort_order => 'desc')
end
Jean-Philippe Lang
Mailer:...
r864
Jean-Philippe Lang
Merged r2426 and r2484 from trunk....
r2449 # A registered user's account was activated by an administrator
def account_activated(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
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def lost_password(token)
set_language_if_valid(token.user.language)
Jean-Philippe Lang
Mailer:...
r864 recipients token.user.mail
Jean-Philippe Lang
Remove hardcoded "Redmine" strings in account related emails. And use application title instead....
r1239 subject l(:mail_subject_lost_password, Setting.app_title)
Jean-Philippe Lang
Mailer:...
r864 body :token => token,
:url => url_for(:controller => 'account', :action => 'lost_password', :token => token.value)
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
def register(token)
set_language_if_valid(token.user.language)
Jean-Philippe Lang
Mailer:...
r864 recipients token.user.mail
Jean-Philippe Lang
Remove hardcoded "Redmine" strings in account related emails. And use application title instead....
r1239 subject l(:mail_subject_register, Setting.app_title)
Jean-Philippe Lang
Mailer:...
r864 body :token => token,
Jean-Philippe Lang
There's now 3 account activation strategies (available in application settings):...
r902 :url => url_for(:controller => 'account', :action => 'activate', :token => token.value)
Jean-Philippe Lang
Added mail notification when a new message is posted in the forums....
r528 end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Added 'email sending test' functionality....
r629 def test(user)
set_language_if_valid(user.language)
Jean-Philippe Lang
Mailer:...
r864 recipients user.mail
subject 'Redmine test'
body :url => url_for(:controller => 'welcome')
end
Jean-Philippe Lang
Do not send an email with no recipient, cc or bcc (closes #743)....
r1160
# Overrides default deliver! method to prevent from sending an email
# with no recipient, cc or bcc
def deliver!(mail = @mail)
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987 return false if (recipients.nil? || recipients.empty?) &&
Jean-Philippe Lang
Do not send an email with no recipient, cc or bcc (closes #743)....
r1160 (cc.nil? || cc.empty?) &&
(bcc.nil? || bcc.empty?)
super
end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Adds a rake task to send reminders. An email is sent to each user with a list of the issues due in the next days, if any....
r1445 # 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)
def self.reminders(options={})
days = options[:days] || 7
project = options[:project] ? Project.find(options[:project]) : nil
tracker = options[:tracker] ? Tracker.find(options[:tracker]) : nil
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Fixed: Reminder emails shouldn't include archived projects (#1351)....
r1469 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}"
Jean-Philippe Lang
Adds a rake task to send reminders. An email is sent to each user with a list of the issues due in the next days, if any....
r1445 s << "#{Issue.table_name}.project_id = #{project.id}" if project
s << "#{Issue.table_name}.tracker_id = #{tracker.id}" if tracker
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Adds a rake task to send reminders. An email is sent to each user with a list of the issues due in the next days, if any....
r1445 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
Jean-Philippe Lang
Do not send an email with no recipient, cc or bcc (closes #743)....
r1160
Jean-Philippe Lang
Mailer:...
r864 private
def initialize_defaults(method_name)
super
set_language_if_valid Setting.default_language
from Setting.mail_from
Jean-Philippe Lang
Do not use @:skip_relative_url_root@ to generate urls in Mailer (#2122)....
r1990
Jean-Philippe Lang
Add the following headers to email notifications (#830, #247):...
r1250 # Common headers
headers 'X-Mailer' => 'Redmine',
'X-Redmine-Host' => Setting.host_name,
'X-Redmine-Site' => Setting.app_title
end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Add the following headers to email notifications (#830, #247):...
r1250 # Appends a Redmine header field (name is prepended with 'X-Redmine-')
def redmine_headers(h)
h.each { |k,v| headers["X-Redmine-#{k}"] = v }
Jean-Philippe Lang
Mailer:...
r864 end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Email notifications are now sent as Blind carbon copy by default. This can be changed in email notifications settings (new setting added)....
r931 # Overrides the create_mail method
Jean-Philippe Lang
Added an option on 'My account' for users who don't want to be notified of changes that they make....
r886 def create_mail
Jean-Philippe Lang
Email notifications are now sent as Blind carbon copy by default. This can be changed in email notifications settings (new setting added)....
r931 # Removes the current user from the recipients and cc
# if he doesn't want to receive notifications about what he does
Jean-Philippe Lang
Merged r2218 to r2225 from trunk....
r2228 @author ||= User.current
if @author.pref[:no_self_notified]
recipients.delete(@author.mail) if recipients
cc.delete(@author.mail) if cc
Jean-Philippe Lang
Email notifications are now sent as Blind carbon copy by default. This can be changed in email notifications settings (new setting added)....
r931 end
# Blind carbon copy recipients
if Setting.bcc_recipients?
bcc([recipients, cc].flatten.compact.uniq)
recipients []
cc []
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987 end
Jean-Philippe Lang
Added an option on 'My account' for users who don't want to be notified of changes that they make....
r886 super
end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Mailer:...
r864 # 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'
body[:content_for_layout] = render(:file => method_name, :body => body)
Jean-Philippe Lang
Mailer compatibility with Rails 2.1.1....
r1809 ActionView::Base.new(template_root, body, self).render(:file => "mailer/#{layout}", :use_full_path => true)
Jean-Philippe Lang
Added 'email sending test' functionality....
r629 end
Nicolas Chuche
add plain text option for mail #2029...
r1930
# for the case of plain text only
def body(*params)
value = super(*params)
if Setting.plain_text_mail?
templates = Dir.glob("#{template_path}/#{@template}.text.plain.{rhtml,erb}")
unless String === @body or templates.empty?
template = File.basename(templates.first)
@body[:content_for_layout] = render(:file => template, :body => @body)
@body = ActionView::Base.new(template_root, @body, self).render(:file => "mailer/layout.text.plain.rhtml", :use_full_path => true)
return @body
end
end
return value
end
Jean-Philippe Lang
Host setting should contain the path prefix (Redmine base URL) to properly generate links in emails that are sent offline (#2122)....
r1987
Jean-Philippe Lang
Merged Rails 2.0 compatibility changes....
r962 # Makes partial rendering work with Rails 1.2 (retro-compatibility)
def self.controller_path
''
end unless respond_to?('controller_path')
Jean-Philippe Lang
Initial commit...
r2 end