diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2015-08-15 06:57:55 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2015-08-15 06:57:55 +0000 |
commit | eac2974e715b1df0acc81748d8154397dfaa030c (patch) | |
tree | 2fb48eb1b87c48a5dc745043bdab4638cda7f39b | |
parent | b66358ac6c338143eb1efdd2dea869e03cacad58 (diff) | |
download | redmine-eac2974e715b1df0acc81748d8154397dfaa030c.tar.gz redmine-eac2974e715b1df0acc81748d8154397dfaa030c.zip |
Moved implementation to Principal.
git-svn-id: http://svn.redmine.org/redmine/trunk@14500 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/models/mail_handler.rb | 22 | ||||
-rw-r--r-- | app/models/principal.rb | 24 |
2 files changed, 25 insertions, 21 deletions
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 827f235ea..de1febe69 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -543,26 +543,6 @@ class MailHandler < ActionMailer::Base end def find_assignee_from_keyword(keyword, issue) - keyword = keyword.to_s - return nil if keyword.blank? - - assignable = issue.assignable_users - assignee = nil - assignee ||= assignable.detect {|a| - keyword.casecmp(a.mail.to_s) == 0 || - keyword.casecmp(a.login.to_s) == 0 - } - if assignee.nil? && keyword.match(/ /) - firstname, lastname = *(keyword.split) # "First Last Throwaway" - assignee ||= assignable.detect {|a| - a.is_a?(User) && - firstname.casecmp(a.firstname.to_s) == 0 && - lastname.casecmp(a.lastname.to_s) == 0 - } - end - if assignee.nil? - assignee ||= assignable.detect {|a| keyword.casecmp(a.name) == 0} - end - assignee + Principal.detect_by_keyword(issue.assignable_users, keyword) end end diff --git a/app/models/principal.rb b/app/models/principal.rb index 15ab02147..58a08b19e 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -146,6 +146,30 @@ class Principal < ActiveRecord::Base columns.uniq.map {|field| "#{table}.#{field}"} end + # Returns the principal that matches the keyword among principals + def self.detect_by_keyword(principals, keyword) + keyword = keyword.to_s + return nil if keyword.blank? + + principal = nil + principal ||= principals.detect {|a| + keyword.casecmp(a.mail.to_s) == 0 || + keyword.casecmp(a.login.to_s) == 0 + } + if principal.nil? && keyword.match(/ /) + firstname, lastname = *(keyword.split) # "First Last Throwaway" + principal ||= principals.detect {|a| + a.is_a?(User) && + firstname.casecmp(a.firstname.to_s) == 0 && + lastname.casecmp(a.lastname.to_s) == 0 + } + end + if principal.nil? + principal ||= principals.detect {|a| keyword.casecmp(a.name) == 0} + end + principal + end + protected # Make sure we don't try to insert NULL values (see #4632) |