caboose-cms 0.5.5 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/assets/javascripts/caboose/model/index_table.js +87 -64
- data/app/assets/javascripts/caboose/model/index_table_bak.js +709 -0
- data/app/controllers/caboose/categories_controller.rb +17 -0
- data/app/controllers/caboose/products_controller.rb +64 -40
- data/app/models/caboose/product.rb +20 -0
- data/app/views/caboose/products/admin_index.html.erb +77 -85
- data/config/routes.rb +42 -39
- data/lib/caboose/version.rb +1 -1
- metadata +3 -2
@@ -103,6 +103,23 @@ module Caboose
|
|
103
103
|
end
|
104
104
|
render :json => options
|
105
105
|
end
|
106
|
+
|
107
|
+
# GET /admin/categories/options
|
108
|
+
def admin_options
|
109
|
+
options = []
|
110
|
+
cat = Category.find(1)
|
111
|
+
cat.children.each do |c|
|
112
|
+
admin_options_helper(options, c, '')
|
113
|
+
end
|
114
|
+
render :json => options
|
115
|
+
end
|
116
|
+
|
117
|
+
def admin_options_helper(options, cat, prefix)
|
118
|
+
options << { :value => cat.id, :text => "#{prefix}#{cat.name}" }
|
119
|
+
cat.children.each do |c|
|
120
|
+
admin_options_helper(options, c, "#{prefix} - ")
|
121
|
+
end
|
122
|
+
end
|
106
123
|
end
|
107
124
|
end
|
108
125
|
|
@@ -295,6 +295,38 @@ module Caboose
|
|
295
295
|
render :layout => 'caboose/admin'
|
296
296
|
end
|
297
297
|
|
298
|
+
# GET /admin/products/json
|
299
|
+
def admin_json
|
300
|
+
return if !user_is_allowed('products', 'view')
|
301
|
+
|
302
|
+
# Temporary patch for vendor name sorting; Fix this
|
303
|
+
params[:sort] = 'store_vendors.name' if params[:sort] == 'vendor'
|
304
|
+
|
305
|
+
pager = Caboose::PageBarGenerator.new(params, {
|
306
|
+
'vendor_name' => '',
|
307
|
+
'search_like' => '',
|
308
|
+
'price' => params[:filters] && params[:filters][:missing_prices] ? 0 : ''
|
309
|
+
}, {
|
310
|
+
'model' => 'Caboose::Product',
|
311
|
+
'sort' => 'title',
|
312
|
+
'desc' => false,
|
313
|
+
'base_url' => '/admin/products',
|
314
|
+
'items_per_page' => 25,
|
315
|
+
'use_url_params' => false,
|
316
|
+
'abbreviations' => {
|
317
|
+
'search_like' => 'store_products.title_concat_vendor_name_like'
|
318
|
+
},
|
319
|
+
'includes' => {
|
320
|
+
'vendor_name' => [ 'vendor' , 'name' ],
|
321
|
+
'price' => [ 'variants' , 'price' ]
|
322
|
+
}
|
323
|
+
})
|
324
|
+
render :json => {
|
325
|
+
:pager => pager,
|
326
|
+
:models => pager.items.as_json(:includes => [:vendor, :categories])
|
327
|
+
}
|
328
|
+
end
|
329
|
+
|
298
330
|
# GET /admin/products/add-upcs - TODO remove this; it's a temporary thing for woods-n-water
|
299
331
|
def admin_add_upcs
|
300
332
|
params[:vendor_id] if params[:vendor_id] and params[:vendor_id].empty?
|
@@ -312,7 +344,13 @@ module Caboose
|
|
312
344
|
|
313
345
|
render :layout => 'caboose/admin'
|
314
346
|
end
|
315
|
-
|
347
|
+
|
348
|
+
# GET /admin/products/:id/json
|
349
|
+
def admin_json_single
|
350
|
+
p = Product.find(params[:id])
|
351
|
+
render :json => p.as_json(:includes => [:vendor, :categories])
|
352
|
+
end
|
353
|
+
|
316
354
|
# GET /admin/products/:id/general
|
317
355
|
def admin_edit_general
|
318
356
|
return if !user_is_allowed('products', 'edit')
|
@@ -533,43 +571,20 @@ module Caboose
|
|
533
571
|
save = true
|
534
572
|
params.each do |name,value|
|
535
573
|
case name
|
536
|
-
when 'alternate_id'
|
537
|
-
product.
|
538
|
-
when '
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
when '
|
550
|
-
product.title = value
|
551
|
-
when 'caption'
|
552
|
-
product.caption = value
|
553
|
-
when 'featured'
|
554
|
-
product.featured = value
|
555
|
-
when 'description'
|
556
|
-
product.description = value
|
557
|
-
when 'category_id'
|
558
|
-
product.category_id = value
|
559
|
-
when 'vendor_id'
|
560
|
-
product.vendor_id = value
|
561
|
-
when 'handle'
|
562
|
-
product.handle = value
|
563
|
-
when 'seo_title'
|
564
|
-
product.seo_title = value
|
565
|
-
when 'seo_description'
|
566
|
-
product.seo_description = value
|
567
|
-
when 'option1'
|
568
|
-
product.option1 = value
|
569
|
-
when 'option2'
|
570
|
-
product.option2 = value
|
571
|
-
when 'option3'
|
572
|
-
product.option3 = value
|
574
|
+
when 'alternate_id' then product.alternate_id = value
|
575
|
+
when 'title' then product.title = value
|
576
|
+
when 'caption' then product.caption = value
|
577
|
+
when 'featured' then product.featured = value
|
578
|
+
when 'description' then product.description = value
|
579
|
+
when 'vendor_id' then product.vendor_id = value
|
580
|
+
when 'handle' then product.handle = value
|
581
|
+
when 'seo_title' then product.seo_title = value
|
582
|
+
when 'seo_description' then product.seo_description = value
|
583
|
+
when 'status' then product.status = value
|
584
|
+
when 'category_id' then product.toggle_category(value[0], value[1])
|
585
|
+
when 'option1' then product.option1 = value
|
586
|
+
when 'option2' then product.option2 = value
|
587
|
+
when 'option3' then product.option3 = value
|
573
588
|
when 'default1'
|
574
589
|
product.default1 = value
|
575
590
|
Variant.where(:product_id => product.id, :option1 => nil).each do |p|
|
@@ -587,9 +602,18 @@ module Caboose
|
|
587
602
|
Variant.where(:product_id => product.id, :option3 => nil).each do |p|
|
588
603
|
p.option3 = value
|
589
604
|
p.save
|
605
|
+
end
|
606
|
+
when 'date_available'
|
607
|
+
if value.strip.length == 0
|
608
|
+
product.date_available = nil
|
609
|
+
else
|
610
|
+
begin
|
611
|
+
product.date_available = DateTime.parse(value)
|
612
|
+
rescue
|
613
|
+
resp.error = "Invalid date"
|
614
|
+
save = false
|
615
|
+
end
|
590
616
|
end
|
591
|
-
when 'status'
|
592
|
-
product.status = value
|
593
617
|
end
|
594
618
|
end
|
595
619
|
resp.success = save && product.save
|
@@ -141,5 +141,25 @@ module Caboose
|
|
141
141
|
def option3_values
|
142
142
|
self.variants.where(:status => 'Active').reorder(:option3_sort_order).pluck(:option3).uniq.reject { |x| x.nil? || x.empty? }
|
143
143
|
end
|
144
|
+
|
145
|
+
def toggle_category(cat_id, value)
|
146
|
+
if value.to_i > 0 # Add to category
|
147
|
+
if cat_id == 'all'
|
148
|
+
CategoryMembership.where(:product_id => self.id).destroy_all
|
149
|
+
Category.reorder(:name).all.each{ |cat| CategoryMembership.create(:product_id => self.id, :category_id => cat.id) }
|
150
|
+
else
|
151
|
+
if !CategoryMembership.where(:product_id => self.id, :category_id => cat_id.to_i).exists?
|
152
|
+
CategoryMembership.create(:product_id => self.id, :category_id => cat_id.to_i)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
else # Remove from category
|
156
|
+
if cat_id == 'all'
|
157
|
+
CategoryMembership.where(:product_id => self.id).destroy_all
|
158
|
+
else
|
159
|
+
CategoryMembership.where(:product_id => self.id, :category_id => cat_id.to_i).destroy_all
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
144
164
|
end
|
145
165
|
end
|
@@ -1,95 +1,87 @@
|
|
1
1
|
<h1>Products</h1>
|
2
2
|
|
3
3
|
<p style="margin: 12px 0">
|
4
|
-
<a href="/admin/vendors/new">New Vendor</a>
|
5
|
-
<span style="margin: 0 3px">|</span>
|
6
|
-
<a href="/admin/products/
|
7
|
-
<
|
8
|
-
<a href="/admin/products/sort">Sort Products</a>
|
4
|
+
<a href="/admin/vendors/new">New Vendor</a><span style="margin: 0 3px">|</span>
|
5
|
+
<a href="/admin/products/new">New Product</a><span style="margin: 0 3px">|</span>
|
6
|
+
<a href="/admin/products/sort">Sort Products</a><span style="margin: 0 3px">|</span>
|
7
|
+
<a href='#'>Search Form</a>
|
9
8
|
</p>
|
10
9
|
|
11
|
-
<
|
12
|
-
<
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
<input type="button" value="Clear" onclick="window.location='/admin/products'" />
|
17
|
-
|
18
|
-
<ul>
|
19
|
-
<li><p>Find products that have:</p></li>
|
20
|
-
<li><label><input name="filters[missing_prices]" type="checkbox" <%= 'checked="checked"' if params[:filters] && params[:filters][:missing_prices] %> /> Missing prices</label></li>
|
21
|
-
<li><label><input name="filters[missing_images]" type="checkbox" <%= 'checked="checked"' if params[:filters] && params[:filters][:missing_images] %> /> Missing images</label></li>
|
22
|
-
<li><label><input name="filters[no_vendor]" type="checkbox" <%= 'checked="checked"' if params[:filters] && params[:filters][:no_vendor] %> /> No vendor</label></li>
|
23
|
-
</ul>
|
24
|
-
</form>
|
25
|
-
</aside>
|
10
|
+
<form action="/admin/products" method="get" id="search_form" style="margin: 0 0 12px">
|
11
|
+
<input type="text" name="search_like" placeholder="Title or Vendor Name" value="<%= params[:search_like] %>" style="width: 350px" />
|
12
|
+
<input type="submit" value="Search" />
|
13
|
+
<input type="button" value="Clear" onclick="window.location='/admin/products'" />
|
14
|
+
</form>
|
26
15
|
|
27
|
-
|
28
|
-
<% if @products.count > 0 %>
|
29
|
-
<table class='data' id='properties_table'>
|
30
|
-
<tr>
|
31
|
-
<%= raw @gen.sortable_table_headings({
|
32
|
-
'id' => 'ID',
|
33
|
-
'title' => 'Title',
|
34
|
-
'vendor' => 'Vendor'
|
35
|
-
}) %>
|
36
|
-
</tr>
|
37
|
-
|
38
|
-
<% @products.each do |p| %>
|
39
|
-
<tr onclick="window.location='/admin/products/<%= p.id %>/general';">
|
40
|
-
<td><%= raw p.id %></td>
|
41
|
-
<td><%= raw p.title %></td>
|
42
|
-
<td><%= raw p.vendor.nil? ? 'Unknown' : p.vendor.name %></td>
|
43
|
-
</tr>
|
44
|
-
<% end %>
|
45
|
-
</table>
|
46
|
-
|
47
|
-
<p><%= raw @gen.generate %></p>
|
48
|
-
<% else %>
|
49
|
-
<p>There are no products right now.</p>
|
50
|
-
<% end %>
|
51
|
-
</section>
|
52
|
-
</div>
|
16
|
+
<div id='products'></div>
|
53
17
|
|
54
|
-
<% content_for :
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
18
|
+
<% content_for :caboose_js do %>
|
19
|
+
<%= javascript_include_tag 'caboose/model/all' %>
|
20
|
+
<script type='text/javascript'>
|
21
|
+
|
22
|
+
$(document).ready(function() {
|
23
|
+
var that = this;
|
24
|
+
var table = new IndexTable({
|
25
|
+
form_authenticity_token: '<%= form_authenticity_token %>',
|
26
|
+
container: 'products',
|
27
|
+
base_url: '/admin/products',
|
28
|
+
allow_bulk_edit: false,
|
29
|
+
allow_bulk_delete: false,
|
30
|
+
allow_duplicate: false,
|
31
|
+
fields: [
|
32
|
+
{ show: true , name: 'id' , nice_name: 'ID' , sort: 'id' , type: 'text' , value: function(p) { return p.id }, width: 500, editable: false },
|
33
|
+
{ show: true , name: 'title' , nice_name: 'Title' , sort: 'title' , type: 'text' , value: function(p) { return p.title }, width: 200 },
|
34
|
+
{ show: true , name: 'caption' , nice_name: 'Caption' , sort: 'caption' , type: 'text' , value: function(p) { return p.caption }, width: 200 },
|
35
|
+
{ show: true , name: 'status' , nice_name: 'Status' , sort: 'status' , type: 'select' , value: function(p) { return p.status }, width: 200, options_url: '/admin/products/status-options' },
|
36
|
+
{ show: true , name: 'handle' , nice_name: 'URL Handle' , sort: 'handle' , type: 'text' , value: function(p) { return p.handle }, width: 200 },
|
37
|
+
{ show: true , name: 'seo_title' , nice_name: 'SEO Page Title' , sort: 'seo_title' , type: 'text' , value: function(p) { return p.seo_title }, width: 200 },
|
38
|
+
{ show: false, name: 'seo_description' , nice_name: 'SEO Meta Description' , sort: 'seo_description' , type: 'textarea' , value: function(p) { return p.seo_description }, width: 200, height: 150 },
|
39
|
+
{ show: true , name: 'alternate_id' , nice_name: 'Alternate ID' , sort: 'alternate_id' , type: 'text' , value: function(p) { return p.alternate_id }, width: 200 },
|
40
|
+
{ show: true , name: 'date_available' , nice_name: 'Date Available' , sort: 'date_available' , type: 'date' , value: function(p) { return p.date_available }, width: 200 },
|
41
|
+
{ show: false, name: 'featured' , nice_name: 'Featured' , sort: 'featured' , type: 'checkbox' , value: function(p) { return p.featured }, width: 200 },
|
42
|
+
{ show: false, name: 'category_id' , nice_name: 'Categories' , sort: 'categories.name' , type: 'checkbox-multiple' , value: function(p) { return p.categories ? p.categories.map(function(c) { return c.id }) : []; }, text: function(p) { return p.categories ? p.categories.map(function(c) { return c.name }).join(', ') : ''; }, width: 200, height: 200, options_url: '/admin/categories/options' },
|
43
|
+
],
|
44
|
+
new_model_text: 'New Product',
|
45
|
+
new_model_fields: [
|
46
|
+
{ name: 'name', nice_name: 'Name', type: 'text', width: 400 }
|
47
|
+
],
|
48
|
+
});
|
49
|
+
});
|
50
|
+
|
51
|
+
</script>
|
87
52
|
<% end %>
|
88
53
|
|
89
|
-
<% content_for :
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
54
|
+
<% content_for :caboose_css do %>
|
55
|
+
<style>
|
56
|
+
ul {
|
57
|
+
list-style-type: none;
|
58
|
+
padding: 0;
|
59
|
+
}
|
60
|
+
input[type=checkbox] {
|
61
|
+
height: 16px;
|
62
|
+
left: auto !important;
|
63
|
+
margin: 0 0 12px !important;
|
64
|
+
position: relative !important;
|
65
|
+
top: auto !important;
|
66
|
+
}
|
67
|
+
label { cursor: pointer; }
|
68
|
+
label input[type=checkbox] {
|
69
|
+
height: 15px !important;
|
70
|
+
left: auto !important;
|
71
|
+
margin: 12px 0 !important;
|
72
|
+
position: relative !important;
|
73
|
+
top: auto !important;
|
74
|
+
}
|
75
|
+
|
76
|
+
.media,
|
77
|
+
.media > section { overflow: hidden; }
|
78
|
+
.media > aside {
|
79
|
+
float: left;
|
80
|
+
margin-right: 12px;
|
81
|
+
}
|
82
|
+
.media > aside.right {
|
83
|
+
float: right;
|
84
|
+
margin-left: 12px;
|
85
|
+
}
|
86
|
+
</style>
|
95
87
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -50,7 +50,7 @@ Caboose::Engine.routes.draw do
|
|
50
50
|
post "admin/users/import" => "users#import"
|
51
51
|
get "admin/users/:id/su" => "users#admin_su"
|
52
52
|
get "admin/users/:id/edit-password" => "users#edit_password"
|
53
|
-
get "admin/users/:id
|
53
|
+
get "admin/users/:id" => "users#edit"
|
54
54
|
put "admin/users/:id" => "users#update"
|
55
55
|
post "admin/users" => "users#create"
|
56
56
|
delete "admin/users/:id" => "users#destroy"
|
@@ -61,7 +61,7 @@ Caboose::Engine.routes.draw do
|
|
61
61
|
get "admin/roles" => "roles#index"
|
62
62
|
get "admin/roles/options" => "roles#options"
|
63
63
|
get "admin/roles/new" => "roles#new"
|
64
|
-
get "admin/roles/:id
|
64
|
+
get "admin/roles/:id" => "roles#edit"
|
65
65
|
put "admin/roles/:id" => "roles#update"
|
66
66
|
post "admin/roles" => "roles#create"
|
67
67
|
delete "admin/roles/:id" => "roles#destroy"
|
@@ -89,7 +89,7 @@ Caboose::Engine.routes.draw do
|
|
89
89
|
get "admin/permissions" => "permissions#index"
|
90
90
|
get "admin/permissions/options" => "permissions#options"
|
91
91
|
get "admin/permissions/new" => "permissions#new"
|
92
|
-
get "admin/permissions/:id
|
92
|
+
get "admin/permissions/:id" => "permissions#edit"
|
93
93
|
put "admin/permissions/:id" => "permissions#update"
|
94
94
|
post "admin/permissions" => "permissions#create"
|
95
95
|
delete "admin/permissions/:id" => "permissions#destroy"
|
@@ -97,7 +97,7 @@ Caboose::Engine.routes.draw do
|
|
97
97
|
get "admin/settings" => "settings#index"
|
98
98
|
get "admin/settings/options" => "settings#options"
|
99
99
|
get "admin/settings/new" => "settings#new"
|
100
|
-
get "admin/settings/:id
|
100
|
+
get "admin/settings/:id" => "settings#edit"
|
101
101
|
put "admin/settings/:id" => "settings#update"
|
102
102
|
post "admin/settings" => "settings#create"
|
103
103
|
delete "admin/settings/:id" => "settings#destroy"
|
@@ -112,8 +112,7 @@ Caboose::Engine.routes.draw do
|
|
112
112
|
get "admin/pages/:id/block-options" => "pages#admin_block_options"
|
113
113
|
get "admin/pages/:id/uri" => "pages#admin_page_uri"
|
114
114
|
get "admin/pages/:id/delete" => "pages#admin_delete_form"
|
115
|
-
get "admin/pages/:id/sitemap" => "pages#admin_sitemap"
|
116
|
-
get "admin/pages/:id/edit" => "pages#admin_edit_general"
|
115
|
+
get "admin/pages/:id/sitemap" => "pages#admin_sitemap"
|
117
116
|
get "admin/pages/:id/permissions" => "pages#admin_edit_permissions"
|
118
117
|
get "admin/pages/:id/css" => "pages#admin_edit_css"
|
119
118
|
get "admin/pages/:id/js" => "pages#admin_edit_js"
|
@@ -127,7 +126,8 @@ Caboose::Engine.routes.draw do
|
|
127
126
|
get "admin/pages/:id/layout" => "pages#admin_edit_layout"
|
128
127
|
put "admin/pages/:id/layout" => "pages#admin_update_layout"
|
129
128
|
put "admin/pages/:id/viewers" => "pages#admin_update_viewers"
|
130
|
-
put "admin/pages/:id/editors" => "pages#admin_update_editors"
|
129
|
+
put "admin/pages/:id/editors" => "pages#admin_update_editors"
|
130
|
+
get "admin/pages/:id" => "pages#admin_edit_general"
|
131
131
|
put "admin/pages/:id" => "pages#admin_update"
|
132
132
|
get "admin/pages" => "pages#admin_index"
|
133
133
|
post "admin/pages" => "pages#admin_create"
|
@@ -283,12 +283,12 @@ Caboose::Engine.routes.draw do
|
|
283
283
|
|
284
284
|
get '/admin/products/add-upcs' => 'products#admin_add_upcs'
|
285
285
|
|
286
|
-
get '/admin/vendors'
|
287
|
-
get '/admin/vendors/status-options' => 'vendors#status_options'
|
286
|
+
get '/admin/vendors/status-options' => 'vendors#status_options'
|
288
287
|
get '/admin/vendors/new' => 'vendors#admin_new'
|
289
|
-
get '/admin/vendors/:id
|
290
|
-
|
291
|
-
|
288
|
+
get '/admin/vendors/:id' => 'vendors#admin_edit'
|
289
|
+
put '/admin/vendors/:id' => 'vendors#admin_update'
|
290
|
+
post '/admin/vendors' => 'vendors#admin_add'
|
291
|
+
get '/admin/vendors' => 'vendors#admin_index'
|
292
292
|
|
293
293
|
# Orders
|
294
294
|
|
@@ -298,35 +298,38 @@ Caboose::Engine.routes.draw do
|
|
298
298
|
|
299
299
|
post "/reviews/add" => "reviews#add"
|
300
300
|
|
301
|
-
get "/admin/products"
|
302
|
-
get
|
303
|
-
|
304
|
-
put
|
305
|
-
|
306
|
-
get "/admin/products/
|
307
|
-
get "/admin/products
|
308
|
-
get "/admin/products/:id/
|
309
|
-
get "/admin/products/:id/
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
get "/admin/products/:id/variants
|
314
|
-
get "/admin/products/:id/
|
315
|
-
|
316
|
-
|
301
|
+
get "/admin/products" => "products#admin_index"
|
302
|
+
get "/admin/products/json" => "products#admin_json"
|
303
|
+
get '/admin/products/sort' => 'products#admin_sort'
|
304
|
+
put '/admin/products/update-sort-order' => 'products#admin_update_sort_order'
|
305
|
+
put "/admin/products/update-vendor-status/:id" => "products#admin_update_vendor_status"
|
306
|
+
get "/admin/products/new" => "products#admin_new"
|
307
|
+
get "/admin/products/status-options" => "products#admin_status_options"
|
308
|
+
get "/admin/products/:id/general" => "products#admin_edit_general"
|
309
|
+
get "/admin/products/:id/description" => "products#admin_edit_description"
|
310
|
+
get "/admin/products/:id/categories" => "products#admin_edit_categories"
|
311
|
+
post "/admin/products/:id/categories" => "products#admin_add_to_category"
|
312
|
+
delete "/admin/products/:id/categories/:category_id" => "products#admin_remove_from_category"
|
313
|
+
get "/admin/products/:id/variants" => "products#admin_edit_variants"
|
314
|
+
get "/admin/products/:id/variants/json" => "products#admin_variants_json"
|
315
|
+
get "/admin/products/:id/variant-cols" => "products#admin_edit_variant_columns"
|
316
|
+
put "/admin/products/:id/variant-cols" => "products#admin_update_variant_columns"
|
317
|
+
get "/admin/products/:id/variants/sort-order" => "products#admin_edit_variant_sort_order"
|
317
318
|
put '/admin/products/:id/variants/option1-sort-order' => 'products#admin_update_variant_option1_sort_order'
|
318
319
|
put '/admin/products/:id/variants/option2-sort-order' => 'products#admin_update_variant_option2_sort_order'
|
319
320
|
put '/admin/products/:id/variants/option3-sort-order' => 'products#admin_update_variant_option3_sort_order'
|
320
|
-
get "/admin/products/:id/images"
|
321
|
-
post "/admin/products/:id/images"
|
322
|
-
get "/admin/products/:id/collections"
|
323
|
-
get "/admin/products/:id/seo"
|
324
|
-
get "/admin/products/:id/options"
|
325
|
-
get "/admin/products/:id/delete"
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
321
|
+
get "/admin/products/:id/images" => "products#admin_edit_images"
|
322
|
+
post "/admin/products/:id/images" => "products#admin_add_image"
|
323
|
+
get "/admin/products/:id/collections" => "products#admin_edit_collections"
|
324
|
+
get "/admin/products/:id/seo" => "products#admin_edit_seo"
|
325
|
+
get "/admin/products/:id/options" => "products#admin_edit_options"
|
326
|
+
get "/admin/products/:id/delete" => "products#admin_delete_form"
|
327
|
+
get "/admin/products/:id/json" => "products#admin_json_single"
|
328
|
+
get "/admin/products/:id" => "products#admin_edit_general"
|
329
|
+
put "/admin/products/:id" => "products#admin_update"
|
330
|
+
post "/admin/products" => "products#admin_add"
|
331
|
+
delete "/admin/products/:id" => "products#admin_delete"
|
332
|
+
put "/admin/products/:id/update-vendor" => "products#admin_update_vendor"
|
330
333
|
|
331
334
|
get "/admin/products/:product_id/variants/:variant_id/edit" => "variants#admin_edit"
|
332
335
|
get "/admin/variants/status-options" => "variants#admin_status_options"
|
@@ -341,7 +344,7 @@ Caboose::Engine.routes.draw do
|
|
341
344
|
get "/admin/categories" => "categories#admin_index"
|
342
345
|
get "/admin/categories/new" => "categories#admin_new"
|
343
346
|
get "/admin/categories/options" => "categories#admin_options"
|
344
|
-
get "/admin/categories/:id
|
347
|
+
get "/admin/categories/:id" => "categories#admin_edit"
|
345
348
|
put "/admin/categories/:id" => "categories#admin_update"
|
346
349
|
get '/admin/categories/status-options' => 'categories#admin_status_options'
|
347
350
|
post "/admin/categories/:id" => "categories#admin_update"
|