From 006337fb0e8c45813031a0ced14746733692a173 Mon Sep 17 00:00:00 2001
From: Jean-Philippe Lang
Date: Fri, 7 Nov 2008 15:37:17 +0000
Subject: [PATCH] Host setting should contain the path prefix (Redmine base
URL) to properly generate links in emails that are sent offline (#2122).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@1989 e93f8b46-1217-0410-a6f0-8f06a7374b81
---
app/controllers/settings_controller.rb | 11 ++++---
app/models/mailer.rb | 45 +++++++++++++-------------
app/views/settings/_general.rhtml | 3 +-
lang/en.yml | 3 +-
lang/fr.yml | 3 +-
5 files changed, 36 insertions(+), 29 deletions(-)
diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb
index 6482a3576..7f9c9d5cc 100644
--- a/app/controllers/settings_controller.rb
+++ b/app/controllers/settings_controller.rb
@@ -5,19 +5,19 @@
# 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 SettingsController < ApplicationController
before_filter :require_admin
-
+
def index
edit
render :action => 'edit'
@@ -39,8 +39,11 @@ class SettingsController < ApplicationController
@options = {}
@options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] }
@deliveries = ActionMailer::Base.perform_deliveries
+
+ @guessed_host_and_path = request.host_with_port
+ @guessed_host_and_path << ('/'+ request.relative_url_root.gsub(%r{^\/}, '')) unless request.relative_url_root.blank?
end
-
+
def plugin
plugin_id = params[:id].to_sym
@plugin = Redmine::Plugin.registered_plugins[plugin_id]
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index 60a5a827d..070f7e570 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -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
''
diff --git a/app/views/settings/_general.rhtml b/app/views/settings/_general.rhtml
index 85b459720..06db77b22 100644
--- a/app/views/settings/_general.rhtml
+++ b/app/views/settings/_general.rhtml
@@ -33,7 +33,8 @@
<%= text_field_tag 'settings[activity_days_default]', Setting.activity_days_default, :size => 6 %> <%= l(:label_day_plural) %>