From 394ba669d10fe69486d9857d19b970b57bdef482 Mon Sep 17 00:00:00 2001 From: Jens Kraemer Date: Wed, 20 Mar 2019 12:34:54 +0800 Subject: [PATCH] allows setting the private flag via mail keyword #508327 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Format: (Is Private|Private|Privée): (yes|no|Yes|No|Oui|Non|oui|non|1|0) --- app/models/mail_handler.rb | 30 +++++++++++++++- .../ticket_with_localized_private_flag.eml | 40 ++++++++++++++++++++++ test/unit/mail_handler_test.rb | 15 ++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/mail_handler/ticket_with_localized_private_flag.eml diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 0d004ecb50..8b5d7133f6 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 0000000000..0950cbec91 --- /dev/null +++ b/test/fixtures/mail_handler/ticket_with_localized_private_flag.eml @@ -0,0 +1,40 @@ +Return-Path: +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" +To: +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. + +Privée: oui diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb index 8a4978294c..61b60434f7 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( -- 2.11.0