Makes user autocompleters work with firstname and lastname.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8875 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
bd2581e7c9
commit
008557581d
@ -27,10 +27,20 @@ class Principal < ActiveRecord::Base
|
|||||||
named_scope :active, :conditions => "#{Principal.table_name}.status = 1"
|
named_scope :active, :conditions => "#{Principal.table_name}.status = 1"
|
||||||
|
|
||||||
named_scope :like, lambda {|q|
|
named_scope :like, lambda {|q|
|
||||||
s = "%#{q.to_s.strip.downcase}%"
|
if q.blank?
|
||||||
{:conditions => ["LOWER(login) LIKE :s OR LOWER(firstname) LIKE :s OR LOWER(lastname) LIKE :s OR LOWER(mail) LIKE :s", {:s => s}],
|
{}
|
||||||
:order => 'type, login, lastname, firstname, mail'
|
else
|
||||||
}
|
q = q.to_s.downcase
|
||||||
|
pattern = "%#{q}%"
|
||||||
|
sql = "LOWER(login) LIKE :p OR LOWER(firstname) LIKE :p OR LOWER(lastname) LIKE :p OR LOWER(mail) LIKE :p"
|
||||||
|
params = {:p => pattern}
|
||||||
|
if q =~ /^(.+)\s+(.+)$/
|
||||||
|
a, b = "#{$1}%", "#{$2}%"
|
||||||
|
sql << " OR (LOWER(firstname) LIKE :a AND LOWER(lastname) LIKE :b) OR (LOWER(firstname) LIKE :b AND LOWER(lastname) LIKE :a)"
|
||||||
|
params.merge!(:a => a, :b => b)
|
||||||
|
end
|
||||||
|
{:conditions => [sql, params]}
|
||||||
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
# Principals that are members of a collection of projects
|
# Principals that are members of a collection of projects
|
||||||
|
@ -56,14 +56,6 @@ class User < Principal
|
|||||||
named_scope :active, :conditions => "#{User.table_name}.status = #{STATUS_ACTIVE}"
|
named_scope :active, :conditions => "#{User.table_name}.status = #{STATUS_ACTIVE}"
|
||||||
named_scope :logged, :conditions => "#{User.table_name}.status <> #{STATUS_ANONYMOUS}"
|
named_scope :logged, :conditions => "#{User.table_name}.status <> #{STATUS_ANONYMOUS}"
|
||||||
named_scope :status, lambda {|arg| arg.blank? ? {} : {:conditions => {:status => arg.to_i}} }
|
named_scope :status, lambda {|arg| arg.blank? ? {} : {:conditions => {:status => arg.to_i}} }
|
||||||
named_scope :like, lambda {|arg|
|
|
||||||
if arg.blank?
|
|
||||||
{}
|
|
||||||
else
|
|
||||||
pattern = "%#{arg.to_s.strip.downcase}%"
|
|
||||||
{:conditions => ["LOWER(login) LIKE :p OR LOWER(firstname) LIKE :p OR LOWER(lastname) LIKE :p OR LOWER(mail) LIKE :p", {:p => pattern}]}
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
acts_as_customizable
|
acts_as_customizable
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ class PrincipalTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
Principal.generate!(:mail => 'mail@example.com')
|
Principal.generate!(:mail => 'mail@example.com')
|
||||||
Principal.generate!(:mail => 'mail2@example.com')
|
Principal.generate!(:mail => 'mail2@example.com')
|
||||||
|
|
||||||
|
@palmer = Principal.generate!(:firstname => 'David', :lastname => 'Palmer')
|
||||||
end
|
end
|
||||||
|
|
||||||
should "search login" do
|
should "search login" do
|
||||||
@ -74,6 +76,19 @@ class PrincipalTest < ActiveSupport::TestCase
|
|||||||
assert_equal 2, results.count
|
assert_equal 2, results.count
|
||||||
assert results.all? {|u| u.mail.match(/mail/) }
|
assert results.all? {|u| u.mail.match(/mail/) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "search firstname and lastname" do
|
||||||
|
results = Principal.like('david palm')
|
||||||
|
|
||||||
|
assert_equal 1, results.count
|
||||||
|
assert_equal @palmer, results.first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "search lastname and firstname" do
|
||||||
|
results = Principal.like('palmer davi')
|
||||||
|
|
||||||
|
assert_equal 1, results.count
|
||||||
|
assert_equal @palmer, results.first
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user