search.rb 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class User
  3. module Search
  4. =begin
  5. search user
  6. result = User.search(
  7. :query => 'some search term'
  8. :limit => 15,
  9. :current_user => user_model,
  10. )
  11. returns
  12. result = [user_model1, user_model2, ...]
  13. =end
  14. def search(params)
  15. # get params
  16. query = params[:query]
  17. limit = params[:limit] || 10
  18. current_user = params[:current_user]
  19. # enable search only for agents and admins
  20. return [] if !current_user.role?('Agent') && !current_user.role?(Z_ROLENAME_ADMIN)
  21. # try search index backend
  22. if SearchIndexBackend.enabled?
  23. items = SearchIndexBackend.search( query, limit, 'User' )
  24. users = []
  25. items.each { |item|
  26. users.push User.lookup( id: item[:id] )
  27. }
  28. return users
  29. end
  30. # fallback do sql query
  31. # - stip out * we already search for *query* -
  32. query.gsub! '*', ''
  33. if params[:role_ids]
  34. users = User.joins(:roles).where( 'roles.id' => params[:role_ids] ).where(
  35. '(users.firstname LIKE ? or users.lastname LIKE ? or users.email LIKE ?) AND users.id != 1', "%#{query}%", "%#{query}%", "%#{query}%",
  36. ).order('firstname').limit(limit)
  37. else
  38. users = User.where(
  39. '(firstname LIKE ? or lastname LIKE ? or email LIKE ?) AND id != 1', "%#{query}%", "%#{query}%", "%#{query}%",
  40. ).order('firstname').limit(limit)
  41. end
  42. users
  43. end
  44. end
  45. end