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 /app/models/principal.rb | |
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
Diffstat (limited to 'app/models/principal.rb')
-rw-r--r-- | app/models/principal.rb | 24 |
1 files changed, 24 insertions, 0 deletions
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) |