summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xapp/models/mail_handler.rb30
-rw-r--r--test/fixtures/mail_handler/ticket_with_localized_private_flag.eml41
-rw-r--r--test/unit/mail_handler_test.rb15
3 files changed, 85 insertions, 1 deletions
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb
index 0d004ecb5..8b5d7133f 100755
--- a/app/models/mail_handler.rb
+++ b/app/models/mail_handler.rb
@@ -203,7 +203,9 @@ class MailHandler < ActionMailer::Base
end
issue.description = cleaned_up_text_body
issue.start_date ||= User.current.today if Setting.default_issue_start_date_to_creation_date?
- issue.is_private = (handler_options[:issue][:is_private] == '1')
+ if handler_options[:issue][:is_private] == '1'
+ issue.is_private = true
+ end
# add To and Cc as watchers before saving so the watchers can reply to Redmine
add_watchers(issue)
@@ -415,12 +417,38 @@ class MailHandler < ActionMailer::Base
'due_date' => get_keyword(:due_date, :format => '\d{4}-\d{2}-\d{2}'),
'estimated_hours' => get_keyword(:estimated_hours),
'done_ratio' => get_keyword(:done_ratio, :format => '(\d|10)?0'),
+ 'is_private' => get_keyword_bool(:is_private),
'parent_issue_id' => get_keyword(:parent_issue)
}.delete_if {|k, v| v.blank? }
attrs
end
+ def get_keyword_bool(attr)
+ true_values = ["1"]
+ false_values = ["0"]
+ locales = [Setting.default_language]
+ if user
+ locales << user.language
+ end
+ locales.select(&:present?).each do |locale|
+ true_values << l("general_text_yes", :default => '', :locale => locale)
+ true_values << l("general_text_Yes", :default => '', :locale => locale)
+ false_values << l("general_text_no", :default => '', :locale => locale)
+ false_values << l("general_text_No", :default => '', :locale => locale)
+ end
+ values = (true_values + false_values).select(&:present?)
+ format = Regexp.union values
+ if value = get_keyword(attr, :format => format)
+ if true_values.include?(value)
+ return true
+ elsif false_values.include?(value)
+ return false
+ end
+ end
+ nil
+ end
+
# Returns a Hash of issue custom field values extracted from keywords in the email body
def custom_field_values_from_keywords(customized)
customized.custom_field_values.inject({}) do |h, v|
diff --git a/test/fixtures/mail_handler/ticket_with_localized_private_flag.eml b/test/fixtures/mail_handler/ticket_with_localized_private_flag.eml
new file mode 100644
index 000000000..6852b33be
--- /dev/null
+++ b/test/fixtures/mail_handler/ticket_with_localized_private_flag.eml
@@ -0,0 +1,41 @@
+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
+Privée: oui
diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb
index 8a4978294..61b60434f 100644
--- a/test/unit/mail_handler_test.rb
+++ b/test/unit/mail_handler_test.rb
@@ -496,6 +496,21 @@ class MailHandlerTest < ActiveSupport::TestCase
assert_equal 'ecookbook', issue.project.identifier
end
+ def test_add_issue_with_private_keyword
+ User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
+ # give the user permission to set issues private:
+ MemberRole.create! member_id: 3, role_id: 1
+ issue = submit_email(
+ 'ticket_with_localized_private_flag.eml',
+ :allow_override => 'is_private,tracker,category,priority'
+ )
+ assert issue.is_a?(Issue)
+ refute issue.new_record?
+ issue.reload
+ assert_equal 'New ticket on a given project', issue.subject
+ assert issue.is_private
+ end
+
def test_add_issue_with_localized_attributes
User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
issue = submit_email(