summaryrefslogtreecommitdiffstats
path: root/app/models/mail_handler.rb
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2011-07-23 18:18:13 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2011-07-23 18:18:13 +0000
commit578fdc62f26c23951b2d2c2b9be0040c7ade0634 (patch)
tree7f78426f78bdc325cae50368cc1bc3e23f4c5eaa /app/models/mail_handler.rb
parente1832f25c9aa16f1a95434adc209ee937110228a (diff)
downloadredmine-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.rb22
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