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) %>

-<%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %>

+<%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %>
+<%= l(:label_example) %>: <%= @guessed_host_and_path %>

<%= select_tag 'settings[protocol]', options_for_select(['http', 'https'], Setting.protocol) %>

diff --git a/lang/en.yml b/lang/en.yml index 42c4e96a6..a76c5d1a5 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -196,7 +196,7 @@ setting_issues_export_limit: Issues export limit setting_mail_from: Emission email address setting_bcc_recipients: Blind carbon copy recipients (bcc) 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_wiki_compression: Wiki history compression setting_feeds_limit: Feed content limit @@ -576,6 +576,7 @@ label_planning: Planning label_incoming_emails: Incoming emails label_generate_key: Generate a key label_issue_watchers: Watchers +label_example: Example button_login: Login button_submit: Submit diff --git a/lang/fr.yml b/lang/fr.yml index 576476c0a..556bb4548 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -197,7 +197,7 @@ setting_issues_export_limit: Limite export demandes setting_mail_from: Adresse d'émission setting_bcc_recipients: Destinataires en copie cachée (cci) 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_wiki_compression: Compression historique wiki setting_feeds_limit: Limite du contenu des flux RSS @@ -576,6 +576,7 @@ label_planning: Planning label_incoming_emails: Emails entrants label_generate_key: Générer une clé label_issue_watchers: Utilisateurs surveillant cette demande +label_example: Exemple button_login: Connexion button_submit: Soumettre