spree_core 0.60.0.RC1 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/admin/line_items_controller.rb +12 -13
- data/app/controllers/admin/orders_controller.rb +11 -3
- data/app/controllers/admin/payment_methods_controller.rb +3 -3
- data/app/controllers/admin/payments_controller.rb +12 -5
- data/app/controllers/admin/product_groups_controller.rb +1 -1
- data/app/controllers/admin/product_scopes_controller.rb +12 -8
- data/app/controllers/admin/products_controller.rb +7 -7
- data/app/controllers/admin/properties_controller.rb +3 -1
- data/app/controllers/admin/prototypes_controller.rb +4 -2
- data/app/controllers/admin/reports_controller.rb +5 -1
- data/app/controllers/admin/resource_controller.rb +40 -31
- data/app/controllers/admin/return_authorizations_controller.rb +1 -1
- data/app/controllers/admin/shipments_controller.rb +7 -8
- data/app/controllers/admin/states_controller.rb +3 -3
- data/app/controllers/admin/taxonomies_controller.rb +5 -2
- data/app/controllers/admin/taxons_controller.rb +39 -18
- data/app/controllers/admin/users_controller.rb +5 -5
- data/app/controllers/admin/variants_controller.rb +4 -4
- data/app/controllers/admin/zones_controller.rb +3 -2
- data/app/controllers/checkout_controller.rb +6 -5
- data/app/controllers/content_controller.rb +8 -2
- data/app/controllers/orders_controller.rb +8 -5
- data/app/controllers/products_controller.rb +9 -5
- data/app/controllers/spree/base_controller.rb +1 -0
- data/app/controllers/taxons_controller.rb +5 -1
- data/app/helpers/admin/taxons_helper.rb +14 -1
- data/app/helpers/spree/base_helper.rb +2 -1
- data/app/models/app_configuration.rb +1 -0
- data/app/models/creditcard.rb +1 -1
- data/app/views/admin/orders/history.html.erb +1 -1
- data/app/views/admin/reports/index.html.erb +3 -3
- data/app/views/admin/taxons/available.js.erb +2 -2
- data/app/views/admin/taxons/selected.html.erb +1 -0
- data/app/views/orders/show.html.erb +10 -12
- data/app/views/products/show.html.erb +1 -1
- data/app/views/taxons/show.html.erb +1 -1
- data/config/locales/en.yml +1 -3
- data/config/routes.rb +1 -0
- data/lib/product_filters.rb +2 -2
- data/lib/spree_base.rb +1 -0
- data/lib/spree_core.rb +6 -0
- data/lib/spree_core/ext/hash.rb +75 -0
- data/lib/spree_core/spree_custom_responder.rb +29 -0
- data/lib/spree_core/spree_respond_with.rb +57 -0
- data/lib/spree_core/version.rb +1 -1
- data/public/javascripts/taxonomy.js +8 -4
- data/public/stylesheets/admin/admin-reset.css +2 -0
- metadata +20 -22
@@ -7,7 +7,7 @@ class Admin::ReturnAuthorizationsController < Admin::ResourceController
|
|
7
7
|
def fire
|
8
8
|
@return_authorization.send("#{params[:e]}!")
|
9
9
|
flash.notice = t('return_authorization_updated')
|
10
|
-
redirect_to :back
|
10
|
+
respond_with(@return_authorization) { |format| format.html { redirect_to :back } }
|
11
11
|
end
|
12
12
|
|
13
13
|
protected
|
@@ -23,11 +23,11 @@ class Admin::ShipmentsController < Admin::BaseController
|
|
23
23
|
assign_inventory_units
|
24
24
|
if @shipment.save
|
25
25
|
flash[:notice] = I18n.t(:successfully_created, :resource => 'shipment')
|
26
|
-
respond_with(@
|
26
|
+
respond_with(@shipment) do |format|
|
27
27
|
format.html { redirect_to edit_admin_order_shipment_path(@order, @shipment) }
|
28
28
|
end
|
29
29
|
else
|
30
|
-
render :action => 'new'
|
30
|
+
respond_with(@shipment) { |format| format.html { render :action => 'new' } }
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -43,22 +43,20 @@ class Admin::ShipmentsController < Admin::BaseController
|
|
43
43
|
@order.special_instructions = object_params[:special_instructions] if Spree::Config[:shipping_instructions]
|
44
44
|
@order.shipping_method = @order.shipment.shipping_method
|
45
45
|
@order.save
|
46
|
-
|
46
|
+
|
47
47
|
flash[:notice] = I18n.t(:successfully_updated, :resource => I18n.t('shipment'))
|
48
48
|
return_path = @order.completed? ? edit_admin_order_shipment_path(@order, @shipment) : admin_order_adjustments_path(@order)
|
49
49
|
respond_with(@object) do |format|
|
50
50
|
format.html { redirect_to return_path }
|
51
51
|
end
|
52
52
|
else
|
53
|
-
render :action => 'edit'
|
53
|
+
respond_with(@shipment) { |format| format.html { render :action => 'edit' } }
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
def destroy
|
58
58
|
@shipment.destroy
|
59
|
-
|
60
|
-
format.js { render_js_for_destroy }
|
61
|
-
end
|
59
|
+
respond_with(@shipment) { |format| format.js { render_js_for_destroy } }
|
62
60
|
end
|
63
61
|
|
64
62
|
def fire
|
@@ -67,7 +65,8 @@ class Admin::ShipmentsController < Admin::BaseController
|
|
67
65
|
else
|
68
66
|
flash[:error] = t('cannot_perform_operation')
|
69
67
|
end
|
70
|
-
|
68
|
+
|
69
|
+
respond_with(@shipment) { |format| format.html { redirect_to :back } }
|
71
70
|
end
|
72
71
|
|
73
72
|
private
|
@@ -3,17 +3,17 @@ class Admin::StatesController < Admin::ResourceController
|
|
3
3
|
before_filter :load_data
|
4
4
|
|
5
5
|
def index
|
6
|
-
|
6
|
+
respond_with(@collection) do |format|
|
7
7
|
format.html
|
8
8
|
format.js { render :partial => 'state_list.html.erb' }
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
protected
|
13
|
-
|
13
|
+
|
14
14
|
def location_after_save
|
15
15
|
admin_country_states_url(@country)
|
16
|
-
end
|
16
|
+
end
|
17
17
|
|
18
18
|
def collection
|
19
19
|
super.order(:name)
|
@@ -1,11 +1,14 @@
|
|
1
1
|
class Admin::TaxonomiesController < Admin::ResourceController
|
2
|
+
respond_to :json, :only => [:get_children]
|
2
3
|
|
3
4
|
def get_children
|
4
5
|
@taxons = Taxon.find(params[:parent_id]).children
|
6
|
+
|
7
|
+
respond_with(@taxons)
|
5
8
|
end
|
6
|
-
|
9
|
+
|
7
10
|
private
|
8
|
-
|
11
|
+
|
9
12
|
def location_after_save
|
10
13
|
if @taxonomy.created_at == @taxonomy.updated_at
|
11
14
|
edit_admin_taxonomy_url(@taxonomy)
|
@@ -1,14 +1,29 @@
|
|
1
1
|
class Admin::TaxonsController < Admin::BaseController
|
2
2
|
include Railslove::Plugins::FindByParam::SingletonMethods
|
3
3
|
|
4
|
+
respond_to :html, :json, :js
|
5
|
+
|
4
6
|
def create
|
5
7
|
@taxonomy = Taxonomy.find(params[:taxonomy_id])
|
6
8
|
@taxon = @taxonomy.taxons.build(params[:taxon])
|
7
9
|
if @taxon.save
|
8
|
-
|
10
|
+
respond_with(@taxon) do |format|
|
11
|
+
format.json {render :json => @taxon.to_json }
|
12
|
+
end
|
9
13
|
else
|
10
14
|
flash[:error] = I18n.t('errors.messages.could_not_create_taxon')
|
11
|
-
|
15
|
+
respond_with(@taxon) do |format|
|
16
|
+
format.html { redirect_to @taxonomy ? edit_admin_taxonomy_url(@taxonomy) : admin_taxonomies_url }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def update
|
22
|
+
update_before
|
23
|
+
update_after
|
24
|
+
respond_with(@taxon) do |format|
|
25
|
+
format.html { redirect_to edit_admin_taxonomy_url(@taxonomy) }
|
26
|
+
format.json { render :json => @taxon.to_json }
|
12
27
|
end
|
13
28
|
end
|
14
29
|
|
@@ -16,6 +31,8 @@ class Admin::TaxonsController < Admin::BaseController
|
|
16
31
|
@taxonomy = Taxonomy.find(params[:taxonomy_id])
|
17
32
|
@taxon = @taxonomy.taxons.find(params[:id])
|
18
33
|
@permalink_part = @taxon.permalink.split("/").last
|
34
|
+
|
35
|
+
respond_with(:admin, @taxon)
|
19
36
|
end
|
20
37
|
|
21
38
|
def update
|
@@ -80,7 +97,7 @@ class Admin::TaxonsController < Admin::BaseController
|
|
80
97
|
end
|
81
98
|
end
|
82
99
|
|
83
|
-
|
100
|
+
respond_with(@taxon) do |format|
|
84
101
|
format.html {redirect_to edit_admin_taxonomy_url(@taxonomy) }
|
85
102
|
format.json {render :json => @taxon.to_json }
|
86
103
|
end
|
@@ -89,28 +106,22 @@ class Admin::TaxonsController < Admin::BaseController
|
|
89
106
|
def destroy
|
90
107
|
@taxon = Taxon.find(params[:id])
|
91
108
|
@taxon.destroy
|
92
|
-
|
93
|
-
format.html { render :text => '' }
|
94
|
-
format.js { render_js_for_destroy }
|
95
|
-
end
|
109
|
+
respond_with(@taxon) { |format| format.json { render :json => '' } }
|
96
110
|
end
|
97
111
|
|
98
112
|
def selected
|
99
113
|
@product = load_product
|
100
114
|
@taxons = @product.taxons
|
115
|
+
|
116
|
+
respond_with(:admin, @taxons)
|
101
117
|
end
|
102
118
|
|
103
119
|
def available
|
104
120
|
@product = load_product
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
end
|
110
|
-
@available_taxons.delete_if { |taxon| @product.taxons.include?(taxon) }
|
111
|
-
respond_to do |format|
|
112
|
-
format.js {render :layout => false}
|
113
|
-
end
|
121
|
+
@taxons = params[:q].blank? ? [] : Taxon.where('lower(name) LIKE ?', "%#{params[:q].mb_chars.downcase}%")
|
122
|
+
@taxons.delete_if { |taxon| @product.taxons.include?(taxon) }
|
123
|
+
|
124
|
+
respond_with(:admin, @taxons)
|
114
125
|
end
|
115
126
|
|
116
127
|
def remove
|
@@ -119,7 +130,8 @@ class Admin::TaxonsController < Admin::BaseController
|
|
119
130
|
@product.taxons.delete(@taxon)
|
120
131
|
@product.save
|
121
132
|
@taxons = @product.taxons
|
122
|
-
|
133
|
+
|
134
|
+
respond_with(@taxon) { |format| format.js { render_js_for_destroy } }
|
123
135
|
end
|
124
136
|
|
125
137
|
def select
|
@@ -128,7 +140,16 @@ class Admin::TaxonsController < Admin::BaseController
|
|
128
140
|
@product.taxons << @taxon
|
129
141
|
@product.save
|
130
142
|
@taxons = @product.taxons
|
131
|
-
|
143
|
+
|
144
|
+
respond_with(:admin, @taxons)
|
145
|
+
end
|
146
|
+
|
147
|
+
def batch_select
|
148
|
+
@product = load_product
|
149
|
+
@taxons = params[:taxon_ids].map{|id| Taxon.find(id)}.compact
|
150
|
+
@product.taxons = @taxons
|
151
|
+
@product.save
|
152
|
+
redirect_to selected_admin_product_taxons_url(@product)
|
132
153
|
end
|
133
154
|
|
134
155
|
private
|
@@ -7,14 +7,14 @@ class Admin::UsersController < Admin::ResourceController
|
|
7
7
|
update.before :save_user_roles
|
8
8
|
|
9
9
|
def index
|
10
|
-
|
10
|
+
respond_with(@collection) do |format|
|
11
11
|
format.html
|
12
12
|
format.json { render :json => json_data }
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
protected
|
17
|
-
|
17
|
+
|
18
18
|
def collection
|
19
19
|
return @collection if @collection.present?
|
20
20
|
unless request.xhr?
|
@@ -30,8 +30,8 @@ class Admin::UsersController < Admin::ResourceController
|
|
30
30
|
{:search => "#{params[:q].strip}%"}).
|
31
31
|
limit(params[:limit] || 100)
|
32
32
|
end
|
33
|
-
end
|
34
|
-
|
33
|
+
end
|
34
|
+
|
35
35
|
def save_user_roles
|
36
36
|
return unless params[:user]
|
37
37
|
return unless @user.respond_to?(:roles) # since roles are technically added by the auth module
|
@@ -42,7 +42,7 @@ class Admin::UsersController < Admin::ResourceController
|
|
42
42
|
}
|
43
43
|
params[:user].delete(:role)
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
private
|
47
47
|
|
48
48
|
# Allow different formats of json data to suit different ajax calls
|
@@ -14,18 +14,18 @@ class Admin::VariantsController < Admin::ResourceController
|
|
14
14
|
flash.notice = I18n.t("notice_messages.variant_not_deleted")
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
respond_with(@variant) do |format|
|
18
18
|
format.html { redirect_to admin_product_variants_url(params[:product_id]) }
|
19
19
|
format.js { render_js_for_destroy }
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def update_positions
|
24
24
|
params[:positions].each do |id, index|
|
25
25
|
Variant.update_all(['position=?', index], ['id=?', id])
|
26
26
|
end
|
27
|
-
|
28
|
-
|
27
|
+
|
28
|
+
respond_with(@variant) do |format|
|
29
29
|
format.html { redirect_to admin_product_variants_url(params[:product_id]) }
|
30
30
|
format.js { render :text => 'Ok' }
|
31
31
|
end
|
@@ -7,6 +7,8 @@ class CheckoutController < Spree::BaseController
|
|
7
7
|
before_filter :load_order
|
8
8
|
rescue_from Spree::GatewayError, :with => :rescue_from_spree_gateway_error
|
9
9
|
|
10
|
+
respond_to :html
|
11
|
+
|
10
12
|
# Updates the order and advances to the next state (when possible.)
|
11
13
|
def update
|
12
14
|
if @order.update_attributes(object_params)
|
@@ -14,19 +16,18 @@ class CheckoutController < Spree::BaseController
|
|
14
16
|
state_callback(:after)
|
15
17
|
else
|
16
18
|
flash[:error] = I18n.t(:payment_processing_failed)
|
17
|
-
|
19
|
+
respond_with(@order, :location => checkout_state_path(@order.state)) and return
|
18
20
|
end
|
19
21
|
|
20
22
|
if @order.state == "complete" || @order.completed?
|
21
23
|
flash[:notice] = I18n.t(:order_processed_successfully)
|
22
24
|
flash[:commerce_tracking] = "nothing special"
|
23
|
-
|
25
|
+
respond_with(@order, :location => completion_route)
|
24
26
|
else
|
25
|
-
|
27
|
+
respond_with(@order, :location => checkout_state_path(@order.state))
|
26
28
|
end
|
27
|
-
|
28
29
|
else
|
29
|
-
render :edit
|
30
|
+
respond_with(@order) { |format| format.html { render :edit } }
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
@@ -5,11 +5,17 @@ class ContentController < Spree::BaseController
|
|
5
5
|
rescue_from ActionView::MissingTemplate, :with => :render_404
|
6
6
|
caches_page :show, :index, :if => Proc.new { Spree::Config[:cache_static_content] }
|
7
7
|
|
8
|
+
respond_to :html
|
9
|
+
|
8
10
|
def show
|
9
|
-
|
11
|
+
respond_with do |format|
|
12
|
+
format.html { render :template => params[:path] }
|
13
|
+
end
|
10
14
|
end
|
11
15
|
|
12
16
|
def cvv
|
13
|
-
|
17
|
+
respond_with do |format|
|
18
|
+
format.html { render "cvv", :layout => false }
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
class OrdersController < Spree::BaseController
|
2
|
+
respond_to :html
|
2
3
|
|
3
4
|
helper :products
|
4
5
|
|
6
|
+
|
5
7
|
def show
|
6
8
|
@order = Order.find_by_number(params[:id])
|
7
9
|
end
|
@@ -10,9 +12,9 @@ class OrdersController < Spree::BaseController
|
|
10
12
|
@order = current_order
|
11
13
|
if @order.update_attributes(params[:order])
|
12
14
|
@order.line_items = @order.line_items.select {|li| li.quantity > 0 }
|
13
|
-
redirect_to cart_path
|
15
|
+
respond_with(@order) { |format| format.html { redirect_to cart_path } }
|
14
16
|
else
|
15
|
-
|
17
|
+
respond_with(@order)
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
@@ -45,17 +47,18 @@ class OrdersController < Spree::BaseController
|
|
45
47
|
@order.add_variant(Variant.find(variant_id), quantity) if quantity > 0
|
46
48
|
end if params[:variants]
|
47
49
|
|
48
|
-
redirect_to cart_path
|
50
|
+
respond_with(@order) { |format| format.html { redirect_to cart_path } }
|
49
51
|
end
|
50
52
|
|
51
53
|
def empty
|
52
54
|
if @order = current_order
|
53
55
|
@order.line_items.destroy_all
|
54
56
|
end
|
55
|
-
|
57
|
+
|
58
|
+
respond_with(@order) { |format| format.html { redirect_to cart_path } }
|
56
59
|
end
|
57
60
|
|
58
61
|
def accurate_title
|
59
|
-
I18n.t(:shopping_cart)
|
62
|
+
@order && @order.completed? ? "#{Order.human_name} #{@order.number}" : I18n.t(:shopping_cart)
|
60
63
|
end
|
61
64
|
end
|
@@ -3,19 +3,21 @@ class ProductsController < Spree::BaseController
|
|
3
3
|
rescue_from ActiveRecord::RecordNotFound, :with => :render_404
|
4
4
|
helper :taxons
|
5
5
|
|
6
|
+
respond_to :html
|
7
|
+
|
6
8
|
def index
|
7
9
|
@searcher = Spree::Config.searcher_class.new(params)
|
8
10
|
@products = @searcher.retrieve_products
|
11
|
+
|
12
|
+
respond_with(@products)
|
9
13
|
end
|
10
14
|
|
11
15
|
def show
|
12
16
|
@product = Product.find_by_permalink!(params[:id])
|
13
17
|
return unless @product
|
14
|
-
|
15
|
-
@variants = Variant.active.
|
16
|
-
|
17
|
-
@product_properties = ProductProperty.find_all_by_product_id(@product.id,
|
18
|
-
:include => [:property])
|
18
|
+
|
19
|
+
@variants = Variant.active.includes([:option_values, :images]).where(:product_id => @product.id)
|
20
|
+
@product_properties = ProductProperty.includes(:property).where(:product_id => @product.id)
|
19
21
|
@selected_variant = @variants.detect { |v| v.available? }
|
20
22
|
|
21
23
|
referer = request.env['HTTP_REFERER']
|
@@ -23,6 +25,8 @@ class ProductsController < Spree::BaseController
|
|
23
25
|
if referer && referer.match(HTTP_REFERER_REGEXP)
|
24
26
|
@taxon = Taxon.find_by_permalink($1)
|
25
27
|
end
|
28
|
+
|
29
|
+
respond_with(@product)
|
26
30
|
end
|
27
31
|
|
28
32
|
private
|
@@ -2,12 +2,16 @@ class TaxonsController < Spree::BaseController
|
|
2
2
|
rescue_from ActiveRecord::RecordNotFound, :with => :render_404
|
3
3
|
helper :products
|
4
4
|
|
5
|
+
respond_to :html
|
6
|
+
|
5
7
|
def show
|
6
8
|
@taxon = Taxon.find_by_permalink!(params[:id])
|
7
9
|
return unless @taxon
|
8
|
-
|
10
|
+
|
9
11
|
@searcher = Spree::Config.searcher_class.new(params.merge(:taxon => @taxon.id))
|
10
12
|
@products = @searcher.retrieve_products
|
13
|
+
|
14
|
+
respond_with(@taxon)
|
11
15
|
end
|
12
16
|
|
13
17
|
private
|
@@ -2,4 +2,17 @@ module Admin::TaxonsHelper
|
|
2
2
|
def taxon_path(taxon)
|
3
3
|
taxon.ancestors.reverse.collect { |ancestor| ancestor.name }.join( " >> ")
|
4
4
|
end
|
5
|
-
|
5
|
+
|
6
|
+
def taxons_checkbox_tree(root, product)
|
7
|
+
return '' if root.children.blank?
|
8
|
+
content_tag 'ul' do
|
9
|
+
root.children.map do |taxon|
|
10
|
+
content_tag 'li' do
|
11
|
+
[check_box_tag("taxon_ids[]", taxon.id, product.taxons.include?(taxon), :id => "taxon_ids_#{taxon.id}"),
|
12
|
+
label_tag("taxon_ids_#{taxon.id}", taxon.name)].join(' ').html_safe +
|
13
|
+
taxons_checkbox_tree(taxon, product)
|
14
|
+
end.html_safe
|
15
|
+
end.join("\n").html_safe
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|