1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-01-02 05:39:40 +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:
Go MAEDA 2018-04-07 06:39:57 +00:00
parent e5a8bcfd72
commit b4a703ce4e
2 changed files with 21 additions and 6 deletions

View File

@ -69,15 +69,20 @@ class Principal < ActiveRecord::Base
where({})
else
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))"
params = {:p => pattern}
if q =~ /^(.+)\s+(.+)$/
a, b = "#{$1}%", "#{$2}%"
sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:a) AND LOWER(#{table_name}.lastname) LIKE LOWER(:b))"
sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:b) AND LOWER(#{table_name}.lastname) LIKE LOWER(:a))"
params.merge!(:a => a, :b => b)
tokens = q.split(/\s+/).reject(&:blank?).map { |token| "%#{token}%" }
if tokens.present?
sql << ' OR ('
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
where(sql, params)
end
}

View File

@ -127,6 +127,16 @@ class PrincipalTest < ActiveSupport::TestCase
assert_equal User.find(2), results.first
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
user = User.generate!(:firstname => 'Соболев', :lastname => 'Денис')
results = Principal.like('Собо')