123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
- class SearchController < ApplicationController
- before_filter :authentication_check
- # GET /api/v1/search_user_org
- def search_user_org
- # enable search only for agents and admins
- if !current_user.is_role('Agent') && !current_user.is_role('Admin')
- response_access_deny
- return true
- end
- # get params
- query = params[:query]
- limit = params[:limit] || 10
- # try search index backend
- assets = {}
- result = []
- if SearchIndexBackend.enabled?
- items = SearchIndexBackend.search( query, limit, ['User', 'Organization'] )
- items.each { |item|
- require item[:type].to_filename
- record = Kernel.const_get( item[:type] ).find( item[:id] )
- assets = record.assets(assets)
- result.push item
- }
- else
- # do query
- users = User.search(
- :query => query,
- :limit => limit,
- :current_user => current_user,
- )
- user_result = []
- users.each do |user|
- item = {
- :id => user.id,
- :type => user.class.to_s
- }
- result.push item
- assets = user.assets(assets)
- end
- organizations = Organization.search(
- :query => query,
- :limit => limit,
- :current_user => current_user,
- )
- organization_result = []
- organizations.each do |organization|
- item = {
- :id => organization.id,
- :type => organization.class.to_s
- }
- result.push item
- assets = organization.assets(assets)
- end
- end
- render :json => {
- :assets => assets,
- :result => result,
- }
- end
- # GET /api/v1/search
- def search
- # build result list
- tickets = Ticket.search(
- :limit => params[:limit],
- :query => params[:term],
- :current_user => current_user,
- )
- assets = {}
- ticket_result = []
- tickets.each do |ticket|
- assets = ticket.assets(assets)
- ticket_result.push ticket.id
- end
- # do query
- users = User.search(
- :query => params[:term],
- :limit => params[:limit],
- :current_user => current_user,
- )
- user_result = []
- users.each do |user|
- user_result.push user.id
- assets = user.assets(assets)
- end
- organizations = Organization.search(
- :query => params[:term],
- :limit => params[:limit],
- :current_user => current_user,
- )
- organization_result = []
- organizations.each do |organization|
- organization_result.push organization.id
- assets = organization.assets(assets)
- end
- result = []
- if ticket_result[0]
- data = {
- :name => 'Ticket',
- :ids => ticket_result,
- }
- result.push data
- end
- if user_result[0]
- data = {
- :name => 'User',
- :ids => user_result,
- }
- result.push data
- end
- if organization_result[0]
- data = {
- :name => 'Organization',
- :ids => organization_result,
- }
- result.push data
- end
- # return result
- render :json => {
- :assets => assets,
- :result => result,
- }
- end
- end
|