2014-02-03 19:23:00 +00:00
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
2013-08-19 06:29:49 +00:00
2015-04-27 20:55:17 +00:00
class User
2015-04-27 20:49:17 +00:00
module Search
2013-08-19 06:29:49 +00:00
= begin
2015-08-16 00:53:27 +00:00
search user preferences
result = User . search_preferences ( user_model )
returns if user has permissions to search
result = {
prio : 1000 ,
direct_search_index : true
}
returns if user has no permissions to search
result = false
= end
def search_preferences ( current_user )
2016-08-12 16:39:09 +00:00
return false if ! current_user . permissions? ( 'ticket.agent' ) && ! current_user . permissions? ( 'admin.user' )
2015-08-16 00:53:27 +00:00
{
prio : 2000 ,
direct_search_index : true ,
}
end
= begin
2013-08-19 06:29:49 +00:00
search user
result = User . search (
2016-08-12 16:39:09 +00:00
query : 'some search term' ,
2015-11-30 12:13:27 +00:00
limit : 15 ,
current_user : user_model ,
2013-08-19 06:29:49 +00:00
)
returns
result = [ user_model1 , user_model2 , ... ]
= end
2015-04-27 20:49:17 +00:00
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-08-16 00:53:27 +00:00
return [ ] if ! search_preferences ( current_user )
2015-04-27 20:49:17 +00:00
# try search index backend
if SearchIndexBackend . enabled?
2016-01-15 19:08:17 +00:00
items = SearchIndexBackend . search ( query , limit , 'User' )
2015-04-27 20:49:17 +00:00
users = [ ]
items . each { | item |
2016-01-15 19:08:17 +00:00
users . push User . lookup ( id : item [ :id ] )
2015-04-27 20:49:17 +00:00
}
return users
end
# fallback do sql query
# - stip out * we already search for *query* -
2015-08-21 23:55:59 +00:00
query . delete! '*'
2016-01-15 17:22:57 +00:00
users = if params [ :role_ids ]
2016-03-08 06:32:58 +00:00
User . joins ( :roles ) . where ( 'roles.id' = > params [ :role_ids ] ) . where (
2016-01-15 17:22:57 +00:00
'(users.firstname LIKE ? OR users.lastname LIKE ? OR users.email LIKE ? OR users.login LIKE ?) AND users.id != 1' , " % #{ query } % " , " % #{ query } % " , " % #{ query } % " , " % #{ query } % "
2016-09-12 06:52:01 +00:00
) . order ( 'updated_at DESC' ) . limit ( limit )
2016-01-15 17:22:57 +00:00
else
User . where (
'(firstname LIKE ? OR lastname LIKE ? OR email LIKE ? OR login LIKE ?) AND id != 1' , " % #{ query } % " , " % #{ query } % " , " % #{ query } % " , " % #{ query } % "
2016-09-12 06:52:01 +00:00
) . order ( 'updated_at DESC' ) . limit ( limit )
2016-01-15 17:22:57 +00:00
end
2015-04-27 20:49:17 +00:00
users
2014-01-29 23:55:25 +00:00
end
2013-08-19 06:29:49 +00:00
end
2014-02-03 19:23:00 +00:00
end