forked from spree/spree
-
Notifications
You must be signed in to change notification settings - Fork 0
/
users_controller.rb
68 lines (58 loc) · 2.85 KB
/
users_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
module Spree
module Admin
class UsersController < ResourceController
# http://spreecommerce.com/blog/2010/11/02/json-hijacking-vulnerability/
before_filter :check_json_authenticity, :only => :index
def index
respond_with(@collection) do |format|
format.html
format.json { render :json => json_data }
end
end
def dismiss_banner
if request.xhr? and params[:banner_id]
current_user.dismiss_banner(params[:banner_id])
render :nothing => true
end
end
protected
def collection
return @collection if @collection.present?
unless request.xhr?
@search = Spree::User.registered.ransack(params[:q])
@collection = @search.result.page(params[:page]).per(Spree::Config[:admin_products_per_page])
else
#disabling proper nested include here due to rails 3.1 bug
#@collection = User.includes(:bill_address => [:state, :country], :ship_address => [:state, :country]).
@collection = Spree::User.includes(:bill_address, :ship_address).
where("spree_users.email #{LIKE} :search
OR (spree_addresses.firstname #{LIKE} :search AND spree_addresses.id = spree_users.bill_address_id)
OR (spree_addresses.lastname #{LIKE} :search AND spree_addresses.id = spree_users.bill_address_id)
OR (spree_addresses.firstname #{LIKE} :search AND spree_addresses.id = spree_users.ship_address_id)
OR (spree_addresses.lastname #{LIKE} :search AND spree_addresses.id = spree_users.ship_address_id)",
{ :search => "#{params[:q].strip}%" }).
limit(params[:limit] || 100)
end
end
private
# handling raise from Admin::ResourceController#destroy
def user_destroy_with_orders_error
invoke_callbacks(:destroy, :fails)
render :status => :forbidden, :text => t(:error_user_destroy_with_orders)
end
# Allow different formats of json data to suit different ajax calls
def json_data
json_format = params[:json_format] or 'default'
case json_format
when 'basic'
collection.map { |u| { 'id' => u.id, 'name' => u.email } }.to_json
else
address_fields = [:firstname, :lastname, :address1, :address2, :city, :zipcode, :phone, :state_name, :state_id, :country_id]
includes = { :only => address_fields , :include => { :state => { :only => :name }, :country => { :only => :name } } }
collection.to_json(:only => [:id, :email], :include =>
{ :bill_address => includes, :ship_address => includes })
end
end
end
end
end