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
This commit is contained in:
parent
4581baa5c0
commit
006337fb0e
@ -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
|
|||||||
@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 @@
|
|||||||
# 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
|
|||||||
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
|
|||||||
: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
|
|||||||
: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
|
|||||||
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
|
|||||||
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
|
|||||||
: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
|
|||||||
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
|
|||||||
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
|
|||||||
# 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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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 @@
|
|||||||
<%= 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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user