mirror of
https://github.com/meineerde/redmine.git
synced 2026-03-08 02:03:06 +00:00
Support for lastnames with spaces in user autocompleters (#28154).
Patch by Gregor Schmidt. git-svn-id: http://svn.redmine.org/redmine/trunk@17259 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
e5a8bcfd72
commit
b4a703ce4e
@ -69,15 +69,20 @@ class Principal < ActiveRecord::Base
|
|||||||
where({})
|
where({})
|
||||||
else
|
else
|
||||||
pattern = "%#{q}%"
|
pattern = "%#{q}%"
|
||||||
sql = %w(login firstname lastname).map {|column| "LOWER(#{table_name}.#{column}) LIKE LOWER(:p)"}.join(" OR ")
|
sql = "LOWER(#{table_name}.login) LIKE LOWER(:p)"
|
||||||
sql << " OR #{table_name}.id IN (SELECT user_id FROM #{EmailAddress.table_name} WHERE LOWER(address) LIKE LOWER(:p))"
|
sql << " OR #{table_name}.id IN (SELECT user_id FROM #{EmailAddress.table_name} WHERE LOWER(address) LIKE LOWER(:p))"
|
||||||
params = {:p => pattern}
|
params = {:p => pattern}
|
||||||
if q =~ /^(.+)\s+(.+)$/
|
|
||||||
a, b = "#{$1}%", "#{$2}%"
|
tokens = q.split(/\s+/).reject(&:blank?).map { |token| "%#{token}%" }
|
||||||
sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:a) AND LOWER(#{table_name}.lastname) LIKE LOWER(:b))"
|
if tokens.present?
|
||||||
sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:b) AND LOWER(#{table_name}.lastname) LIKE LOWER(:a))"
|
sql << ' OR ('
|
||||||
params.merge!(:a => a, :b => b)
|
sql << tokens.map.with_index do |token, index|
|
||||||
|
params.merge!(:"token_#{index}" => token)
|
||||||
|
"(LOWER(#{table_name}.firstname) LIKE LOWER(:token_#{index}) OR LOWER(#{table_name}.lastname) LIKE LOWER(:token_#{index}))"
|
||||||
|
end.join(' AND ')
|
||||||
|
sql << ')'
|
||||||
end
|
end
|
||||||
|
|
||||||
where(sql, params)
|
where(sql, params)
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|||||||
@ -127,6 +127,16 @@ class PrincipalTest < ActiveSupport::TestCase
|
|||||||
assert_equal User.find(2), results.first
|
assert_equal User.find(2), results.first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "like scope should find lastname with spaces" do
|
||||||
|
user = User.find(1)
|
||||||
|
user.update_columns(:firstname => 'Leonardo', :lastname => 'da Vinci')
|
||||||
|
|
||||||
|
results = Principal.like('Leonardo da Vinci')
|
||||||
|
|
||||||
|
assert_equal 1, results.count
|
||||||
|
assert_equal user, results.first
|
||||||
|
end
|
||||||
|
|
||||||
def test_like_scope_with_cyrillic_name
|
def test_like_scope_with_cyrillic_name
|
||||||
user = User.generate!(:firstname => 'Соболев', :lastname => 'Денис')
|
user = User.generate!(:firstname => 'Соболев', :lastname => 'Денис')
|
||||||
results = Principal.like('Собо')
|
results = Principal.like('Собо')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user