From 1949f61d0c37ddb4c8282abc291a18cf2444293b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Mon, 6 Aug 2012 21:16:19 +0000 Subject: [PATCH] Fixed: Custom fields of type version not proper handled in receiving e-mails (#11571). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10157 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/custom_field.rb | 10 ++++++++++ app/models/mail_handler.rb | 4 ++-- test/unit/mail_handler_test.rb | 12 ++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb index 3373fb8d8..83e0fa254 100644 --- a/app/models/custom_field.rb +++ b/app/models/custom_field.rb @@ -126,6 +126,16 @@ class CustomField < ActiveRecord::Base casted end + def value_from_keyword(keyword, customized) + possible_values_options = possible_values_options(customized) + if possible_values_options.present? + keyword = keyword.to_s.downcase + possible_values_options.detect {|text, id| text.downcase == keyword}.try(:last) + else + keyword + end + end + # Returns a ORDER BY clause that can used to sort customized # objects by their value of the custom field. # Returns nil if the custom field can not be used for sorting. diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 4b86221f6..01cf8d74f 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -342,8 +342,8 @@ class MailHandler < ActionMailer::Base # 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| - if value = get_keyword(v.custom_field.name, :override => true) - h[v.custom_field.id.to_s] = value + if keyword = get_keyword(v.custom_field.name, :override => true) + h[v.custom_field.id.to_s] = v.custom_field.value_from_keyword(keyword, customized) end h end diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb index ce21f3cea..32646fcdd 100644 --- a/test/unit/mail_handler_test.rb +++ b/test/unit/mail_handler_test.rb @@ -182,6 +182,18 @@ class MailHandlerTest < ActiveSupport::TestCase assert !issue.description.match(/^searchable field:/i) end + def test_add_issue_with_version_custom_fields + field = IssueCustomField.create!(:name => 'Affected version', :field_format => 'version', :is_for_all => true, :tracker_ids => [1,2,3]) + + issue = submit_email('ticket_with_custom_fields.eml', :issue => {:project => 'ecookbook'}) do |email| + email << "Affected version: 1.0\n" + end + assert issue.is_a?(Issue) + assert !issue.new_record? + issue.reload + assert_equal '2', issue.custom_field_value(field) + end + def test_add_issue_with_cc issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'}) assert issue.is_a?(Issue) -- 2.39.5