Commit 006337fb authored by Jean-Philippe Lang's avatar Jean-Philippe Lang

Host setting should contain the path prefix (Redmine base URL) to properly…

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
parent 4581baa5
...@@ -5,19 +5,19 @@ ...@@ -5,19 +5,19 @@
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 # as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version. # of the License, or (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class SettingsController < ApplicationController class SettingsController < ApplicationController
before_filter :require_admin before_filter :require_admin
def index def index
edit edit
render :action => 'edit' render :action => 'edit'
...@@ -39,8 +39,11 @@ class SettingsController < ApplicationController ...@@ -39,8 +39,11 @@ class SettingsController < ApplicationController
@options = {} @options = {}
@options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] } @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] }
@deliveries = ActionMailer::Base.perform_deliveries @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 end
def plugin def plugin
plugin_id = params[:id].to_sym plugin_id = params[:id].to_sym
@plugin = Redmine::Plugin.registered_plugins[plugin_id] @plugin = Redmine::Plugin.registered_plugins[plugin_id]
......
...@@ -5,12 +5,12 @@ ...@@ -5,12 +5,12 @@
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 # as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version. # of the License, or (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
...@@ -19,15 +19,15 @@ class Mailer < ActionMailer::Base ...@@ -19,15 +19,15 @@ class Mailer < ActionMailer::Base
helper :application helper :application
helper :issues helper :issues
helper :custom_fields helper :custom_fields
include ActionController::UrlWriter include ActionController::UrlWriter
def issue_add(issue) def issue_add(issue)
redmine_headers 'Project' => issue.project.identifier, redmine_headers 'Project' => issue.project.identifier,
'Issue-Id' => issue.id, 'Issue-Id' => issue.id,
'Issue-Author' => issue.author.login 'Issue-Author' => issue.author.login
redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to 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}" subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}"
body :issue => issue, body :issue => issue,
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue) :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
...@@ -50,7 +50,7 @@ class Mailer < ActionMailer::Base ...@@ -50,7 +50,7 @@ class Mailer < ActionMailer::Base
:journal => journal, :journal => journal,
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue) :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
end end
def reminder(user, issues, days) def reminder(user, issues, days)
set_language_if_valid user.language set_language_if_valid user.language
recipients user.mail recipients user.mail
...@@ -59,7 +59,7 @@ class Mailer < ActionMailer::Base ...@@ -59,7 +59,7 @@ class Mailer < ActionMailer::Base
:days => days, :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') :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 end
def document_added(document) def document_added(document)
redmine_headers 'Project' => document.project.identifier redmine_headers 'Project' => document.project.identifier
recipients document.project.recipients recipients document.project.recipients
...@@ -67,7 +67,7 @@ class Mailer < ActionMailer::Base ...@@ -67,7 +67,7 @@ class Mailer < ActionMailer::Base
body :document => document, body :document => document,
:document_url => url_for(:controller => 'documents', :action => 'show', :id => document) :document_url => url_for(:controller => 'documents', :action => 'show', :id => document)
end end
def attachments_added(attachments) def attachments_added(attachments)
container = attachments.first.container container = attachments.first.container
added_to = '' added_to = ''
...@@ -104,7 +104,7 @@ class Mailer < ActionMailer::Base ...@@ -104,7 +104,7 @@ class Mailer < ActionMailer::Base
body :message => message, body :message => message,
:message_url => url_for(:controller => 'messages', :action => 'show', :board_id => message.board_id, :id => message.root) :message_url => url_for(:controller => 'messages', :action => 'show', :board_id => message.board_id, :id => message.root)
end end
def account_information(user, password) def account_information(user, password)
set_language_if_valid user.language set_language_if_valid user.language
recipients user.mail recipients user.mail
...@@ -113,7 +113,7 @@ class Mailer < ActionMailer::Base ...@@ -113,7 +113,7 @@ class Mailer < ActionMailer::Base
:password => password, :password => password,
:login_url => url_for(:controller => 'account', :action => 'login') :login_url => url_for(:controller => 'account', :action => 'login')
end end
def account_activation_request(user) def account_activation_request(user)
# Send the email to all active administrators # Send the email to all active administrators
recipients User.find_active(:all, :conditions => {:admin => true}).collect { |u| u.mail }.compact recipients User.find_active(:all, :conditions => {:admin => true}).collect { |u| u.mail }.compact
...@@ -128,7 +128,7 @@ class Mailer < ActionMailer::Base ...@@ -128,7 +128,7 @@ class Mailer < ActionMailer::Base
subject l(:mail_subject_lost_password, Setting.app_title) subject l(:mail_subject_lost_password, Setting.app_title)
body :token => token, body :token => token,
:url => url_for(:controller => 'account', :action => 'lost_password', :token => token.value) :url => url_for(:controller => 'account', :action => 'lost_password', :token => token.value)
end end
def register(token) def register(token)
set_language_if_valid(token.user.language) set_language_if_valid(token.user.language)
...@@ -137,7 +137,7 @@ class Mailer < ActionMailer::Base ...@@ -137,7 +137,7 @@ class Mailer < ActionMailer::Base
body :token => token, body :token => token,
:url => url_for(:controller => 'account', :action => 'activate', :token => token.value) :url => url_for(:controller => 'account', :action => 'activate', :token => token.value)
end end
def test(user) def test(user)
set_language_if_valid(user.language) set_language_if_valid(user.language)
recipients user.mail recipients user.mail
...@@ -148,12 +148,12 @@ class Mailer < ActionMailer::Base ...@@ -148,12 +148,12 @@ class Mailer < ActionMailer::Base
# Overrides default deliver! method to prevent from sending an email # Overrides default deliver! method to prevent from sending an email
# with no recipient, cc or bcc # with no recipient, cc or bcc
def deliver!(mail = @mail) def deliver!(mail = @mail)
return false if (recipients.nil? || recipients.empty?) && return false if (recipients.nil? || recipients.empty?) &&
(cc.nil? || cc.empty?) && (cc.nil? || cc.empty?) &&
(bcc.nil? || bcc.empty?) (bcc.nil? || bcc.empty?)
super super
end end
# Sends reminders to issue assignees # Sends reminders to issue assignees
# Available options: # Available options:
# * :days => how many days in the future to remind about (defaults to 7) # * :days => how many days in the future to remind about (defaults to 7)
...@@ -163,13 +163,13 @@ class Mailer < ActionMailer::Base ...@@ -163,13 +163,13 @@ class Mailer < ActionMailer::Base
days = options[:days] || 7 days = options[:days] || 7
project = options[:project] ? Project.find(options[:project]) : nil project = options[:project] ? Project.find(options[:project]) : nil
tracker = options[:tracker] ? Tracker.find(options[:tracker]) : 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 = 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 << "#{Issue.table_name}.assigned_to_id IS NOT NULL"
s << "#{Project.table_name}.status = #{Project::STATUS_ACTIVE}" s << "#{Project.table_name}.status = #{Project::STATUS_ACTIVE}"
s << "#{Issue.table_name}.project_id = #{project.id}" if project s << "#{Issue.table_name}.project_id = #{project.id}" if project
s << "#{Issue.table_name}.tracker_id = #{tracker.id}" if tracker s << "#{Issue.table_name}.tracker_id = #{tracker.id}" if tracker
issues_by_assignee = Issue.find(:all, :include => [:status, :assigned_to, :project, :tracker], issues_by_assignee = Issue.find(:all, :include => [:status, :assigned_to, :project, :tracker],
:conditions => s.conditions :conditions => s.conditions
).group_by(&:assigned_to) ).group_by(&:assigned_to)
...@@ -185,17 +185,18 @@ class Mailer < ActionMailer::Base ...@@ -185,17 +185,18 @@ class Mailer < ActionMailer::Base
from Setting.mail_from from Setting.mail_from
default_url_options[:host] = Setting.host_name default_url_options[:host] = Setting.host_name
default_url_options[:protocol] = Setting.protocol default_url_options[:protocol] = Setting.protocol
default_url_options[:skip_relative_url_root] = true
# Common headers # Common headers
headers 'X-Mailer' => 'Redmine', headers 'X-Mailer' => 'Redmine',
'X-Redmine-Host' => Setting.host_name, 'X-Redmine-Host' => Setting.host_name,
'X-Redmine-Site' => Setting.app_title 'X-Redmine-Site' => Setting.app_title
end end
# Appends a Redmine header field (name is prepended with 'X-Redmine-') # Appends a Redmine header field (name is prepended with 'X-Redmine-')
def redmine_headers(h) def redmine_headers(h)
h.each { |k,v| headers["X-Redmine-#{k}"] = v } h.each { |k,v| headers["X-Redmine-#{k}"] = v }
end end
# Overrides the create_mail method # Overrides the create_mail method
def create_mail def create_mail
# Removes the current user from the recipients and cc # Removes the current user from the recipients and cc
...@@ -209,10 +210,10 @@ class Mailer < ActionMailer::Base ...@@ -209,10 +210,10 @@ class Mailer < ActionMailer::Base
bcc([recipients, cc].flatten.compact.uniq) bcc([recipients, cc].flatten.compact.uniq)
recipients [] recipients []
cc [] cc []
end end
super super
end end
# Renders a message with the corresponding layout # Renders a message with the corresponding layout
def render_message(method_name, body) def render_message(method_name, body)
layout = method_name.match(%r{text\.html\.(rhtml|rxml)}) ? 'layout.text.html.rhtml' : 'layout.text.plain.rhtml' 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 ...@@ -234,7 +235,7 @@ class Mailer < ActionMailer::Base
end end
return value return value
end end
# Makes partial rendering work with Rails 1.2 (retro-compatibility) # Makes partial rendering work with Rails 1.2 (retro-compatibility)
def self.controller_path def self.controller_path
'' ''
......
...@@ -33,7 +33,8 @@ ...@@ -33,7 +33,8 @@
<%= text_field_tag 'settings[activity_days_default]', Setting.activity_days_default, :size => 6 %> <%= l(:label_day_plural) %></p> <%= text_field_tag 'settings[activity_days_default]', Setting.activity_days_default, :size => 6 %> <%= l(:label_day_plural) %></p>
<p><label><%= l(:setting_host_name) %></label> <p><label><%= l(:setting_host_name) %></label>
<%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %></p> <%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %><br />
<em><%= l(:label_example) %>: <%= @guessed_host_and_path %></em></p>
<p><label><%= l(:setting_protocol) %></label> <p><label><%= l(:setting_protocol) %></label>
<%= select_tag 'settings[protocol]', options_for_select(['http', 'https'], Setting.protocol) %></p> <%= select_tag 'settings[protocol]', options_for_select(['http', 'https'], Setting.protocol) %></p>
......
...@@ -196,7 +196,7 @@ setting_issues_export_limit: Issues export limit ...@@ -196,7 +196,7 @@ setting_issues_export_limit: Issues export limit
setting_mail_from: Emission email address setting_mail_from: Emission email address
setting_bcc_recipients: Blind carbon copy recipients (bcc) setting_bcc_recipients: Blind carbon copy recipients (bcc)
setting_plain_text_mail: plain text mail (no HTML) setting_plain_text_mail: plain text mail (no HTML)
setting_host_name: Host name setting_host_name: Host name and path
setting_text_formatting: Text formatting setting_text_formatting: Text formatting
setting_wiki_compression: Wiki history compression setting_wiki_compression: Wiki history compression
setting_feeds_limit: Feed content limit setting_feeds_limit: Feed content limit
...@@ -576,6 +576,7 @@ label_planning: Planning ...@@ -576,6 +576,7 @@ label_planning: Planning
label_incoming_emails: Incoming emails label_incoming_emails: Incoming emails
label_generate_key: Generate a key label_generate_key: Generate a key
label_issue_watchers: Watchers label_issue_watchers: Watchers
label_example: Example
button_login: Login button_login: Login
button_submit: Submit button_submit: Submit
......
...@@ -197,7 +197,7 @@ setting_issues_export_limit: Limite export demandes ...@@ -197,7 +197,7 @@ setting_issues_export_limit: Limite export demandes
setting_mail_from: Adresse d'émission setting_mail_from: Adresse d'émission
setting_bcc_recipients: Destinataires en copie cachée (cci) setting_bcc_recipients: Destinataires en copie cachée (cci)
setting_plain_text_mail: Mail texte brut (non HTML) setting_plain_text_mail: Mail texte brut (non HTML)
setting_host_name: Nom d'hôte setting_host_name: Nom d'hôte et chemin
setting_text_formatting: Formatage du texte setting_text_formatting: Formatage du texte
setting_wiki_compression: Compression historique wiki setting_wiki_compression: Compression historique wiki
setting_feeds_limit: Limite du contenu des flux RSS setting_feeds_limit: Limite du contenu des flux RSS
...@@ -576,6 +576,7 @@ label_planning: Planning ...@@ -576,6 +576,7 @@ label_planning: Planning
label_incoming_emails: Emails entrants label_incoming_emails: Emails entrants
label_generate_key: Générer une clé label_generate_key: Générer une clé
label_issue_watchers: Utilisateurs surveillant cette demande label_issue_watchers: Utilisateurs surveillant cette demande
label_example: Exemple
button_login: Connexion button_login: Connexion
button_submit: Soumettre button_submit: Soumettre
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment