caboose-cms 0.5.201 → 0.5.202
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/admin_block_edit.js +20 -10
- data/app/assets/javascripts/caboose/admin_post_edit_content.js +313 -0
- data/app/assets/stylesheets/caboose/admin_post_edit_content.css +46 -0
- data/app/controllers/caboose/admin_controller.rb +4 -4
- data/app/controllers/caboose/application_controller.rb +35 -0
- data/app/controllers/caboose/blocks_controller.rb +120 -78
- data/app/controllers/caboose/checkout_controller.rb +6 -0
- data/app/controllers/caboose/posts_controller.rb +87 -21
- data/app/controllers/caboose/sites_controller.rb +13 -1
- data/app/models/caboose/block.rb +14 -4
- data/app/models/caboose/caboose_plugin.rb +4 -0
- data/app/models/caboose/core_plugin.rb +1 -1
- data/app/models/caboose/post.rb +51 -7
- data/app/models/caboose/schema.rb +10 -3
- data/app/models/caboose/site.rb +5 -0
- data/app/views/caboose/admin/index.html.erb +43 -30
- data/app/views/caboose/application/show.html.erb +1 -1
- data/app/views/caboose/blocks/_layout_basic.html.erb +1 -1
- data/app/views/caboose/blocks/_layout_basic_content.html.erb +1 -1
- data/app/views/caboose/blocks/_layout_post.html.erb +28 -0
- data/app/views/caboose/blocks/_layout_post_content.html.erb +10 -0
- data/app/views/caboose/blocks/_layout_post_footer.html.erb +3 -0
- data/app/views/caboose/blocks/_layout_post_header.html.erb +3 -0
- data/app/views/caboose/blocks/_post.html.erb +30 -0
- data/app/views/caboose/blocks/admin_edit.html.erb +6 -7
- data/app/views/caboose/blocks/admin_new.html.erb +4 -3
- data/app/views/caboose/posts/_admin_header.html.erb +1 -0
- data/app/views/caboose/posts/admin_edit_content.html.erb +14 -21
- data/app/views/caboose/posts/admin_edit_content_old.html.erb +32 -0
- data/app/views/caboose/posts/admin_edit_general.html.erb +25 -12
- data/app/views/caboose/posts/admin_edit_layout.html.erb +48 -0
- data/app/views/caboose/posts/admin_edit_preview.html.erb +27 -0
- data/app/views/caboose/posts/show.html.erb +16 -0
- data/app/views/caboose/sites/admin_edit.html.erb +7 -5
- data/app/views/caboose/social/admin_edit.html.erb +1 -1
- data/app/views/layouts/caboose/application.html.erb +12 -6
- data/config/routes.rb +299 -278
- data/lib/caboose/version.rb +1 -1
- data/lib/tasks/caboose.rake +15 -1
- metadata +13 -2
@@ -4,10 +4,10 @@ module Caboose
|
|
4
4
|
|
5
5
|
# GET /admin
|
6
6
|
def index
|
7
|
-
if logged_in?
|
8
|
-
|
9
|
-
|
10
|
-
end
|
7
|
+
#if logged_in?
|
8
|
+
# redirect_to '/admin/pages'
|
9
|
+
# return
|
10
|
+
#end
|
11
11
|
@return_url = params[:return_url].nil? ? '/admin/pages' : params[:return_url]
|
12
12
|
end
|
13
13
|
|
@@ -255,6 +255,41 @@ module Caboose
|
|
255
255
|
def admin_bulk_add() raise 'This method should be overridden.' end
|
256
256
|
def admin_delete() raise 'This method should be overridden.' end
|
257
257
|
def admin_bulk_delete() raise 'This method should be overridden.' end
|
258
|
+
|
259
|
+
# Make sure we're not under construction or on a forwarded domain
|
260
|
+
def under_construction_or_forwarding_domain?
|
261
|
+
|
262
|
+
d = Caboose::Domain.where(:domain => request.host_with_port).first
|
263
|
+
if d.nil?
|
264
|
+
Caboose.log("Could not find domain for #{request.host_with_port}\nAdd this domain to the caboose site.")
|
265
|
+
elsif d.under_construction == true
|
266
|
+
if d.site.under_construction_html && d.site.under_construction_html.strip.length > 0
|
267
|
+
render :text => d.site.under_construction_html
|
268
|
+
else
|
269
|
+
render :file => 'caboose/application/under_construction', :layout => false
|
270
|
+
end
|
271
|
+
return true
|
272
|
+
# See if we're on a forwarding domain
|
273
|
+
elsif d.primary == false && d.forward_to_primary == true
|
274
|
+
pd = d.site.primary_domain
|
275
|
+
if pd && pd.domain != request.host
|
276
|
+
url = "#{request.protocol}#{pd.domain}"
|
277
|
+
if request.fullpath && request.fullpath.strip.length > 0 && request.fullpath.strip != '/'
|
278
|
+
url << request.fullpath
|
279
|
+
end
|
280
|
+
redirect_to url
|
281
|
+
return true
|
282
|
+
end
|
283
|
+
# Check for a 301 redirect
|
284
|
+
else
|
285
|
+
new_url = PermanentRedirect.match(@site.id, request.fullpath)
|
286
|
+
if new_url
|
287
|
+
redirect_to new_url, :status => 301
|
288
|
+
return true
|
289
|
+
end
|
290
|
+
end
|
291
|
+
return false
|
292
|
+
end
|
258
293
|
|
259
294
|
end
|
260
295
|
end
|
@@ -4,47 +4,71 @@ module Caboose
|
|
4
4
|
class BlocksController < ApplicationController
|
5
5
|
|
6
6
|
helper :application
|
7
|
+
before_filter :before_blocks_action
|
7
8
|
|
9
|
+
def before_blocks_action
|
10
|
+
@p = params[:page_id] ? Page.find(params[:page_id]) : Post.find(params[:post_id])
|
11
|
+
end
|
12
|
+
|
13
|
+
def page_or_post
|
14
|
+
return params[:page_id] ? 'page' : 'post'
|
15
|
+
end
|
16
|
+
|
8
17
|
#===========================================================================
|
9
18
|
# Admin actions
|
10
19
|
#===========================================================================
|
11
20
|
|
12
21
|
# GET /admin/pages/:page_id/blocks
|
22
|
+
# GET /admin/posts/:post_id/blocks
|
13
23
|
def admin_index
|
14
24
|
return if !user_is_allowed('pages', 'view')
|
15
|
-
|
16
|
-
|
25
|
+
#h = params[:post_id] ? { :post_id => params[:post_id] } : { :page_id => params[:page_id] }
|
26
|
+
#blocks = Block.where(h).reorder(:sort_order)
|
27
|
+
#render :json => blocks
|
28
|
+
render :json => @p.block
|
17
29
|
end
|
18
30
|
|
19
31
|
# GET /admin/pages/:page_id/blocks/:id/new
|
20
32
|
# GET /admin/pages/:page_id/blocks/new
|
33
|
+
# GET /admin/posts/:post_id/blocks/:id/new
|
34
|
+
# GET /admin/posts/:post_id/blocks/new
|
21
35
|
def admin_new
|
22
36
|
return unless user_is_allowed('pages', 'add')
|
23
|
-
|
37
|
+
|
24
38
|
if params[:id]
|
25
39
|
block_type_id = params[:block_type_id]
|
26
40
|
block_type_id = Block.find(params[:id]).block_type.default_child_block_type_id if block_type_id.nil?
|
27
41
|
if block_type_id
|
28
42
|
b = Block.new
|
29
|
-
|
43
|
+
if params[:page_id]
|
44
|
+
b.page_id = params[:page_id].to_i
|
45
|
+
else
|
46
|
+
b.post_id = params[:post_id].to_i
|
47
|
+
end
|
30
48
|
b.parent_id = params[:id]
|
31
49
|
b.block_type_id = block_type_id
|
32
50
|
b.sort_order = Block.where(:parent_id => params[:id]).count
|
33
51
|
b.save
|
34
|
-
b.create_children
|
35
|
-
|
52
|
+
b.create_children
|
53
|
+
if params[:page_id]
|
54
|
+
redirect_to "/admin/pages/#{b.page_id}/blocks/#{b.id}/edit"
|
55
|
+
else
|
56
|
+
redirect_to "/admin/posts/#{b.post_id}/blocks/#{b.id}/edit"
|
57
|
+
end
|
36
58
|
return
|
37
59
|
end
|
38
60
|
end
|
39
61
|
|
40
|
-
@page = Page.find(params[:page_id])
|
41
|
-
@
|
62
|
+
@page = Page.find(params[:page_id]) if params[:page_id]
|
63
|
+
@post = Post.find(params[:post_id]) if params[:post_id]
|
64
|
+
@block = params[:id] ? Block.find(params[:id]) : (params[:page_id] ? Block.new(:page_id => params[:page_id]) : Block.new(:post_id => params[:post_id]))
|
42
65
|
@after_id = params[:after_id] ? params[:after_id] : nil
|
43
66
|
@before_id = params[:before_id] ? params[:before_id] : nil
|
44
67
|
render :layout => 'caboose/modal'
|
45
68
|
end
|
46
69
|
|
47
70
|
# GET /admin/pages/:page_id/blocks/:id
|
71
|
+
# GET /admin/posts/:post_id/blocks/:id
|
48
72
|
def admin_show
|
49
73
|
return unless user_is_allowed('pages', 'edit')
|
50
74
|
block = Block.find(params[:id])
|
@@ -52,7 +76,9 @@ module Caboose
|
|
52
76
|
end
|
53
77
|
|
54
78
|
# GET /admin/pages/:page_id/blocks/tree
|
55
|
-
# GET /admin/pages/:page_id/blocks/:id/tree
|
79
|
+
# GET /admin/pages/:page_id/blocks/:id/tree
|
80
|
+
# GET /admin/posts/:post_id/blocks/tree
|
81
|
+
# GET /admin/posts/:post_id/blocks/:id/tree
|
56
82
|
def admin_tree
|
57
83
|
return unless user_is_allowed('pages', 'edit')
|
58
84
|
|
@@ -61,9 +87,10 @@ module Caboose
|
|
61
87
|
b = Block.find(params[:id])
|
62
88
|
blocks << { 'id' => b.id, 'children' => admin_tree_helper(b), 'field_type' => b.block_type.field_type }
|
63
89
|
else
|
64
|
-
|
90
|
+
q = params[:page_id] ? ["parent_id is null and page_id = ?", params[:page_id]] : ["parent_id is null and post_id = ?", params[:post_id]]
|
91
|
+
Block.where(q).reorder(:sort_order).all.each do |b|
|
65
92
|
blocks << { 'id' => b.id, 'allow_child_blocks' => b.block_type.allow_child_blocks, 'children' => admin_tree_helper(b), 'field_type' => b.block_type.field_type }
|
66
|
-
end
|
93
|
+
end
|
67
94
|
end
|
68
95
|
render :json => blocks
|
69
96
|
end
|
@@ -77,6 +104,7 @@ module Caboose
|
|
77
104
|
end
|
78
105
|
|
79
106
|
# GET /admin/pages/:page_id/blocks/:id/render
|
107
|
+
# GET /admin/posts/:post_id/blocks/:id/render
|
80
108
|
def admin_render
|
81
109
|
return unless user_is_allowed('pages', 'edit')
|
82
110
|
b = Block.find(params[:id])
|
@@ -85,34 +113,50 @@ module Caboose
|
|
85
113
|
bt = BlockType.where(:name => 'richtext').first
|
86
114
|
b.block_type_id = bt.id
|
87
115
|
b.save
|
88
|
-
end
|
89
|
-
|
90
|
-
|
91
|
-
:
|
92
|
-
:
|
116
|
+
end
|
117
|
+
html = b.render(b, {
|
118
|
+
:view => nil,
|
119
|
+
:controller_view_content => nil,
|
120
|
+
:modal => false,
|
121
|
+
:editing => true,
|
122
|
+
:empty_text => params[:empty_text],
|
123
|
+
:css => '|CABOOSE_CSS|',
|
124
|
+
:js => '|CABOOSE_JAVASCRIPT|',
|
125
|
+
:csrf_meta_tags => '|CABOOSE_CSRF|',
|
126
|
+
:csrf_meta_tags2 => '|CABOOSE_CSRF|',
|
127
|
+
:logged_in_user => @logged_in_user,
|
128
|
+
:site => @site,
|
129
|
+
:page => params[:page_id] ? @p : nil,
|
130
|
+
:post => params[:post_id] ? @p : nil,
|
131
|
+
:request => request
|
93
132
|
})
|
94
133
|
render :json => html
|
95
|
-
end
|
96
|
-
|
134
|
+
end
|
135
|
+
|
97
136
|
# GET /admin/pages/:page_id/blocks/render
|
137
|
+
# GET /admin/posts/:post_id/blocks/render
|
98
138
|
def admin_render_all
|
99
|
-
return unless user_is_allowed('pages', 'edit')
|
100
|
-
|
101
|
-
blocks = Block.where("page_id = ? and parent_id is null", p.id).reorder(:sort_order).collect do |b|
|
102
|
-
#bt = b.block_type
|
103
|
-
#if bt.nil?
|
104
|
-
# bt = BlockType.where(:name => 'richtext').first
|
105
|
-
# b.block_type_id = bt.id
|
106
|
-
# b.save
|
107
|
-
#end
|
108
|
-
#b.create_children
|
139
|
+
return unless user_is_allowed('pages', 'edit')
|
140
|
+
blocks = Block.where("#{page_or_post}_id = ? and parent_id is null", @p.id).reorder(:sort_order).collect do |b|
|
109
141
|
{
|
110
142
|
:id => b.id,
|
111
143
|
:block_type_id => b.block_type.id,
|
112
144
|
:sort_order => b.sort_order,
|
113
145
|
:html => b.render(b, {
|
114
|
-
:
|
115
|
-
:
|
146
|
+
:view => nil,
|
147
|
+
:controller_view_content => nil,
|
148
|
+
:modal => false,
|
149
|
+
:editing => true,
|
150
|
+
:empty_text => params[:empty_text],
|
151
|
+
:css => '|CABOOSE_CSS|',
|
152
|
+
:js => '|CABOOSE_JAVASCRIPT|',
|
153
|
+
:csrf_meta_tags => '|CABOOSE_CSRF|',
|
154
|
+
:csrf_meta_tags2 => '|CABOOSE_CSRF|',
|
155
|
+
:logged_in_user => @logged_in_user,
|
156
|
+
:site => @site,
|
157
|
+
:page => params[:page_id] ? @p : nil,
|
158
|
+
:post => params[:post_id] ? @p : nil,
|
159
|
+
:request => request
|
116
160
|
})
|
117
161
|
}
|
118
162
|
end
|
@@ -120,11 +164,10 @@ module Caboose
|
|
120
164
|
end
|
121
165
|
|
122
166
|
# GET /admin/pages/:page_id/blocks/render-second-level
|
167
|
+
# GET /admin/posts/:post_id/blocks/render-second-level
|
123
168
|
def admin_render_second_level
|
124
|
-
return unless user_is_allowed('pages', 'edit')
|
125
|
-
|
126
|
-
@p = p
|
127
|
-
blocks = p.block.children.collect do |b|
|
169
|
+
return unless user_is_allowed('pages', 'edit')
|
170
|
+
blocks = @p.block.children.collect do |b|
|
128
171
|
{
|
129
172
|
:id => b.id,
|
130
173
|
:block_type_id => b.block_type.id,
|
@@ -141,22 +184,21 @@ module Caboose
|
|
141
184
|
:csrf_meta_tags2 => '|CABOOSE_CSRF|',
|
142
185
|
:logged_in_user => @logged_in_user,
|
143
186
|
:site => @site,
|
144
|
-
:page => p
|
187
|
+
:page => params[:page_id] ? @p : nil,
|
188
|
+
:post => params[:post_id] ? @p : nil,
|
189
|
+
:request => request
|
145
190
|
})
|
146
191
|
}
|
147
192
|
end
|
148
|
-
render :json => blocks
|
149
|
-
#render :layout => false
|
150
|
-
|
151
|
-
#respond_to do |format|
|
152
|
-
# format.json
|
153
|
-
#end
|
193
|
+
render :json => blocks
|
154
194
|
end
|
155
195
|
|
156
196
|
# GET /admin/pages/:page_id/blocks/:id/edit
|
197
|
+
# GET /admin/posts/:post_id/blocks/:id/edit
|
157
198
|
def admin_edit
|
158
199
|
return unless user_is_allowed('pages', 'edit')
|
159
|
-
@page = Page.find(params[:page_id])
|
200
|
+
@page = Page.find(params[:page_id]) if params[:page_id]
|
201
|
+
@post = Post.find(params[:post_id]) if params[:post_id]
|
160
202
|
@block = Block.find(params[:id])
|
161
203
|
@block.create_children
|
162
204
|
@modal = true
|
@@ -173,9 +215,11 @@ module Caboose
|
|
173
215
|
end
|
174
216
|
|
175
217
|
# GET /admin/pages/:page_id/blocks/:id/advanced
|
218
|
+
# GET /admin/posts/:post_id/blocks/:id/advanced
|
176
219
|
def admin_edit_advanced
|
177
220
|
return unless user_is_allowed('pages', 'edit')
|
178
|
-
@page = Page.find(params[:page_id])
|
221
|
+
@page = Page.find(params[:page_id]) if params[:page_id]
|
222
|
+
@post = Post.find(params[:post_id]) if params[:post_id]
|
179
223
|
@block = Block.find(params[:id])
|
180
224
|
@block.create_children
|
181
225
|
render :layout => 'caboose/modal'
|
@@ -183,6 +227,8 @@ module Caboose
|
|
183
227
|
|
184
228
|
# POST /admin/pages/:page_id/blocks
|
185
229
|
# POST /admin/pages/:page_id/blocks/:id
|
230
|
+
# POST /admin/posts/:post_id/blocks
|
231
|
+
# POST /admin/posts/:post_id/blocks/:id
|
186
232
|
def admin_create
|
187
233
|
return unless user_is_allowed('pages', 'add')
|
188
234
|
|
@@ -191,8 +237,12 @@ module Caboose
|
|
191
237
|
'redirect' => nil
|
192
238
|
})
|
193
239
|
|
194
|
-
b = Block.new
|
195
|
-
|
240
|
+
b = Block.new
|
241
|
+
if params[:page_id]
|
242
|
+
b.page_id = params[:page_id].to_i
|
243
|
+
else
|
244
|
+
b.post_id = params[:post_id].to_i
|
245
|
+
end
|
196
246
|
b.parent_id = params[:id] ? params[:id] : nil
|
197
247
|
b.block_type_id = params[:block_type_id]
|
198
248
|
|
@@ -245,11 +295,16 @@ module Caboose
|
|
245
295
|
|
246
296
|
# Send back the response
|
247
297
|
#resp.block = b
|
248
|
-
|
298
|
+
if params[:page_id]
|
299
|
+
resp.redirect = "/admin/pages/#{b.page_id}/blocks/#{b.id}/edit"
|
300
|
+
else
|
301
|
+
resp.redirect = "/admin/posts/#{b.post_id}/blocks/#{b.id}/edit"
|
302
|
+
end
|
249
303
|
render :json => resp
|
250
304
|
end
|
251
305
|
|
252
306
|
# PUT /admin/pages/:page_id/blocks/:id
|
307
|
+
# PUT /admin/posts/:post_id/blocks/:id
|
253
308
|
def admin_update
|
254
309
|
return unless user_is_allowed('pages', 'edit')
|
255
310
|
|
@@ -292,13 +347,15 @@ module Caboose
|
|
292
347
|
end
|
293
348
|
|
294
349
|
# Trigger the page cache to be updated
|
295
|
-
|
296
|
-
|
297
|
-
pc
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
350
|
+
if params[:page_id]
|
351
|
+
pc = PageCache.where(:page_id => b.page_id).first
|
352
|
+
if pc
|
353
|
+
pc.refresh = true
|
354
|
+
pc.save
|
355
|
+
PageCacher.delay.refresh
|
356
|
+
else
|
357
|
+
PageCacher.delay.cache(b.page_id)
|
358
|
+
end
|
302
359
|
end
|
303
360
|
|
304
361
|
resp.success = save && b.save
|
@@ -307,6 +364,7 @@ module Caboose
|
|
307
364
|
end
|
308
365
|
|
309
366
|
# POST /admin/pages/:page_id/blocks/:id/image
|
367
|
+
# POST /admin/posts/:post_id/blocks/:id/image
|
310
368
|
def admin_update_image
|
311
369
|
return unless user_is_allowed('pages', 'edit')
|
312
370
|
|
@@ -321,6 +379,7 @@ module Caboose
|
|
321
379
|
end
|
322
380
|
|
323
381
|
# POST /admin/pages/:page_id/blocks/:id/file
|
382
|
+
# POST /admin/posts/:post_id/blocks/:id/file
|
324
383
|
def admin_update_file
|
325
384
|
return unless user_is_allowed('pages', 'edit')
|
326
385
|
|
@@ -335,6 +394,7 @@ module Caboose
|
|
335
394
|
end
|
336
395
|
|
337
396
|
# DELETE /admin/pages/:page_id/blocks/:id
|
397
|
+
# DELETE /admin/posts/:post_id/blocks/:id
|
338
398
|
def admin_delete
|
339
399
|
return unless user_is_allowed('pages', 'delete')
|
340
400
|
|
@@ -342,7 +402,11 @@ module Caboose
|
|
342
402
|
b = Block.find(params[:id])
|
343
403
|
parent_id = b.parent_id
|
344
404
|
if b.parent_id
|
345
|
-
|
405
|
+
if params[:page_id]
|
406
|
+
resp.redirect = "/admin/pages/#{b.page_id}/blocks/#{b.parent_id}/edit"
|
407
|
+
else
|
408
|
+
resp.redirect = "/admin/posts/#{b.post_id}/blocks/#{b.parent_id}/edit"
|
409
|
+
end
|
346
410
|
else
|
347
411
|
resp.close = true
|
348
412
|
end
|
@@ -361,6 +425,7 @@ module Caboose
|
|
361
425
|
end
|
362
426
|
|
363
427
|
# PUT /admin/pages/:page_id/blocks/:id/move-up
|
428
|
+
# PUT /admin/posts/:post_id/blocks/:id/move-up
|
364
429
|
def admin_move_up
|
365
430
|
return unless user_is_allowed('pages', 'delete')
|
366
431
|
|
@@ -372,33 +437,11 @@ module Caboose
|
|
372
437
|
else
|
373
438
|
resp.success = "The block has been moved up successfully."
|
374
439
|
end
|
375
|
-
|
376
|
-
#if b.sort_order == 0
|
377
|
-
# resp.error = "The block is already at the top."
|
378
|
-
#else
|
379
|
-
# b2 = nil
|
380
|
-
#
|
381
|
-
# new_sort_order = b.sort_order - 1
|
382
|
-
# while new_sort_order > 0 do
|
383
|
-
# b2 = Block.where("parent_id = ? and sort_order = ?", b.parent_id, new_sort_order).first
|
384
|
-
# break if b2
|
385
|
-
# new_sort_order = new_sort_order - 1
|
386
|
-
# end
|
387
|
-
# if b2
|
388
|
-
# b2.sort_order = new_sort_order + 1
|
389
|
-
# b2.save
|
390
|
-
# else
|
391
|
-
# new_sort_order = 1
|
392
|
-
# end
|
393
|
-
# b.sort_order = new_sort_order
|
394
|
-
# b.save
|
395
|
-
# resp.success = "The block has been moved up successfully."
|
396
|
-
#end
|
397
|
-
|
398
440
|
render :json => resp
|
399
441
|
end
|
400
442
|
|
401
443
|
# PUT /admin/pages/:page_id/blocks/:id/move-down
|
444
|
+
# PUT /admin/posts/:post_id/blocks/:id/move-down
|
402
445
|
def admin_move_down
|
403
446
|
return unless user_is_allowed('pages', 'delete')
|
404
447
|
|
@@ -419,5 +462,4 @@ module Caboose
|
|
419
462
|
end
|
420
463
|
|
421
464
|
end
|
422
|
-
|
423
465
|
end
|
@@ -298,6 +298,12 @@ module Caboose
|
|
298
298
|
def authnet_relay
|
299
299
|
Caboose.log("Authorize.net relay, order #{params[:x_invoice_id]}")
|
300
300
|
|
301
|
+
if params[:x_invoice_num].nil?
|
302
|
+
Caboose.log("Error: no x_invoice_id in given parameters.")
|
303
|
+
render :json => { :error => "Invalid x_invoice_id." }
|
304
|
+
return
|
305
|
+
end
|
306
|
+
|
301
307
|
order = Caboose::Order.find(params[:x_invoice_num])
|
302
308
|
ot = Caboose::OrderTransaction.new(
|
303
309
|
:order_id => order.id,
|