From d640f7b249b92fe98eff5727bc635a6fd65598bd Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 10 May 2015 09:07:36 +0000 Subject: [PATCH] Adds private issue option to receiving emails (#8424). git-svn-id: http://svn.redmine.org/redmine/trunk@14262 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/mail_handler.rb | 4 ++++ extra/mail_handler/rdm-mailhandler.rb | 1 + lib/tasks/email.rake | 1 + test/functional/mail_handler_controller_test.rb | 15 +++++++++++++++ test/unit/mail_handler_test.rb | 7 +++++++ 5 files changed, 28 insertions(+) diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 408932d57..78cff699b 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -69,6 +69,9 @@ class MailHandler < ActionMailer::Base %w(allow_override unknown_user no_permission_check no_account_notice default_group).each do |option| options[option.to_sym] = env[option] if env[option] end + if env['private'] + options[:issue][:is_private] = '1' + end options end @@ -205,6 +208,7 @@ class MailHandler < ActionMailer::Base end issue.description = cleaned_up_text_body issue.start_date ||= Date.today if Setting.default_issue_start_date_to_creation_date? + issue.is_private = (handler_options[:issue][:is_private] == '1') # add To and Cc as watchers before saving so the watchers can reply to Redmine add_watchers(issue) diff --git a/extra/mail_handler/rdm-mailhandler.rb b/extra/mail_handler/rdm-mailhandler.rb index 36d06cb56..f5fbe3ac9 100644 --- a/extra/mail_handler/rdm-mailhandler.rb +++ b/extra/mail_handler/rdm-mailhandler.rb @@ -87,6 +87,7 @@ class RedmineMailHandler opts.on("-t", "--tracker TRACKER", "name of the target tracker") {|v| self.issue_attributes['tracker'] = v} opts.on( "--category CATEGORY", "name of the target category") {|v| self.issue_attributes['category'] = v} opts.on( "--priority PRIORITY", "name of the target priority") {|v| self.issue_attributes['priority'] = v} + opts.on( "--private", "create new issues as private") {|v| self.issue_attributes['is_private'] = '1'} opts.on("-o", "--allow-override ATTRS", "allow email content to override attributes", "specified by previous options", "ATTRS is a comma separated list of attributes") {|v| self.allow_override = v} diff --git a/lib/tasks/email.rake b/lib/tasks/email.rake index 121afc4a6..82b84788c 100644 --- a/lib/tasks/email.rake +++ b/lib/tasks/email.rake @@ -89,6 +89,7 @@ Issue attributes control options: tracker=TRACKER name of the target tracker category=CATEGORY name of the target category priority=PRIORITY name of the target priority + private create new issues as private allow_override=ATTRS allow email content to override attributes specified by previous options ATTRS is a comma separated list of attributes diff --git a/test/functional/mail_handler_controller_test.rb b/test/functional/mail_handler_controller_test.rb index 3487d5eb2..a966b774d 100644 --- a/test/functional/mail_handler_controller_test.rb +++ b/test/functional/mail_handler_controller_test.rb @@ -38,6 +38,21 @@ class MailHandlerControllerTest < ActionController::TestCase assert_response 201 end + def test_should_create_issue_with_options + # Enable API and set a key + Setting.mail_handler_api_enabled = 1 + Setting.mail_handler_api_key = 'secret' + + assert_difference 'Issue.count' do + post :index, :key => 'secret', + :email => IO.read(File.join(FIXTURES_PATH, 'ticket_on_given_project.eml')), + :issue => {:is_private => '1'} + end + assert_response 201 + issue = Issue.order(:id => :desc).first + assert_equal true, issue.is_private + end + def test_should_respond_with_422_if_not_created Project.find('onlinestore').destroy diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb index 2ae3cb5c1..99900666d 100644 --- a/test/unit/mail_handler_test.rb +++ b/test/unit/mail_handler_test.rb @@ -94,6 +94,13 @@ class MailHandlerTest < ActiveSupport::TestCase assert_equal IssueStatus.find_by_name("Resolved"), issue.status end + def test_add_issue_should_accept_is_private_attribute + issue = submit_email('ticket_on_given_project.eml', :issue => {:is_private => '1'}) + assert issue.is_a?(Issue) + assert !issue.new_record? + assert_equal true, issue.reload.is_private + end + def test_add_issue_with_attributes_override issue = submit_email( 'ticket_with_attributes.eml', -- 2.39.5