summaryrefslogtreecommitdiffstats
path: root/app/models/principal.rb
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2015-08-15 06:57:55 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2015-08-15 06:57:55 +0000
commiteac2974e715b1df0acc81748d8154397dfaa030c (patch)
tree2fb48eb1b87c48a5dc745043bdab4638cda7f39b /app/models/principal.rb
parentb66358ac6c338143eb1efdd2dea869e03cacad58 (diff)
downloadredmine-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.rb24
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)