##// END OF EJS Templates
Makes user autocompleters work with firstname and lastname....
Jean-Philippe Lang -
r8755:008557581d8a
parent child
Show More
@@ -27,10 +27,20 class Principal < ActiveRecord::Base
27 named_scope :active, :conditions => "#{Principal.table_name}.status = 1"
27 named_scope :active, :conditions => "#{Principal.table_name}.status = 1"
28
28
29 named_scope :like, lambda {|q|
29 named_scope :like, lambda {|q|
30 s = "%#{q.to_s.strip.downcase}%"
30 if q.blank?
31 {:conditions => ["LOWER(login) LIKE :s OR LOWER(firstname) LIKE :s OR LOWER(lastname) LIKE :s OR LOWER(mail) LIKE :s", {:s => s}],
31 {}
32 :order => 'type, login, lastname, firstname, mail'
32 else
33 }
33 q = q.to_s.downcase
34 pattern = "%#{q}%"
35 sql = "LOWER(login) LIKE :p OR LOWER(firstname) LIKE :p OR LOWER(lastname) LIKE :p OR LOWER(mail) LIKE :p"
36 params = {:p => pattern}
37 if q =~ /^(.+)\s+(.+)$/
38 a, b = "#{$1}%", "#{$2}%"
39 sql << " OR (LOWER(firstname) LIKE :a AND LOWER(lastname) LIKE :b) OR (LOWER(firstname) LIKE :b AND LOWER(lastname) LIKE :a)"
40 params.merge!(:a => a, :b => b)
41 end
42 {:conditions => [sql, params]}
43 end
34 }
44 }
35
45
36 # Principals that are members of a collection of projects
46 # Principals that are members of a collection of projects
@@ -56,14 +56,6 class User < Principal
56 named_scope :active, :conditions => "#{User.table_name}.status = #{STATUS_ACTIVE}"
56 named_scope :active, :conditions => "#{User.table_name}.status = #{STATUS_ACTIVE}"
57 named_scope :logged, :conditions => "#{User.table_name}.status <> #{STATUS_ANONYMOUS}"
57 named_scope :logged, :conditions => "#{User.table_name}.status <> #{STATUS_ANONYMOUS}"
58 named_scope :status, lambda {|arg| arg.blank? ? {} : {:conditions => {:status => arg.to_i}} }
58 named_scope :status, lambda {|arg| arg.blank? ? {} : {:conditions => {:status => arg.to_i}} }
59 named_scope :like, lambda {|arg|
60 if arg.blank?
61 {}
62 else
63 pattern = "%#{arg.to_s.strip.downcase}%"
64 {:conditions => ["LOWER(login) LIKE :p OR LOWER(firstname) LIKE :p OR LOWER(lastname) LIKE :p OR LOWER(mail) LIKE :p", {:p => pattern}]}
65 end
66 }
67
59
68 acts_as_customizable
60 acts_as_customizable
69
61
@@ -45,6 +45,8 class PrincipalTest < ActiveSupport::TestCase
45
45
46 Principal.generate!(:mail => 'mail@example.com')
46 Principal.generate!(:mail => 'mail@example.com')
47 Principal.generate!(:mail => 'mail2@example.com')
47 Principal.generate!(:mail => 'mail2@example.com')
48
49 @palmer = Principal.generate!(:firstname => 'David', :lastname => 'Palmer')
48 end
50 end
49
51
50 should "search login" do
52 should "search login" do
@@ -74,6 +76,19 class PrincipalTest < ActiveSupport::TestCase
74 assert_equal 2, results.count
76 assert_equal 2, results.count
75 assert results.all? {|u| u.mail.match(/mail/) }
77 assert results.all? {|u| u.mail.match(/mail/) }
76 end
78 end
77 end
78
79
80 should "search firstname and lastname" do
81 results = Principal.like('david palm')
82
83 assert_equal 1, results.count
84 assert_equal @palmer, results.first
85 end
86
87 should "search lastname and firstname" do
88 results = Principal.like('palmer davi')
89
90 assert_equal 1, results.count
91 assert_equal @palmer, results.first
92 end
93 end
79 end
94 end
General Comments 0
You need to be logged in to leave comments. Login now