trabajo-afectivo/app/models/user/search.rb

57 lines
1.4 KiB
Ruby
Raw Normal View History

2014-02-03 19:23:00 +00:00
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
module User::Search
=begin
search user
result = User.search(
:query => 'some search term'
:limit => 15,
:current_user => user_model,
)
returns
result = [user_model1, user_model2, ...]
=end
def search(params)
# get params
query = params[:query]
limit = params[:limit] || 10
current_user = params[:current_user]
# enable search only for agents and admins
2015-02-15 09:12:27 +00:00
return [] if !current_user.is_role('Agent') && !current_user.is_role(Z_ROLENAME_ADMIN)
2014-01-29 23:55:25 +00:00
# try search index backend
2014-02-02 18:58:31 +00:00
if SearchIndexBackend.enabled?
2014-09-19 21:35:40 +00:00
items = SearchIndexBackend.search( query, limit, 'User' )
2014-01-29 23:55:25 +00:00
users = []
2014-09-19 21:35:40 +00:00
items.each { |item|
users.push User.lookup( :id => item[:id] )
2014-01-29 23:55:25 +00:00
}
return users
end
# fallback do sql query
2014-02-11 13:09:23 +00:00
# - stip out * we already search for *query* -
query.gsub! '*', ''
2014-09-24 23:13:17 +00:00
if params[:role_ids]
users = User.joins(:roles).where( 'roles.id' => params[:role_ids] ).where(
'(users.firstname LIKE ? or users.lastname LIKE ? or users.email LIKE ?) AND users.id != 1', "%#{query}%", "%#{query}%", "%#{query}%",
).order('firstname').limit(limit)
else
users = User.where(
'(firstname LIKE ? or lastname LIKE ? or email LIKE ?) AND id != 1', "%#{query}%", "%#{query}%", "%#{query}%",
).order('firstname').limit(limit)
end
return users
end
2014-02-03 19:23:00 +00:00
end