diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2011-07-23 18:18:13 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2011-07-23 18:18:13 +0000 |
commit | 578fdc62f26c23951b2d2c2b9be0040c7ade0634 (patch) | |
tree | 7f78426f78bdc325cae50368cc1bc3e23f4c5eaa /app/models/mail_handler.rb | |
parent | e1832f25c9aa16f1a95434adc209ee937110228a (diff) | |
download | redmine-578fdc62f26c23951b2d2c2b9be0040c7ade0634.tar.gz redmine-578fdc62f26c23951b2d2c2b9be0040c7ade0634.zip |
Ability to assign issues to groups (#2964).
Option is disabled by default. It can be turned on in application settings.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6306 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/mail_handler.rb')
-rw-r--r-- | app/models/mail_handler.rb | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index dbbd4f5f3..0ba8d3fd2 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -261,8 +261,7 @@ class MailHandler < ActionMailer::Base # Returns a Hash of issue attributes extracted from keywords in the email body def issue_attributes_from_keywords(issue) - assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k) - assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to) + assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_assignee_from_keyword(k, issue) attrs = { 'tracker_id' => (k = get_keyword(:tracker)) && issue.project.trackers.named(k).first.try(:id), @@ -353,14 +352,19 @@ class MailHandler < ActionMailer::Base end body.strip end - - def find_user_from_keyword(keyword) - user ||= User.find_by_mail(keyword) - user ||= User.find_by_login(keyword) - if user.nil? && keyword.match(/ /) + + def find_assignee_from_keyword(keyword, issue) + keyword = keyword.to_s.downcase + assignable = issue.assignable_users + assignee = nil + assignee ||= assignable.detect {|a| a.mail.to_s.downcase == keyword || a.login.to_s.downcase == keyword} + if assignee.nil? && keyword.match(/ /) firstname, lastname = *(keyword.split) # "First Last Throwaway" - user ||= User.find_by_firstname_and_lastname(firstname, lastname) + assignee ||= assignable.detect {|a| a.is_a?(User) && a.firstname.to_s.downcase == firstname && a.lastname.to_s.downcase == lastname} + end + if assignee.nil? + assignee ||= assignable.detect {|a| a.is_a?(Group) && a.name.downcase == keyword} end - user + assignee end end |