caboose-cms 0.5.213 → 0.5.214
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.
- checksums.yaml +8 -8
- data/app/assets/javascripts/caboose/modal.js +2 -0
- data/app/assets/stylesheets/caboose/modal.css +4 -381
- data/app/assets/stylesheets/caboose/modal_main.css +4 -0
- data/app/controllers/caboose/checkout_controller.rb +15 -8
- data/app/controllers/caboose/roles_controller.rb +19 -10
- data/app/controllers/caboose/sites_controller.rb +5 -22
- data/app/controllers/caboose/users_controller.rb +1 -1
- data/app/models/caboose/role.rb +10 -13
- data/app/models/caboose/schema.rb +1 -0
- data/app/models/caboose/site.rb +25 -0
- data/app/models/caboose/user.rb +3 -2
- data/app/views/caboose/pages/admin_edit_permissions.html.erb +1 -1
- data/app/views/caboose/roles/edit.html.erb +23 -18
- data/app/views/caboose/roles/new.html.erb +1 -1
- data/app/views/caboose/users/edit.html.erb +2 -7
- data/app/views/caboose/users/index.html.erb +2 -4
- data/app/views/layouts/caboose/no_layout.html.erb +1 -0
- data/lib/caboose/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YzFiYmRlZWU5Zjg3YTViMjZmNzZjZmEyMmFhZDQ3Zjc2MWI4Nzk3ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDQ1MzI3NTM2OTRmNzUxNzg0YjEyMWVhMjUzNzcyMzkxZDI1NWQ0Zg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZWY2Y2NkYjE1YjQ3YmY2ZjhjZWEyZTBkOWI0NjM5MDczOTVkYWU2MmE0YjVh
|
10
|
+
MTUxMzc0NmVhNGZhOTZhMzU3NzI4Zjc2Nzc3Mjc1ZjRiOTE2YjgzYjZkNWYz
|
11
|
+
OGFkMGNhYTdmMmQ5M2FmYTMzZTI2NzA3MGQzZmUzYWIxMzk4MGU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWJiM2MxZGFiNGNhMmFjMjM0OTc0Y2Y5OTA5NjgxYjM1OWY0MTMyYmYxODlk
|
14
|
+
ZDBiZTVhZmNiNjcxZGMyZWYzYmEzMjNkNjZhZjE4MjJjM2I5MzBiNjdiN2Y1
|
15
|
+
Nzg1ZTU5N2FiYjU3NTg4MzMwZjcyZDlkMzhhZTE4ZjNiYWViM2E=
|
@@ -14,6 +14,8 @@
|
|
14
14
|
//= require jquery
|
15
15
|
//= require jquery_ujs
|
16
16
|
//= require colorbox-rails
|
17
|
+
//= require caboose/jquery.datetimepicker
|
17
18
|
//= require caboose/jquery.placeholder
|
18
19
|
//= require caboose/jquery.detect
|
19
20
|
//= require caboose/modal_integration
|
21
|
+
//= require caboose/admin_main
|
@@ -1,388 +1,11 @@
|
|
1
1
|
/*
|
2
|
-
*
|
3
|
-
* listed below.
|
4
|
-
*
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
-
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
-
*
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
-
* compiled file, but it's generally better to create a new file per style scope.
|
2
|
+
* /app/assets/stylesheets/caboose/modal.css
|
10
3
|
*
|
4
|
+
*= require jquery-ui
|
5
|
+
*= require caboose/jquery.datetimepicker
|
11
6
|
*= require colorbox-rails
|
12
7
|
*= require caboose/fonts
|
13
8
|
*= require caboose/caboose
|
14
9
|
*= require caboose/model_binder
|
10
|
+
*= require caboose/modal_main
|
15
11
|
*/
|
16
|
-
|
17
|
-
html { width: 100%; }
|
18
|
-
|
19
|
-
@font-face {
|
20
|
-
font-family: 'Avenir';
|
21
|
-
src: url('//d1ygukj37mahb2.cloudfront.net/assets/avenir-medium.eot');
|
22
|
-
src: url('//d1ygukj37mahb2.cloudfront.net/assets/avenir-medium.eot') format('embedded-opentype'),
|
23
|
-
url('//d1ygukj37mahb2.cloudfront.net/assets/avenir-medium.woff') format('woff'),
|
24
|
-
url('//d1ygukj37mahb2.cloudfront.net/assets/avenir-medium.ttf') format('truetype'),
|
25
|
-
url('//d1ygukj37mahb2.cloudfront.net/assets/avenir-medium.svg') format('svg');
|
26
|
-
font-weight: normal;
|
27
|
-
font-style: normal;
|
28
|
-
}
|
29
|
-
|
30
|
-
body {
|
31
|
-
background: #111111;
|
32
|
-
margin: 0;
|
33
|
-
padding: 0;
|
34
|
-
color: #fff;
|
35
|
-
width: 100%;
|
36
|
-
font-family: "Avenir", Arial;
|
37
|
-
}
|
38
|
-
|
39
|
-
#modal_wrapper {
|
40
|
-
width: 100%;
|
41
|
-
position: relative;
|
42
|
-
}
|
43
|
-
|
44
|
-
#modal_content {
|
45
|
-
width: 100%;
|
46
|
-
max-width: 100%;
|
47
|
-
padding: 0;
|
48
|
-
}
|
49
|
-
|
50
|
-
#modal_content h1 {
|
51
|
-
margin: 0 0 12px 0;
|
52
|
-
padding: 0;
|
53
|
-
font-weight: normal;
|
54
|
-
background: #111111;
|
55
|
-
}
|
56
|
-
|
57
|
-
#modal_content a {
|
58
|
-
color: #ccc;
|
59
|
-
text-decoration: none;
|
60
|
-
border-bottom: #999 1px dotted;
|
61
|
-
}
|
62
|
-
|
63
|
-
#modal_content p.loading {
|
64
|
-
background-image: url('/assets/caboose/loading_white_on_black.gif');
|
65
|
-
background-position: 0 center;
|
66
|
-
background-repeat: no-repeat;
|
67
|
-
color: #ccc;
|
68
|
-
font-weight: normal;
|
69
|
-
font-size: 16pt;
|
70
|
-
padding: 10px 10px 10px 40px;
|
71
|
-
}
|
72
|
-
|
73
|
-
#modal_content div.yesnobox {
|
74
|
-
position: absolute;
|
75
|
-
top: 0;
|
76
|
-
left: 0;
|
77
|
-
z-index: 22;
|
78
|
-
background-color: rgba(0, 0, 0, 0.9);
|
79
|
-
font-size: 20px;
|
80
|
-
text-align: center;
|
81
|
-
}
|
82
|
-
|
83
|
-
#modal_content div.yesnobox div {
|
84
|
-
padding: 20px;
|
85
|
-
}
|
86
|
-
|
87
|
-
#modal_content div.yesnobox input {
|
88
|
-
width: auto;
|
89
|
-
}
|
90
|
-
|
91
|
-
div.model_attribute_text {
|
92
|
-
color: #000;
|
93
|
-
}
|
94
|
-
|
95
|
-
#modal_content div.top_right_controls {
|
96
|
-
position: absolute;
|
97
|
-
top: 0;
|
98
|
-
right: 0;
|
99
|
-
}
|
100
|
-
|
101
|
-
#modal_content div.top_right_controls a {
|
102
|
-
display: inline-block;
|
103
|
-
margin: 0;
|
104
|
-
padding: 4px 8px;
|
105
|
-
}
|
106
|
-
|
107
|
-
input, select, textarea {
|
108
|
-
font-family: "Avenir", Arial;
|
109
|
-
border: 2px solid #ccc;
|
110
|
-
background: #000;
|
111
|
-
color: #fff;
|
112
|
-
/*
|
113
|
-
-moz-border-radius: 2px;
|
114
|
-
-webkit-border-radius: 2px;
|
115
|
-
border-radius: 2px; */
|
116
|
-
padding: 4px 8px;
|
117
|
-
height: 34px;
|
118
|
-
font-size: 20px;
|
119
|
-
z-index: 20;
|
120
|
-
}
|
121
|
-
|
122
|
-
input.dirty,
|
123
|
-
textarea.dirty {
|
124
|
-
background: #fff799;
|
125
|
-
color: #000;
|
126
|
-
}
|
127
|
-
|
128
|
-
select {
|
129
|
-
padding: 0;
|
130
|
-
height: 44px;
|
131
|
-
}
|
132
|
-
|
133
|
-
option {
|
134
|
-
|
135
|
-
}
|
136
|
-
|
137
|
-
select.fake {
|
138
|
-
background: transparent;
|
139
|
-
position: absolute;
|
140
|
-
top: 0;
|
141
|
-
left: 0;
|
142
|
-
color: transparent;
|
143
|
-
}
|
144
|
-
|
145
|
-
select.fake option {
|
146
|
-
background: #fff;
|
147
|
-
color: #000;
|
148
|
-
}
|
149
|
-
|
150
|
-
#modal_content .bound_input_check a,
|
151
|
-
#modal_content .bound_input_cancel a {
|
152
|
-
border: 1px solid #ccc;
|
153
|
-
-moz-border-radius: 2px;
|
154
|
-
-webkit-border-radius: 2px;
|
155
|
-
border-radius: 2px;
|
156
|
-
|
157
|
-
font-size: 28px;
|
158
|
-
text-align: center;
|
159
|
-
background: #00cc00;
|
160
|
-
color: #fff;
|
161
|
-
|
162
|
-
display: block;
|
163
|
-
padding: 4px 0;
|
164
|
-
height: 34px;
|
165
|
-
}
|
166
|
-
|
167
|
-
#modal_content .bound_input_check a.loading {
|
168
|
-
background-image: url(/assets/caboose/loading_green.gif);
|
169
|
-
background-color: #00cc00;
|
170
|
-
background-repeat: no-repeat;
|
171
|
-
background-position: 6px 5px;
|
172
|
-
color: rgba(255, 255, 255, 0.0);
|
173
|
-
}
|
174
|
-
|
175
|
-
#modal_content .bound_textarea_controls a {
|
176
|
-
display: inline-block;
|
177
|
-
margin: 3px 0 0 1px;
|
178
|
-
padding: 8px 0 6px 0;
|
179
|
-
background: #ccc;
|
180
|
-
color: #000;
|
181
|
-
text-align: center;
|
182
|
-
border: #666 1px solid;
|
183
|
-
}
|
184
|
-
|
185
|
-
#modal_content .bound_textarea_controls a.save { width: 60px; }
|
186
|
-
#modal_content .bound_textarea_controls a.discard { width: 80px; }
|
187
|
-
|
188
|
-
#modal_content .note,
|
189
|
-
#modal_content .error {
|
190
|
-
margin: 0;
|
191
|
-
}
|
192
|
-
|
193
|
-
#modal_content .placeholder {
|
194
|
-
display: block;
|
195
|
-
margin: 0;
|
196
|
-
padding: 0 5px 0 0;
|
197
|
-
height: 34px;
|
198
|
-
|
199
|
-
position: absolute;
|
200
|
-
top: 12px;
|
201
|
-
left: 10px;
|
202
|
-
z-index: 19;
|
203
|
-
}
|
204
|
-
|
205
|
-
#modal_content .placeholder span {
|
206
|
-
display: block;
|
207
|
-
font-size: 20px;
|
208
|
-
color: #757575;
|
209
|
-
}
|
210
|
-
|
211
|
-
#modal_content input[type='checkbox'] {
|
212
|
-
/*position: absolute;*/
|
213
|
-
top: 4px;
|
214
|
-
left: 0;
|
215
|
-
z-index: 19;
|
216
|
-
|
217
|
-
margin: 0;
|
218
|
-
padding: 0;
|
219
|
-
width: 20px;
|
220
|
-
}
|
221
|
-
|
222
|
-
#modal_content .search_form {
|
223
|
-
position: absolute;
|
224
|
-
top: 0;
|
225
|
-
right: 0;
|
226
|
-
}
|
227
|
-
|
228
|
-
#modal_content table.data {
|
229
|
-
border-collapse: collapse;
|
230
|
-
}
|
231
|
-
|
232
|
-
#modal_content table.data th {
|
233
|
-
background: #000;
|
234
|
-
border: #333 1px solid;
|
235
|
-
color: #efefef;
|
236
|
-
margin: 0;
|
237
|
-
padding: 0;
|
238
|
-
}
|
239
|
-
|
240
|
-
#modal_content table.data th a {
|
241
|
-
display: block;
|
242
|
-
text-decoration: none;
|
243
|
-
border: none;
|
244
|
-
color: #fff;
|
245
|
-
padding: 8px 12px;
|
246
|
-
}
|
247
|
-
|
248
|
-
#modal_content table.data th a:hover {
|
249
|
-
color: #fff;
|
250
|
-
background: #333;
|
251
|
-
}
|
252
|
-
|
253
|
-
#modal_content table.data td {
|
254
|
-
background: #111111;
|
255
|
-
border: #333 1px solid;
|
256
|
-
color: #fff;
|
257
|
-
margin: 0;
|
258
|
-
padding: 8px 12px;
|
259
|
-
}
|
260
|
-
|
261
|
-
#modal_content table.data tr:nth-child(even) td {
|
262
|
-
background-color: #000;
|
263
|
-
}
|
264
|
-
|
265
|
-
|
266
|
-
#modal_content table.data tr:nth-child(odd) td {
|
267
|
-
background-color: transparent;
|
268
|
-
}
|
269
|
-
|
270
|
-
#modal_content table.data tr:hover td,
|
271
|
-
#modal_content table.data tr:nth-child(even):hover td,
|
272
|
-
#modal_content table.data tr:nth-child(odd):hover td {
|
273
|
-
background: #333;
|
274
|
-
color: #fff;
|
275
|
-
}
|
276
|
-
|
277
|
-
/*******************************************************************************
|
278
|
-
Modeljs
|
279
|
-
*******************************************************************************/
|
280
|
-
|
281
|
-
#modal_content div.model_attribute_text {
|
282
|
-
color: #fff;
|
283
|
-
}
|
284
|
-
|
285
|
-
#modal_content .model_attribute {
|
286
|
-
background: none repeat scroll 0 0 transparent;
|
287
|
-
display: block;
|
288
|
-
padding: 2px 4px;
|
289
|
-
text-decoration: none;
|
290
|
-
}
|
291
|
-
|
292
|
-
#modal_content .clear {
|
293
|
-
clear: both;
|
294
|
-
line-height: 0;
|
295
|
-
}
|
296
|
-
|
297
|
-
/*******************************************************************************
|
298
|
-
Message boxes
|
299
|
-
*******************************************************************************/
|
300
|
-
|
301
|
-
#modal_content .note {
|
302
|
-
padding: 20px;
|
303
|
-
background: #fef49c;
|
304
|
-
color: #000000;
|
305
|
-
font-weight: bold;
|
306
|
-
font-size: 1.4em;
|
307
|
-
}
|
308
|
-
|
309
|
-
#modal_content .note_small {
|
310
|
-
display: block;
|
311
|
-
padding: 4px 10px;
|
312
|
-
background: #fef49c;
|
313
|
-
color: #000000;
|
314
|
-
font-size: 1em;
|
315
|
-
}
|
316
|
-
|
317
|
-
#modal_content .error {
|
318
|
-
background: #9c171b;
|
319
|
-
color: #ffffff;
|
320
|
-
}
|
321
|
-
|
322
|
-
#modal_content .error a {
|
323
|
-
color: #fff;
|
324
|
-
}
|
325
|
-
|
326
|
-
#modal_content .error a:hover {
|
327
|
-
color: #000;
|
328
|
-
}
|
329
|
-
|
330
|
-
#modal_content .success {
|
331
|
-
background: #009900;
|
332
|
-
color: #ffffff;
|
333
|
-
}
|
334
|
-
|
335
|
-
#modal_content .success a {
|
336
|
-
color: #ffffff;
|
337
|
-
}
|
338
|
-
|
339
|
-
#cboxTopLeft,
|
340
|
-
#cboxTopRight,
|
341
|
-
#cboxBottomLeft,
|
342
|
-
#cboxBottomRight,
|
343
|
-
#cboxMiddleLeft,
|
344
|
-
#cboxMiddleRight,
|
345
|
-
#cboxTopCenter,
|
346
|
-
#cboxBottomCenter,
|
347
|
-
#cboxClose { background: #111 !important; }
|
348
|
-
|
349
|
-
/*******************************************************************************
|
350
|
-
Page Bar Generator
|
351
|
-
*******************************************************************************/
|
352
|
-
|
353
|
-
.page_links {
|
354
|
-
|
355
|
-
}
|
356
|
-
|
357
|
-
.page_links a {
|
358
|
-
display: inline-block;
|
359
|
-
margin: 0 2px;
|
360
|
-
padding: 5px 8px 3px 8px;
|
361
|
-
|
362
|
-
border: #505050 1px solid;
|
363
|
-
background: #000;
|
364
|
-
color: #505050;
|
365
|
-
text-decoration: none;
|
366
|
-
}
|
367
|
-
|
368
|
-
.page_links a:hover {
|
369
|
-
background: #505050;
|
370
|
-
color: #fff;
|
371
|
-
}
|
372
|
-
|
373
|
-
.page_links .middle_links a {
|
374
|
-
|
375
|
-
}
|
376
|
-
|
377
|
-
.page_links span.current_page {
|
378
|
-
display: inline-block;
|
379
|
-
padding: 5px 8px 3px 8px;
|
380
|
-
|
381
|
-
border: #ccc 1px solid;
|
382
|
-
background: #ccc;
|
383
|
-
color: #000;
|
384
|
-
text-decoration: none;
|
385
|
-
}
|
386
|
-
|
387
|
-
#search_form input[type='text'] { height: 20px; padding: 6px 12px; }
|
388
|
-
#search_form input[type='submit'] { height: 35px; padding: 0 12px; }
|
@@ -153,6 +153,9 @@ module Caboose
|
|
153
153
|
# Save the order
|
154
154
|
@order.save
|
155
155
|
|
156
|
+
# Decrement quantities of variants
|
157
|
+
@order.decrement_quantities
|
158
|
+
|
156
159
|
# Clear the cart and re-initialize
|
157
160
|
session[:cart_id] = nil
|
158
161
|
init_cart
|
@@ -363,15 +366,19 @@ module Caboose
|
|
363
366
|
|
364
367
|
# Go ahead and capture funds if the order only contained downloadable items
|
365
368
|
@order = Order.find(params[:order_id])
|
366
|
-
if !@order.has_shippable_items?
|
367
|
-
capture_resp = @order.capture_funds
|
368
|
-
if capture_resp.error
|
369
|
-
@resp.success = false
|
370
|
-
@resp.error = capture_resp.error
|
371
|
-
end
|
372
|
-
end
|
373
369
|
|
374
|
-
if @resp.success
|
370
|
+
if @resp.success
|
371
|
+
if !@order.has_shippable_items?
|
372
|
+
capture_resp = @order.capture_funds
|
373
|
+
if capture_resp.error
|
374
|
+
@resp.success = false
|
375
|
+
@resp.error = capture_resp.error
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
# Decrement quantities of variants
|
380
|
+
@order.decrement_quantities
|
381
|
+
|
375
382
|
session[:cart_id] = nil
|
376
383
|
init_cart
|
377
384
|
end
|
@@ -9,7 +9,7 @@ module Caboose
|
|
9
9
|
# GET /admin/roles
|
10
10
|
def index
|
11
11
|
return unless user_is_allowed('roles', 'view')
|
12
|
-
top_roles = Role.tree
|
12
|
+
top_roles = Role.tree(@site.id)
|
13
13
|
arr = []
|
14
14
|
top_roles.each { |r| arr += add_role_options(r, 0) }
|
15
15
|
@roles = arr
|
@@ -36,12 +36,18 @@ module Caboose
|
|
36
36
|
'redirect' => nil
|
37
37
|
})
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
39
|
+
parent = Role.where(:id => params[:parent_id]).first
|
40
|
+
if parent.nil?
|
41
|
+
resp.error = "Parent role must be part of this site."
|
42
|
+
else
|
43
|
+
role = Role.new()
|
44
|
+
role.site_id = @site.id
|
45
|
+
role.parent_id = params[:parent_id]
|
46
|
+
role.name = params[:name]
|
47
|
+
role.save
|
48
|
+
resp.redirect = "/admin/roles/#{role.id}"
|
49
|
+
end
|
50
|
+
|
45
51
|
render json: resp
|
46
52
|
end
|
47
53
|
|
@@ -61,8 +67,12 @@ module Caboose
|
|
61
67
|
role.description = value
|
62
68
|
when "parent_id"
|
63
69
|
value = value.to_i
|
70
|
+
p = Role.where(:id => value).first
|
64
71
|
if role.id == value
|
65
72
|
resp.error = "You can't set the parent to be this role."
|
73
|
+
save = false
|
74
|
+
elsif value != -1 && (p.nil? || p.site_id != role.site_id)
|
75
|
+
resp.error = "Invalid parent."
|
66
76
|
save = false
|
67
77
|
elsif role.is_ancestor_of?(value)
|
68
78
|
resp.error = "You can't set the parent to be one of the child roles."
|
@@ -71,8 +81,7 @@ module Caboose
|
|
71
81
|
role.parent_id = value
|
72
82
|
if value == -1
|
73
83
|
resp.attributes = { 'parent_id' => { 'text' => '[No parent]' }}
|
74
|
-
else
|
75
|
-
p = Role.find(value)
|
84
|
+
else
|
76
85
|
resp.attributes = { 'parent_id' => { 'text' => p.name }}
|
77
86
|
end
|
78
87
|
end
|
@@ -114,7 +123,7 @@ module Caboose
|
|
114
123
|
# GET /admin/roles/options
|
115
124
|
def options
|
116
125
|
return unless user_is_allowed('roles', 'view')
|
117
|
-
@top_roles = Role.tree
|
126
|
+
@top_roles = Role.tree(@site.id)
|
118
127
|
arr = [{
|
119
128
|
"value" => -1,
|
120
129
|
"text" => 'Top Level'
|
@@ -47,17 +47,9 @@ module Caboose
|
|
47
47
|
render :file => 'caboose/extras/error' and return
|
48
48
|
end
|
49
49
|
|
50
|
-
@site = Site.find(params[:id])
|
51
|
-
|
52
|
-
|
53
|
-
if !User.where(:username => 'admin', :site_id => @site.id).exists?
|
54
|
-
admin_user = User.create(:username => 'admin', :email => 'admin@nine.is', :site_id => @site.id, :password => Digest::SHA1.hexdigest(Caboose::salt + 'caboose'))
|
55
|
-
admin_role = Role.where(:name => 'Admin').first
|
56
|
-
if admin_user && admin_role
|
57
|
-
RoleMembership.create(:user_id => admin_user.id, :role_id => admin_role.id)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
50
|
+
@site = Site.find(params[:id])
|
51
|
+
@site.init_users_and_roles
|
52
|
+
|
61
53
|
end
|
62
54
|
|
63
55
|
# GET /admin/sites/:id/block-types
|
@@ -117,17 +109,8 @@ module Caboose
|
|
117
109
|
StoreConfig.create(:site_id => site.id)
|
118
110
|
SmtpConfig.create( :site_id => site.id)
|
119
111
|
resp.redirect = "/admin/sites/#{site.id}"
|
120
|
-
end
|
121
|
-
|
122
|
-
# Create an admin user for the account
|
123
|
-
if !User.where(:username => 'admin', :site_id => site.id).exists?
|
124
|
-
admin_user = User.create(:username => 'admin', :email => 'admin@nine.is', :site_id => site.id, :password => Digest::SHA1.hexdigest(Caboose::salt + 'caboose'))
|
125
|
-
admin_role = Role.where(:name => 'Admin').first
|
126
|
-
if admin_role
|
127
|
-
RoleMembership.create(:user_id => admin_user.id, :role_id => admin_role.id)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
112
|
+
end
|
113
|
+
site.init_users_and_roles
|
131
114
|
render :json => resp
|
132
115
|
end
|
133
116
|
|
data/app/models/caboose/role.rb
CHANGED
@@ -1,19 +1,16 @@
|
|
1
1
|
|
2
2
|
class Caboose::Role < ActiveRecord::Base
|
3
3
|
self.table_name = "roles"
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
belongs_to :site, :class_name => 'Caboose::Site'
|
6
|
+
belongs_to :parent, :class_name => "Caboose::Role"
|
7
7
|
has_many :role_memberships
|
8
|
-
has_many :users, :through => :role_memberships
|
9
|
-
|
10
|
-
#has_and_belongs_to_many :permissions
|
8
|
+
has_many :users, :through => :role_memberships
|
11
9
|
has_many :role_permissions
|
12
|
-
has_many :permissions, :through => :role_permissions
|
13
|
-
|
10
|
+
has_many :permissions, :through => :role_permissions
|
14
11
|
has_many :page_permissions
|
15
12
|
|
16
|
-
attr_accessible :name, :description, :parent_id
|
13
|
+
attr_accessible :name, :description, :parent_id, :site_id
|
17
14
|
attr_accessor :children
|
18
15
|
|
19
16
|
def self.admin_role
|
@@ -71,13 +68,13 @@ class Caboose::Role < ActiveRecord::Base
|
|
71
68
|
return self.where("users.id" => user_id).all(:include => :users)
|
72
69
|
end
|
73
70
|
|
74
|
-
def self.tree
|
75
|
-
return self.where(:parent_id => -1).reorder("name").all
|
71
|
+
def self.tree(site_id)
|
72
|
+
return self.where(:parent_id => -1, :site_id => site_id).reorder("name").all
|
76
73
|
end
|
77
74
|
|
78
|
-
def self.flat_tree(prefix = '-')
|
75
|
+
def self.flat_tree(site_id, prefix = '-')
|
79
76
|
arr = []
|
80
|
-
self.tree.each do |r|
|
77
|
+
self.tree(site_id).each do |r|
|
81
78
|
arr += self.flat_tree_helper(r, prefix, '')
|
82
79
|
end
|
83
80
|
return arr
|
data/app/models/caboose/site.rb
CHANGED
@@ -106,4 +106,29 @@ class Caboose::Site < ActiveRecord::Base
|
|
106
106
|
self.save
|
107
107
|
end
|
108
108
|
|
109
|
+
def init_users_and_roles
|
110
|
+
|
111
|
+
admin_user = Caboose::User.where(:username => 'admin', :site_id => self.id).first
|
112
|
+
admin_user = Caboose::User.create(:username => 'admin', :email => 'admin@nine.is', :site_id => self.id, :password => Digest::SHA1.hexdigest(Caboose::salt + 'caboose')) if admin_user.nil?
|
113
|
+
|
114
|
+
admin_role = Caboose::Role.where(:site_id => self.id, :name => 'Admin').first
|
115
|
+
admin_role = Caboose::Role.create(:site_id => self.id, :parent_id => -1, :name => 'Admin') if admin_role.nil?
|
116
|
+
|
117
|
+
elo_role = Caboose::Role.where(:site_id => self.id, :name => 'Everyone Logged Out').first
|
118
|
+
elo_role = Caboose::Role.create(:site_id => self.id, :parent_id => -1, :name => 'Everyone Logged Out') if elo_role.nil?
|
119
|
+
|
120
|
+
eli_role = Caboose::Role.where(:site_id => self.id, :name => 'Everyone Logged In').first
|
121
|
+
eli_role = Caboose::Role.create(:site_id => self.id, :parent_id => elo_role.id, :name => 'Everyone Logged In') if eli_role.nil?
|
122
|
+
|
123
|
+
# Make sure the admin role has the admin "all" permission
|
124
|
+
admin_perm = Caboose::Permission.where(:resource => 'all', :action => 'all').first
|
125
|
+
rp = Caboose::RolePermission.where(:role_id => admin_role.id, :permission_id => admin_perm.id).first
|
126
|
+
rp = Caboose::RolePermission.create(:role_id => admin_role.id, :permission_id => admin_perm.id) if rp.nil?
|
127
|
+
|
128
|
+
# Make sure the admin user is a member of the admin role
|
129
|
+
rm = Caboose::RoleMembership.where(:role_id => admin_role.id, :user_id => admin_user.id).first
|
130
|
+
rm = Caboose::RoleMembership.create(:role_id => admin_role.id, :user_id => admin_user.id) if rm.nil?
|
131
|
+
|
132
|
+
end
|
133
|
+
|
109
134
|
end
|
data/app/models/caboose/user.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class Caboose::User < ActiveRecord::Base
|
2
|
-
self.table_name = "users"
|
3
|
-
|
2
|
+
self.table_name = "users"
|
3
|
+
|
4
|
+
belongs_to :site, :class_name => 'Caboose::Site'
|
4
5
|
has_many :role_memberships
|
5
6
|
has_many :roles, :through => :role_memberships
|
6
7
|
has_attached_file :image,
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
<table class='data' id='viewers'>
|
7
7
|
<tr><th>Role</th><th>View</th><th>Edit</th></tr>
|
8
|
-
<% Caboose::Role.flat_tree(' - ').each do |r| %>
|
8
|
+
<% Caboose::Role.flat_tree(@site.id, ' - ').each do |r| %>
|
9
9
|
<% next if r.id == 1 %>
|
10
10
|
<% may_view = Caboose::PagePermission.where(:role_id => r.id, :page_id => @page.id, :action => 'view').exists? %>
|
11
11
|
<% may_edit = Caboose::PagePermission.where(:role_id => r.id, :page_id => @page.id, :action => 'edit').exists? %>
|
@@ -1,20 +1,30 @@
|
|
1
1
|
|
2
2
|
<h1>Editing Role</h1>
|
3
|
+
|
4
|
+
<p><input type='button' value='< Back' onclick="window.location='/admin/roles';" /></p>
|
5
|
+
|
3
6
|
<div id="role_<%= @role.id %>_name"></div>
|
4
7
|
<div id="role_<%= @role.id %>_parent_id"></div>
|
5
8
|
<div id="role_<%= @role.id %>_description"></div>
|
9
|
+
|
6
10
|
<h3>Members</h3>
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
<
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
<% users = Caboose::User.where(:site_id => @site.id).reorder("last_name, first_name").all %>
|
12
|
+
<% if users && users.count > 0 %>
|
13
|
+
<div id='members'>
|
14
|
+
<table class='data'>
|
15
|
+
<% users.each do |u| %>
|
16
|
+
<% is_member = Caboose::RoleMembership.where(:role_id => @role.id, :user_id => u.id).exists? %>
|
17
|
+
<tr>
|
18
|
+
<td><input type='checkbox' name='user<%= u.id %>' <%= raw is_member ? "checked='true'" : '' %> onclick="toggle_role(<%= u.id %>, <%= @role.id %>, $(this).prop('checked'));" /></td>
|
19
|
+
<td><%= u.first_name %> <%= u.last_name %> (<%= u.email %>)</td>
|
20
|
+
</tr>
|
21
|
+
<% end %>
|
22
|
+
</table>
|
23
|
+
</div>
|
24
|
+
<% else %>
|
25
|
+
<p>There are no users for this site.</p>
|
26
|
+
<% end %>
|
27
|
+
|
18
28
|
<h3>Permissions</h3>
|
19
29
|
<div id='permissions'>
|
20
30
|
<table class='data'>
|
@@ -27,6 +37,7 @@
|
|
27
37
|
<% end %>
|
28
38
|
</table>
|
29
39
|
</div>
|
40
|
+
|
30
41
|
<div id="role_<%= @role.id %>_members"></div>
|
31
42
|
<div id="role_<%= @role.id %>_permissions"></div>
|
32
43
|
<div id="message"></div>
|
@@ -42,11 +53,6 @@
|
|
42
53
|
<%= javascript_include_tag "caboose/model/all" %>
|
43
54
|
<script type="text/javascript">
|
44
55
|
|
45
|
-
var modal = false;
|
46
|
-
$(window).load(function() {
|
47
|
-
modal = new CabooseModal(600, 600);
|
48
|
-
});
|
49
|
-
|
50
56
|
$(document).ready(function() {
|
51
57
|
new ModelBinder({
|
52
58
|
name: 'Role',
|
@@ -59,8 +65,7 @@ $(document).ready(function() {
|
|
59
65
|
{ name: 'parent_id' , nice_name: 'Parent' , type: 'select', value: <%= @role.parent_id %>, text: "<%= @role.parent.nil? ? '[No parent]' : @role.parent.name %>", show_controls: true, loading_message: 'Getting roles...', options_url: '/admin/roles/options', width: 590, message: 'message' },
|
60
66
|
{ name: 'name' , nice_name: 'Name' , type: 'text' , value: "<%= @role.name %>" , width: 590 , message: 'message' },
|
61
67
|
{ name: 'description' , nice_name: 'Description' , type: 'text' , value: "<%= @role.description %>" , width: 590 , message: 'message' }
|
62
|
-
]
|
63
|
-
on_load: function() { modal.autosize(); }
|
68
|
+
]
|
64
69
|
});
|
65
70
|
});
|
66
71
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<input type='hidden' name='authenticity_token' value='<%= form_authenticity_token %>' />
|
6
6
|
<p><select name='parent_id'>
|
7
7
|
<option value=''>-- Select a parent role --</option>
|
8
|
-
<% Caboose::Role.flat_tree(' - ').each do |r| %>
|
8
|
+
<% Caboose::Role.flat_tree(@site.id, ' - ').each do |r| %>
|
9
9
|
<option value='<%= r.id %>'><%= r.name %></option>
|
10
10
|
<% end %>
|
11
11
|
</select></p>
|
@@ -10,7 +10,7 @@ pic = "http://gravatar.com/avatar/#{gravatar_id}.png?s=150" #&d=/assets/caboose/
|
|
10
10
|
<p><div id='user_<%= @edituser.id %>_email' ></div></p>
|
11
11
|
<div id='roles'>
|
12
12
|
<table class='data'>
|
13
|
-
<% Caboose::Role.flat_tree.each do |r| %>
|
13
|
+
<% Caboose::Role.flat_tree(@site.id).each do |r| %>
|
14
14
|
<% is_member = Caboose::RoleMembership.where(:role_id => r.id, :user_id => @edituser.id).exists? %>
|
15
15
|
<tr><td><input type='checkbox' name='role<%= r.id %>' <%= is_member ? "checked='true'" : '' %> onclick="toggle_role(<%= @edituser.id %>, <%= r.id %>, $(this).prop('checked'));" /></td><td><%= r.name %></td></tr>
|
16
16
|
<% end %>
|
@@ -32,10 +32,6 @@ pic = "http://gravatar.com/avatar/#{gravatar_id}.png?s=150" #&d=/assets/caboose/
|
|
32
32
|
<% content_for :caboose_js do %>
|
33
33
|
<%= javascript_include_tag "caboose/model/all" %>
|
34
34
|
<script type="text/javascript">
|
35
|
-
var modal = false;
|
36
|
-
$(window).load(function() {
|
37
|
-
modal = new CabooseModal(500);
|
38
|
-
});
|
39
35
|
|
40
36
|
$(document).ready(function() {
|
41
37
|
new ModelBinder({
|
@@ -48,8 +44,7 @@ $(document).ready(function() {
|
|
48
44
|
{ name: 'last_name' , nice_name: 'Last name' , type: 'text', value: <%= raw Caboose.json(@edituser.last_name) %>, width: 280 },
|
49
45
|
{ name: 'username' , nice_name: 'Username' , type: 'text', value: <%= raw Caboose.json(@edituser.username) %>, width: 280 },
|
50
46
|
{ name: 'email' , nice_name: 'Email' , type: 'text', value: <%= raw Caboose.json(@edituser.email) %>, width: 280 }
|
51
|
-
]
|
52
|
-
on_load: function() { modal.autosize(); }
|
47
|
+
]
|
53
48
|
});
|
54
49
|
});
|
55
50
|
|
@@ -23,7 +23,7 @@
|
|
23
23
|
%>
|
24
24
|
</tr>
|
25
25
|
<% @users.each do |user| %>
|
26
|
-
<tr onclick="window.location='/admin/users/<%= user.id
|
26
|
+
<tr onclick="window.location='/admin/users/<%= user.id %>';">
|
27
27
|
<td><%= user.first_name %></td>
|
28
28
|
<td><%= user.last_name %></td>
|
29
29
|
<td><%= user.username %></td>
|
@@ -36,8 +36,6 @@
|
|
36
36
|
|
37
37
|
<% content_for :caboose_js do %>
|
38
38
|
<script type='text/javascript'>
|
39
|
-
|
40
|
-
var modal = new CabooseModal(500);
|
41
|
-
});
|
39
|
+
|
42
40
|
</script>
|
43
41
|
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= yield %>
|
data/lib/caboose/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.214
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -939,6 +939,7 @@ files:
|
|
939
939
|
- app/views/layouts/caboose/empty.html.erb
|
940
940
|
- app/views/layouts/caboose/error404.html.erb
|
941
941
|
- app/views/layouts/caboose/modal.html.erb
|
942
|
+
- app/views/layouts/caboose/no_layout.html.erb
|
942
943
|
- app/views/layouts/caboose/store/_banner.html.erb
|
943
944
|
- app/views/layouts/caboose/store/_banner2.html.erb
|
944
945
|
- app/views/layouts/caboose/store/_footer.html.erb
|