summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2010-11-12 12:29:35 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2010-11-12 12:29:35 +0000
commitd4ab2ab4b97658fabe15a2056087d26b46f36a37 (patch)
tree2e66520145e4ea77b3caa8318394eb0b94a2bc4c
parente0e8c14c2aefd58267f7676b0342f04a37b08185 (diff)
downloadredmine-d4ab2ab4b97658fabe15a2056087d26b46f36a37.tar.gz
redmine-d4ab2ab4b97658fabe15a2056087d26b46f36a37.zip
Makes MailHandler accept localized keywords for default or user language (#6112).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4395 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/mail_handler.rb19
-rw-r--r--test/fixtures/mail_handler/ticket_with_localized_attributes.eml43
-rw-r--r--test/unit/mail_handler_test.rb15
3 files changed, 75 insertions, 2 deletions
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb
index 5688711d4..588dba81a 100644
--- a/app/models/mail_handler.rb
+++ b/app/models/mail_handler.rb
@@ -17,6 +17,7 @@
class MailHandler < ActionMailer::Base
include ActionView::Helpers::SanitizeHelper
+ include Redmine::I18n
class UnauthorizedAction < StandardError; end
class MissingInformation < StandardError; end
@@ -217,14 +218,28 @@ class MailHandler < ActionMailer::Base
@keywords[attr]
else
@keywords[attr] = begin
- if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && plain_text_body.gsub!(/^#{attr.to_s.humanize}[ \t]*:[ \t]*(.+)\s*$/i, '')
- $1.strip
+ if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr))
+ v
elsif !@@handler_options[:issue][attr].blank?
@@handler_options[:issue][attr]
end
end
end
end
+
+ # Destructively extracts the value for +attr+ in +text+
+ # Returns nil if no matching keyword found
+ def extract_keyword!(text, attr)
+ keys = [attr.to_s.humanize]
+ if attr.is_a?(Symbol)
+ keys << l("field_#{attr}", :default => '', :locale => user.language) if user
+ keys << l("field_#{attr}", :default => '', :locale => Setting.default_language)
+ end
+ keys.reject! {|k| k.blank?}
+ keys.collect! {|k| Regexp.escape(k)}
+ text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(.+)\s*$/i, '')
+ $2 && $2.strip
+ end
def target_project
# TODO: other ways to specify project:
diff --git a/test/fixtures/mail_handler/ticket_with_localized_attributes.eml b/test/fixtures/mail_handler/ticket_with_localized_attributes.eml
new file mode 100644
index 000000000..64fabee60
--- /dev/null
+++ b/test/fixtures/mail_handler/ticket_with_localized_attributes.eml
@@ -0,0 +1,43 @@
+Return-Path: <jsmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+ by OSIRIS
+ with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+From: "John Smith" <jsmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: New ticket on a given project
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+ format=flowed;
+ charset="iso-8859-1";
+ reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique
+sed, mauris. Pellentesque habitant morbi tristique senectus et netus et
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse
+platea dictumst.
+
+Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque
+sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem.
+Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et,
+dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed,
+massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo
+pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
+
+Projet: onlinestore
+Tracker: Feature request
+catégorie: Stock management
+priorité: Urgent
diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb
index ac8e10433..74a06f61c 100644
--- a/test/unit/mail_handler_test.rb
+++ b/test/unit/mail_handler_test.rb
@@ -228,6 +228,21 @@ class MailHandlerTest < ActiveSupport::TestCase
Role.anonymous.add_permission!(:add_issues)
assert_equal false, submit_email('ticket_without_from_header.eml')
end
+
+ def test_add_issue_with_localized_attributes
+ User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
+ issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority')
+ assert issue.is_a?(Issue)
+ assert !issue.new_record?
+ issue.reload
+ assert_equal 'New ticket on a given project', issue.subject
+ assert_equal User.find_by_login('jsmith'), issue.author
+ assert_equal Project.find(2), issue.project
+ assert_equal 'Feature request', issue.tracker.to_s
+ assert_equal 'Stock management', issue.category.to_s
+ assert_equal 'Urgent', issue.priority.to_s
+ assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
+ end
def test_add_issue_with_japanese_keywords
tracker = Tracker.create!(:name => '開発')