Makes MailHandler ignore invalid keyword values to avoid validation failures.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4396 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
d4ab2ab4b9
commit
abf988ad69
|
@ -218,7 +218,7 @@ class MailHandler < ActionMailer::Base
|
||||||
@keywords[attr]
|
@keywords[attr]
|
||||||
else
|
else
|
||||||
@keywords[attr] = begin
|
@keywords[attr] = begin
|
||||||
if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr))
|
if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr, options[:format]))
|
||||||
v
|
v
|
||||||
elsif !@@handler_options[:issue][attr].blank?
|
elsif !@@handler_options[:issue][attr].blank?
|
||||||
@@handler_options[:issue][attr]
|
@@handler_options[:issue][attr]
|
||||||
|
@ -229,7 +229,7 @@ class MailHandler < ActionMailer::Base
|
||||||
|
|
||||||
# Destructively extracts the value for +attr+ in +text+
|
# Destructively extracts the value for +attr+ in +text+
|
||||||
# Returns nil if no matching keyword found
|
# Returns nil if no matching keyword found
|
||||||
def extract_keyword!(text, attr)
|
def extract_keyword!(text, attr, format=nil)
|
||||||
keys = [attr.to_s.humanize]
|
keys = [attr.to_s.humanize]
|
||||||
if attr.is_a?(Symbol)
|
if attr.is_a?(Symbol)
|
||||||
keys << l("field_#{attr}", :default => '', :locale => user.language) if user
|
keys << l("field_#{attr}", :default => '', :locale => user.language) if user
|
||||||
|
@ -237,7 +237,8 @@ class MailHandler < ActionMailer::Base
|
||||||
end
|
end
|
||||||
keys.reject! {|k| k.blank?}
|
keys.reject! {|k| k.blank?}
|
||||||
keys.collect! {|k| Regexp.escape(k)}
|
keys.collect! {|k| Regexp.escape(k)}
|
||||||
text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(.+)\s*$/i, '')
|
format ||= '.+'
|
||||||
|
text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i, '')
|
||||||
$2 && $2.strip
|
$2 && $2.strip
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -259,10 +260,10 @@ class MailHandler < ActionMailer::Base
|
||||||
'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id),
|
'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id),
|
||||||
'assigned_to_id' => (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k).try(:id),
|
'assigned_to_id' => (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k).try(:id),
|
||||||
'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id),
|
'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id),
|
||||||
'start_date' => get_keyword(:start_date, :override => true),
|
'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'),
|
||||||
'due_date' => get_keyword(:due_date, :override => true),
|
'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'),
|
||||||
'estimated_hours' => get_keyword(:estimated_hours, :override => true),
|
'estimated_hours' => get_keyword(:estimated_hours, :override => true),
|
||||||
'done_ratio' => get_keyword(:done_ratio, :override => true),
|
'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0')
|
||||||
}.delete_if {|k, v| v.blank? }
|
}.delete_if {|k, v| v.blank? }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
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.
|
||||||
|
|
||||||
|
Project: onlinestore
|
||||||
|
Tracker: Feature request
|
||||||
|
category: Stock management
|
||||||
|
priority: foo
|
||||||
|
done ratio: x
|
||||||
|
start date: some day
|
||||||
|
due date: never
|
|
@ -229,6 +229,18 @@ class MailHandlerTest < ActiveSupport::TestCase
|
||||||
assert_equal false, submit_email('ticket_without_from_header.eml')
|
assert_equal false, submit_email('ticket_without_from_header.eml')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_add_issue_with_invalid_attributes
|
||||||
|
issue = submit_email('ticket_with_invalid_attributes.eml', :allow_override => 'tracker,category,priority')
|
||||||
|
assert issue.is_a?(Issue)
|
||||||
|
assert !issue.new_record?
|
||||||
|
issue.reload
|
||||||
|
assert_nil issue.start_date
|
||||||
|
assert_nil issue.due_date
|
||||||
|
assert_equal 0, issue.done_ratio
|
||||||
|
assert_equal 'Normal', issue.priority.to_s
|
||||||
|
assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
|
||||||
|
end
|
||||||
|
|
||||||
def test_add_issue_with_localized_attributes
|
def test_add_issue_with_localized_attributes
|
||||||
User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
|
User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
|
||||||
issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority')
|
issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority')
|
||||||
|
|
Loading…
Reference in New Issue