caboose-cms 0.7.62 → 0.7.63
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 +4 -4
- data/app/assets/javascripts/caboose/admin_media_index.js +2 -1
- data/app/assets/javascripts/caboose/model/bound_checkbox_multiple.js +5 -6
- data/app/controllers/caboose/login_controller.rb +3 -4
- data/app/controllers/caboose/media_controller.rb +1 -1
- data/app/controllers/caboose/register_controller.rb +3 -1
- data/app/controllers/caboose/sites_controller.rb +1 -0
- data/app/controllers/caboose/users_controller.rb +39 -23
- data/app/mailers/caboose/login_mailer.rb +2 -2
- data/app/models/caboose/page.rb +5 -1
- data/app/models/caboose/schema.rb +1 -0
- data/app/models/caboose/user.rb +19 -0
- data/app/views/caboose/login/index.html.erb +1 -1
- data/app/views/caboose/register/index.html.erb +2 -1
- data/app/views/caboose/sites/admin_edit.html.erb +9 -7
- data/app/views/caboose/users/{edit.html.erb → admin_edit.html.erb} +0 -0
- data/app/views/caboose/users/{edit_password.html.erb → admin_edit_password.html.erb} +0 -0
- data/app/views/caboose/users/{import_form.html.erb → admin_import_form.html.erb} +0 -0
- data/app/views/caboose/users/admin_index.html.erb +41 -0
- data/app/views/caboose/users/{new.html.erb → admin_new.html.erb} +4 -1
- data/app/views/caboose/users/{update_pic.html.erb → admin_update_pic.html.erb} +0 -0
- data/config/routes.rb +15 -13
- data/lib/caboose/version.rb +1 -1
- data/lib/tasks/caboose.rake +11 -1
- metadata +22 -8
- data/app/views/caboose/users/index.html.erb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be2e150242b80d282f05be0a3e8c1905cf47ee9e
|
4
|
+
data.tar.gz: e255ca6c97cb05fe1ee2d1e90726ef52dbf85cec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffde0cf22e24ae832fdb9d1b0a245df0f2ba9b1f31038a06d0704fbca7636cdb139accfeb331abce2ec8a377462d8f42dc34d433893643cd8e558db90a4cd76d
|
7
|
+
data.tar.gz: 830f370a0f3c92b32c585168e323126842538336271e7e36549256f48ac27bc29eda5a61f45f8dbd892f0a7e5934b6f4d659757cdae4febfc8e45bd971f74a25
|
@@ -63,7 +63,7 @@ MediaController.prototype = {
|
|
63
63
|
key: that.cat_id + '_${filename}', // use filename as a key
|
64
64
|
Filename: that.cat_id + '_${filename}', // adding this to keep consistency across the runtimes
|
65
65
|
acl: 'public-read',
|
66
|
-
|
66
|
+
'Content-Type': '',
|
67
67
|
AWSAccessKeyId: that.aws_access_key_id,
|
68
68
|
policy: that.policy,
|
69
69
|
signature: that.signature
|
@@ -77,6 +77,7 @@ MediaController.prototype = {
|
|
77
77
|
silverlight_xap_url: '../../js/Moxie.xap', // Silverlight settings
|
78
78
|
init: {
|
79
79
|
BeforeUpload: function(up, file) {
|
80
|
+
up.settings.multipart_params["Content-Type"] = file.type;
|
80
81
|
$.ajax({
|
81
82
|
url: '/admin/media/pre-upload',
|
82
83
|
type: 'post',
|
@@ -126,8 +126,7 @@ BoundCheckboxMultiple = BoundControl.extend({
|
|
126
126
|
|
127
127
|
var data = {};
|
128
128
|
data[this.attribute.name] = [value,(checked ? 1 : 0)];
|
129
|
-
|
130
|
-
|
129
|
+
|
131
130
|
$.ajax({
|
132
131
|
url: this.attribute.update_url,
|
133
132
|
type: 'put',
|
@@ -139,10 +138,10 @@ BoundCheckboxMultiple = BoundControl.extend({
|
|
139
138
|
for (var thing in resp.attributes[that.attribute.name])
|
140
139
|
that.attribute[thing] = resp.attributes[that.attribute.name][thing];
|
141
140
|
that.attribute.value_clean = that.attribute.value;
|
142
|
-
|
143
|
-
|
144
|
-
if (
|
145
|
-
|
141
|
+
|
142
|
+
that.binder.active_control = that;
|
143
|
+
if (that.binder.success)
|
144
|
+
that.binder.success(that);
|
146
145
|
}
|
147
146
|
else if (resp.error)
|
148
147
|
that.error(resp.error);
|
@@ -69,12 +69,11 @@ module Caboose
|
|
69
69
|
return
|
70
70
|
end
|
71
71
|
|
72
|
-
bob =
|
73
|
-
bob = Caboose::User.where(:
|
74
|
-
bob = Caboose::User.where(:email => username).first if bob.nil? && bob = Caboose::User.where(:email => username)
|
72
|
+
bob = Caboose::User.where(:site_id => @site.id, :username => username).first
|
73
|
+
bob = Caboose::User.where(:site_id => @site.id, :email => username).first if bob.nil?
|
75
74
|
|
76
75
|
if bob.nil?
|
77
|
-
resp.error = "The given username is not in our system."
|
76
|
+
resp.error = "The given email or username is not in our system."
|
78
77
|
render :json => resp
|
79
78
|
return
|
80
79
|
end
|
@@ -24,7 +24,7 @@ module Caboose
|
|
24
24
|
{ "bucket" => bucket },
|
25
25
|
{ "acl" => "public-read" },
|
26
26
|
[ "starts-with", "$key", '' ],
|
27
|
-
|
27
|
+
[ "starts-with", "$Content-Type", "" ],
|
28
28
|
[ 'starts-with', '$name', '' ],
|
29
29
|
[ 'starts-with', '$Filename', '' ],
|
30
30
|
]
|
@@ -16,8 +16,10 @@ module Caboose
|
|
16
16
|
resp = StdClass.new('error' => '', 'redirect' => '')
|
17
17
|
return_url = params[:return_url].nil? ? "/" : params[:return_url];
|
18
18
|
|
19
|
-
if
|
19
|
+
if logged_in?
|
20
20
|
resp.error = "Already logged in"
|
21
|
+
elsif !@site.allow_self_registration
|
22
|
+
resp.error = "This site doesn't allow self registration."
|
21
23
|
else
|
22
24
|
|
23
25
|
first_name = params[:first_name]
|
@@ -135,6 +135,7 @@ module Caboose
|
|
135
135
|
when 'custom_css' then site.custom_css = value
|
136
136
|
when 'custom_js' then site.custom_js = value
|
137
137
|
when 'default_layout_id' then site.default_layout_id = value
|
138
|
+
when 'allow_self_registration' then site.allow_self_registration = value
|
138
139
|
end
|
139
140
|
end
|
140
141
|
|
@@ -19,10 +19,15 @@ module Caboose
|
|
19
19
|
#===========================================================================
|
20
20
|
|
21
21
|
# GET /admin/users
|
22
|
-
def
|
22
|
+
def admin_index
|
23
|
+
return if !user_is_allowed('users', 'view')
|
24
|
+
end
|
25
|
+
|
26
|
+
# GET /admin/users/json
|
27
|
+
def admin_json
|
23
28
|
return if !user_is_allowed('users', 'view')
|
24
29
|
|
25
|
-
|
30
|
+
pager = PageBarGenerator.new(params, {
|
26
31
|
'site_id' => @site.id,
|
27
32
|
'first_name_like' => '',
|
28
33
|
'last_name_like' => '',
|
@@ -34,32 +39,42 @@ module Caboose
|
|
34
39
|
'desc' => false,
|
35
40
|
'base_url' => '/admin/users',
|
36
41
|
'use_url_params' => false
|
37
|
-
})
|
38
|
-
|
42
|
+
})
|
43
|
+
render :json => {
|
44
|
+
:pages => pager,
|
45
|
+
:models => pager.items.as_json(:include => :roles)
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
# GET /admin/users/:id/json
|
50
|
+
def admin_json_single
|
51
|
+
return if !user_is_allowed('users', 'view')
|
52
|
+
u = User.find(params[:id])
|
53
|
+
render :json => u.as_json(:include => :roles)
|
39
54
|
end
|
40
55
|
|
41
56
|
# GET /admin/users/new
|
42
|
-
def
|
57
|
+
def admin_new
|
43
58
|
return if !user_is_allowed('users', 'add')
|
44
59
|
@newuser = User.new
|
45
60
|
end
|
46
61
|
|
47
|
-
# GET /admin/users
|
48
|
-
def
|
62
|
+
# GET /admin/users/:id
|
63
|
+
def admin_edit
|
49
64
|
return if !user_is_allowed('users', 'edit')
|
50
65
|
@edituser = User.find(params[:id])
|
51
66
|
@all_roles = Role.tree(@site.id)
|
52
67
|
@roles = Role.roles_with_user(@edituser.id)
|
53
68
|
end
|
54
69
|
|
55
|
-
# GET /admin/users/
|
56
|
-
def
|
70
|
+
# GET /admin/users/:id/edit-password
|
71
|
+
def admin_edit_password
|
57
72
|
return if !user_is_allowed('users', 'edit')
|
58
73
|
@edituser = User.find(params[:id])
|
59
74
|
end
|
60
75
|
|
61
76
|
# GET /admin/users/import
|
62
|
-
def
|
77
|
+
def admin_import_form
|
63
78
|
return if !user_is_allowed('users', 'edit')
|
64
79
|
end
|
65
80
|
|
@@ -69,7 +84,7 @@ module Caboose
|
|
69
84
|
end
|
70
85
|
|
71
86
|
# POST /admin/users/import
|
72
|
-
def
|
87
|
+
def admin_import
|
73
88
|
return if !user_is_allowed('users', 'add')
|
74
89
|
|
75
90
|
resp = StdClass.new
|
@@ -133,7 +148,7 @@ module Caboose
|
|
133
148
|
end
|
134
149
|
|
135
150
|
# POST /admin/users
|
136
|
-
def
|
151
|
+
def admin_add
|
137
152
|
return if !user_is_allowed('users', 'add')
|
138
153
|
|
139
154
|
resp = StdClass.new({
|
@@ -147,8 +162,8 @@ module Caboose
|
|
147
162
|
|
148
163
|
if user.email.length == 0
|
149
164
|
resp.error = "Please enter a valid email address."
|
150
|
-
elsif User.where(:email => user.email).exists?
|
151
|
-
resp.error = "That email is already in the system."
|
165
|
+
elsif User.where(:site_id => @site.id, :email => user.email).exists?
|
166
|
+
resp.error = "That email is already in the system for this site."
|
152
167
|
else
|
153
168
|
user.save
|
154
169
|
resp.redirect = "/admin/users/#{user.id}"
|
@@ -157,8 +172,8 @@ module Caboose
|
|
157
172
|
render :json => resp
|
158
173
|
end
|
159
174
|
|
160
|
-
# PUT /admin/users
|
161
|
-
def
|
175
|
+
# PUT /admin/users/:id
|
176
|
+
def admin_update
|
162
177
|
return if !user_is_allowed('users', 'edit')
|
163
178
|
|
164
179
|
resp = StdClass.new
|
@@ -192,6 +207,7 @@ module Caboose
|
|
192
207
|
else
|
193
208
|
user.password = Digest::SHA1.hexdigest(Caboose::salt + value)
|
194
209
|
end
|
210
|
+
when 'role_ids' then user.toggle_roles(value[0], value[1])
|
195
211
|
when "roles"
|
196
212
|
user.roles = [];
|
197
213
|
value.each { |rid| user.roles << Role.find(rid) } unless value.nil?
|
@@ -203,14 +219,14 @@ module Caboose
|
|
203
219
|
render json: resp
|
204
220
|
end
|
205
221
|
|
206
|
-
# POST /admin/users/
|
207
|
-
def
|
222
|
+
# POST /admin/users/:id/update-pic
|
223
|
+
def admin_update_pic
|
208
224
|
@edituser = User.find(params[:id])
|
209
225
|
@new_value = "Testing"
|
210
226
|
end
|
211
227
|
|
212
|
-
# DELETE /admin/users
|
213
|
-
def
|
228
|
+
# DELETE /admin/users/:id
|
229
|
+
def admin_delete
|
214
230
|
return if !user_is_allowed('users', 'delete')
|
215
231
|
user = User.find(params[:id])
|
216
232
|
user.destroy
|
@@ -222,7 +238,7 @@ module Caboose
|
|
222
238
|
end
|
223
239
|
|
224
240
|
# POST /admin/users/:id/roles/:role_id
|
225
|
-
def
|
241
|
+
def admin_add_to_role
|
226
242
|
return if !user_is_allowed('users', 'edit')
|
227
243
|
if !RoleMembership.where(:user_id => params[:id], :role_id => params[:role_id]).exists?
|
228
244
|
RoleMembership.create(:user_id => params[:id], :role_id => params[:role_id])
|
@@ -231,14 +247,14 @@ module Caboose
|
|
231
247
|
end
|
232
248
|
|
233
249
|
# DELETE /admin/users/:id/roles/:role_id
|
234
|
-
def
|
250
|
+
def admin_remove_from_role
|
235
251
|
return if !user_is_allowed('users', 'edit')
|
236
252
|
RoleMembership.where(:user_id => params[:id], :role_id => params[:role_id]).destroy_all
|
237
253
|
render :json => true
|
238
254
|
end
|
239
255
|
|
240
256
|
# GET /admin/users/options
|
241
|
-
def
|
257
|
+
def admin_options
|
242
258
|
return if !user_is_allowed('users', 'view')
|
243
259
|
@users = User.where(:site_id => @site.id).reorder('last_name, first_name').all
|
244
260
|
options = @users.collect { |u| { 'value' => u.id, 'text' => "#{u.first_name} #{u.last_name} (#{u.email})"}}
|
@@ -3,12 +3,12 @@ module Caboose
|
|
3
3
|
|
4
4
|
def forgot_password_email(user)
|
5
5
|
@user = user
|
6
|
-
mail(:to => user.email, :subject => "#{
|
6
|
+
mail(:to => user.email, :subject => "#{user.site.name.capitalize} Forgot Password")
|
7
7
|
end
|
8
8
|
|
9
9
|
def locked_account(user)
|
10
10
|
@user = user
|
11
|
-
mail(:to => user.email, :subject => "#{
|
11
|
+
mail(:to => user.email, :subject => "#{user.site.name.capitalize} Locked Account")
|
12
12
|
end
|
13
13
|
|
14
14
|
end
|
data/app/models/caboose/page.rb
CHANGED
@@ -337,6 +337,10 @@ class Caboose::Page < ActiveRecord::Base
|
|
337
337
|
return true if pid == parent_id
|
338
338
|
return self.is_child(parent_id, pid)
|
339
339
|
end
|
340
|
+
|
341
|
+
def is_child_of?(parent_id)
|
342
|
+
return Caboose::Page.is_child(parent_id, self.id)
|
343
|
+
end
|
340
344
|
|
341
345
|
def linked_resources_map
|
342
346
|
resources = { js: [], css: [] }
|
@@ -431,7 +435,7 @@ class Caboose::Page < ActiveRecord::Base
|
|
431
435
|
|
432
436
|
self.block.duplicate_page_block(site_id, p.id, block_type_id)
|
433
437
|
|
434
|
-
if duplicate_children
|
438
|
+
if duplicate_children && !p.is_child_of?(self.id)
|
435
439
|
self.children.each do |p2|
|
436
440
|
p2.duplicate(site_id, p.id, duplicate_children, child_block_type_id, child_block_type_id)
|
437
441
|
end
|
@@ -681,6 +681,7 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
681
681
|
[ :use_fonts , :boolean , { :default => true }],
|
682
682
|
[ :logo , :attachment ],
|
683
683
|
[ :is_master , :boolean , { :default => false }],
|
684
|
+
[ :allow_self_registration , :boolean , { :default => false }],
|
684
685
|
[ :analytics_id , :string ],
|
685
686
|
[ :use_retargeting , :boolean , { :default => false }],
|
686
687
|
[ :date_js_updated , :datetime ],
|
data/app/models/caboose/user.rb
CHANGED
@@ -99,5 +99,24 @@ class Caboose::User < ActiveRecord::Base
|
|
99
99
|
end
|
100
100
|
return nil
|
101
101
|
end
|
102
|
+
|
103
|
+
def toggle_roles(role_id, value)
|
104
|
+
if value.to_i > 0 # Add to role
|
105
|
+
if role_id == 'all'
|
106
|
+
Caboose::RoleMembership.where(:user_id => self.id).destroy_all
|
107
|
+
Caboose::Role.where(:site_id => self.site_id).reorder(:name).all.each{ |r| RoleMembership.create(:user_id => self.id, :role_id => r.id) }
|
108
|
+
else
|
109
|
+
if !Caboose::RoleMembership.where(:user_id => self.id, :role_id => role_id.to_i).exists?
|
110
|
+
Caboose::RoleMembership.create( :user_id => self.id, :role_id => role_id.to_i)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
else # Remove from role
|
114
|
+
if role_id == 'all'
|
115
|
+
Caboose::RoleMembership.where(:user_id => self.id).destroy_all
|
116
|
+
else
|
117
|
+
Caboose::RoleMembership.where(:user_id => self.id, :role_id => role_id.to_i).destroy_all
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
102
121
|
|
103
122
|
end
|
@@ -18,7 +18,7 @@
|
|
18
18
|
</label>
|
19
19
|
|
20
20
|
<ul id="login-options">
|
21
|
-
|
21
|
+
<% if @site.allow_self_registration %><li><a href="/register?return_url=<%= @return_url %>" class='register'>Need to register?</a></li><% end %>
|
22
22
|
<li><a href="/login/forgot-password?return_url=<%= @return_url %>" class='forgot'>Forgot your password?</a></li>
|
23
23
|
</ul>
|
24
24
|
<div style='clear: both;' id="message"></div>
|
@@ -1,9 +1,10 @@
|
|
1
1
|
|
2
|
+
<h1>Register</h1>
|
3
|
+
|
2
4
|
<form action='/register' method='post' id='register_form'>
|
3
5
|
<p class='other_options'>
|
4
6
|
<a href='/login?return_url=<%= @return_url %>'>Already a member?</a>
|
5
7
|
</p>
|
6
|
-
<h1>Register</h1>
|
7
8
|
<input type='hidden' name='return_url' value='<%= @return_url %>' />
|
8
9
|
<input type='text' name='first_name' id='first_name' placeholder='First name' />
|
9
10
|
<input type='text' name='last_name' id='last_name' placeholder='Last name' />
|
@@ -13,6 +13,7 @@ user_ids = [] if user_ids.nil?
|
|
13
13
|
<p><div id='site_<%= @site.id %>_under_construction_html' ></div></p>
|
14
14
|
<p><div id='site_<%= @site.id %>_use_store' ></div></p>
|
15
15
|
<p><div id='site_<%= @site.id %>_use_fonts' ></div></p>
|
16
|
+
<p><div id='site_<%= @site.id %>_allow_self_registration' ></div></p>
|
16
17
|
<p><div id='site_<%= @site.id %>_default_layout_id' ></div></p>
|
17
18
|
|
18
19
|
<h2>Domains</h2>
|
@@ -71,13 +72,14 @@ $(document).ready(function() {
|
|
71
72
|
update_url: '/admin/sites/<%= @site.id %>',
|
72
73
|
authenticity_token: '<%= form_authenticity_token %>',
|
73
74
|
attributes: [
|
74
|
-
{ name: 'logo' , nice_name: 'Logo' , type: 'image' , value: <%= raw Caboose.json(@site.logo ? @site.logo.url(:thumb) : '')
|
75
|
-
{ name: 'name' , nice_name: 'Name' , type: 'text' , value: <%= raw Caboose.json(@site.name)
|
76
|
-
{ name: 'description' , nice_name: 'Description' , type: 'textarea' , value: <%= raw Caboose.json(@site.description)
|
77
|
-
{ name: 'under_construction_html' , nice_name: 'Under Construction HTML' , type: 'textarea' , value: <%= raw Caboose.json(@site.under_construction_html)
|
78
|
-
{ name: 'use_store' , nice_name: 'Enable Store' , type: 'checkbox' , value: <%= raw Caboose.json(@site.use_store
|
79
|
-
{ name: 'use_fonts' , nice_name: 'Enable Fonts' , type: 'checkbox' , value: <%= raw Caboose.json(@site.use_fonts
|
80
|
-
{ name: '
|
75
|
+
{ name: 'logo' , nice_name: 'Logo' , type: 'image' , value: <%= raw Caboose.json(@site.logo ? @site.logo.url(:thumb) : '') %>, width: 400, update_url: '/admin/sites/<%= @site.id %>/logo' },
|
76
|
+
{ name: 'name' , nice_name: 'Name' , type: 'text' , value: <%= raw Caboose.json(@site.name) %>, width: 400 },
|
77
|
+
{ name: 'description' , nice_name: 'Description' , type: 'textarea' , value: <%= raw Caboose.json(@site.description) %>, width: 600, height: 75 },
|
78
|
+
{ name: 'under_construction_html' , nice_name: 'Under Construction HTML' , type: 'textarea' , value: <%= raw Caboose.json(@site.under_construction_html) %>, width: 600, height: 75 },
|
79
|
+
{ name: 'use_store' , nice_name: 'Enable Store' , type: 'checkbox' , value: <%= raw Caboose.json(@site.use_store ? true : false) %>, width: 400 },
|
80
|
+
{ name: 'use_fonts' , nice_name: 'Enable Fonts' , type: 'checkbox' , value: <%= raw Caboose.json(@site.use_fonts ? true : false) %>, width: 400 },
|
81
|
+
{ name: 'allow_self_registration' , nice_name: 'Allow Self Registration' , type: 'checkbox' , value: <%= raw Caboose.json(@site.allow_self_registration ? true : false) %>, width: 400 },
|
82
|
+
{ name: 'default_layout_id' , nice_name: 'Default Layout' , type: 'select' , value: <%= raw Caboose.json(@site.default_layout_id) %>, width: 600, options_url: "/admin/sites/<%= @site.id %>/default-layout-options" }
|
81
83
|
]
|
82
84
|
});
|
83
85
|
});
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
<h1>Users</h1>
|
3
|
+
<div id='users'></div>
|
4
|
+
|
5
|
+
<% content_for :caboose_js do %>
|
6
|
+
<%= javascript_include_tag 'caboose/model/all' %>
|
7
|
+
<script type='text/javascript'>
|
8
|
+
|
9
|
+
$(document).ready(function() {
|
10
|
+
var that = this;
|
11
|
+
var table = new IndexTable({
|
12
|
+
form_authenticity_token: '<%= form_authenticity_token %>',
|
13
|
+
container: 'users',
|
14
|
+
base_url: '/admin/users',
|
15
|
+
allow_bulk_edit: true,
|
16
|
+
allow_bulk_delete: true,
|
17
|
+
allow_duplicate: false,
|
18
|
+
allow_advanced_edit: true,
|
19
|
+
fields: [
|
20
|
+
{ show: true , bulk_edit: true , name: 'first_name' , nice_name: 'First name' , sort: 'first_name' , type: 'text' , value: function(u) { return u.first_name }, width: 100 },
|
21
|
+
{ show: true , bulk_edit: true , name: 'last_name' , nice_name: 'Last name' , sort: 'last_name' , type: 'text' , value: function(u) { return u.last_name }, width: 100 },
|
22
|
+
{ show: true , bulk_edit: true , name: 'username' , nice_name: 'Username' , sort: 'username' , type: 'text' , value: function(u) { return u.username }, width: 100 },
|
23
|
+
{ show: true , bulk_edit: true , name: 'email' , nice_name: 'Email' , sort: 'email' , type: 'text' , value: function(u) { return u.email }, width: 100 },
|
24
|
+
{ show: true , bulk_edit: true , name: 'locked' , nice_name: 'Locked' , sort: 'locked' , type: 'checkbox' , value: function(u) { return u.locked }, width: 30 },
|
25
|
+
{ show: true , bulk_edit: true , name: 'role_ids' , nice_name: 'Roles' , sort: 'email' , type: 'checkbox-multiple' , value: function(u) { return get_role_ids(u) }, text: function(u) { return get_role_names(u); }, width: 250, options_url: '/admin/roles/options' }
|
26
|
+
],
|
27
|
+
new_model_text: 'New User',
|
28
|
+
no_models_text: 'There are no users right now.',
|
29
|
+
new_model_fields: [
|
30
|
+
{ name: 'email', nice_name: 'Email', type: 'text', width: 400 }
|
31
|
+
],
|
32
|
+
bulk_import_fields: ['email'],
|
33
|
+
bulk_import_url: '/admin/users/bulk'
|
34
|
+
});
|
35
|
+
});
|
36
|
+
|
37
|
+
function get_role_ids(u) { return $(u.roles).map(function(i, r) { return r.id }).get(); }
|
38
|
+
function get_role_names(u) { return $(u.roles).map(function(i, r) { return r.name }).get(); }
|
39
|
+
|
40
|
+
</script>
|
41
|
+
<% end %>
|
@@ -5,7 +5,10 @@
|
|
5
5
|
<input type='hidden' name='authenticity_token' value='<%= form_authenticity_token %>' />
|
6
6
|
<p><input type='text' name='email' id='email' placeholder='Email' value='' style='width: 400px;' /></p>
|
7
7
|
<div id='message'></div>
|
8
|
-
<p
|
8
|
+
<p>
|
9
|
+
<input type='button' value='< Back' onclick="window.location='/admin/users';" />
|
10
|
+
<input type='submit' value='Add User' />
|
11
|
+
</p>
|
9
12
|
</form>
|
10
13
|
|
11
14
|
<% content_for :caboose_js do %>
|
File without changes
|
data/config/routes.rb
CHANGED
@@ -174,21 +174,23 @@ Caboose::Engine.routes.draw do
|
|
174
174
|
# Users
|
175
175
|
#=============================================================================
|
176
176
|
|
177
|
-
get "/admin/users" => "users#
|
178
|
-
get "/admin/users/
|
179
|
-
get "/admin/users/
|
180
|
-
get "/admin/users/
|
181
|
-
|
177
|
+
get "/admin/users" => "users#admin_index"
|
178
|
+
get "/admin/users/json" => "users#admin_json"
|
179
|
+
get "/admin/users/options" => "users#admin_options"
|
180
|
+
get "/admin/users/new" => "users#admin_new"
|
181
|
+
get "/admin/users/import" => "users#admin_import_form"
|
182
|
+
post "/admin/users/import" => "users#admin_import"
|
183
|
+
get "/admin/users/:id/json" => "users#admin_json_single"
|
182
184
|
get "/admin/users/:id/su/:token" => "users#admin_su_token"
|
183
185
|
get "/admin/users/:id/su" => "users#admin_su"
|
184
|
-
get "/admin/users/:id/edit-password" => "users#
|
185
|
-
get "/admin/users/:id" => "users#
|
186
|
-
put "/admin/users/:id" => "users#
|
187
|
-
post "/admin/users" => "users#
|
188
|
-
delete "/admin/users/:id" => "users#
|
189
|
-
|
190
|
-
post "/admin/users/:id/roles/:role_id" => "users#
|
191
|
-
delete "/admin/users/:id/roles/:role_id" => "users#
|
186
|
+
get "/admin/users/:id/edit-password" => "users#admin_edit_password"
|
187
|
+
get "/admin/users/:id" => "users#admin_edit"
|
188
|
+
put "/admin/users/:id" => "users#admin_update"
|
189
|
+
post "/admin/users" => "users#admin_add"
|
190
|
+
delete "/admin/users/:id" => "users#admin_delete"
|
191
|
+
|
192
|
+
post "/admin/users/:id/roles/:role_id" => "users#admin_add_to_role"
|
193
|
+
delete "/admin/users/:id/roles/:role_id" => "users#admin_remove_from_role"
|
192
194
|
|
193
195
|
#=============================================================================
|
194
196
|
# Roles
|
data/lib/caboose/version.rb
CHANGED
data/lib/tasks/caboose.rake
CHANGED
@@ -2,7 +2,17 @@ require "caboose/version"
|
|
2
2
|
require 'aws-sdk'
|
3
3
|
|
4
4
|
namespace :caboose do
|
5
|
-
|
5
|
+
|
6
|
+
desc "Update super admin password"
|
7
|
+
task :update_superadmin_password => :environment do
|
8
|
+
sa = Caboose::User.where(:username => 'superadmin').first
|
9
|
+
print "Enter a new password: "
|
10
|
+
sa.password = STDIN.noecho(&:gets).chomp
|
11
|
+
puts "\n\nThe password has been updated.\n\n"
|
12
|
+
sa.password = Digest::SHA1.hexdigest(Caboose::salt + sa.password)
|
13
|
+
sa.save
|
14
|
+
end
|
15
|
+
|
6
16
|
desc "Show all comment routes in controllers"
|
7
17
|
task :routes, [:arg1] => :environment do |t, args|
|
8
18
|
puts Caboose::CommentRoutes.controller_routes(args ? args.first : nil)
|
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.7.
|
4
|
+
version: 0.7.63
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -346,6 +346,20 @@ dependencies:
|
|
346
346
|
- - ">="
|
347
347
|
- !ruby/object:Gem::Version
|
348
348
|
version: '0'
|
349
|
+
- !ruby/object:Gem::Dependency
|
350
|
+
name: highline
|
351
|
+
requirement: !ruby/object:Gem::Requirement
|
352
|
+
requirements:
|
353
|
+
- - ">="
|
354
|
+
- !ruby/object:Gem::Version
|
355
|
+
version: '0'
|
356
|
+
type: :runtime
|
357
|
+
prerelease: false
|
358
|
+
version_requirements: !ruby/object:Gem::Requirement
|
359
|
+
requirements:
|
360
|
+
- - ">="
|
361
|
+
- !ruby/object:Gem::Version
|
362
|
+
version: '0'
|
349
363
|
- !ruby/object:Gem::Dependency
|
350
364
|
name: rspec-rails
|
351
365
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1126,12 +1140,12 @@ files:
|
|
1126
1140
|
- app/views/caboose/store/admin_edit_tax.html.erb
|
1127
1141
|
- app/views/caboose/users/_admin_footer.html.erb
|
1128
1142
|
- app/views/caboose/users/_admin_header.html.erb
|
1129
|
-
- app/views/caboose/users/
|
1130
|
-
- app/views/caboose/users/
|
1131
|
-
- app/views/caboose/users/
|
1132
|
-
- app/views/caboose/users/
|
1133
|
-
- app/views/caboose/users/
|
1134
|
-
- app/views/caboose/users/
|
1143
|
+
- app/views/caboose/users/admin_edit.html.erb
|
1144
|
+
- app/views/caboose/users/admin_edit_password.html.erb
|
1145
|
+
- app/views/caboose/users/admin_import_form.html.erb
|
1146
|
+
- app/views/caboose/users/admin_index.html.erb
|
1147
|
+
- app/views/caboose/users/admin_new.html.erb
|
1148
|
+
- app/views/caboose/users/admin_update_pic.html.erb
|
1135
1149
|
- app/views/caboose/variants/admin_edit.html.erb
|
1136
1150
|
- app/views/caboose/variants/admin_edit_option1_media.html.erb
|
1137
1151
|
- app/views/caboose/variants/admin_edit_option2_media.html.erb
|
@@ -1,41 +0,0 @@
|
|
1
|
-
<h1>Users</h1>
|
2
|
-
|
3
|
-
<form action='/admin/users' method='get' class='search_form'>
|
4
|
-
<input type='text' name='first_name_like' value="<%= @gen.params['first_name_like'] %>" placeholder='First name' />
|
5
|
-
<input type='text' name='last_name_like' value="<%= @gen.params['last_name_like'] %>" placeholder='Last name' />
|
6
|
-
<input type='text' name='email_like' value="<%= @gen.params['email_like'] %>" placeholder='Email' />
|
7
|
-
<input type='submit' value='Search' />
|
8
|
-
</form>
|
9
|
-
|
10
|
-
<p>
|
11
|
-
<a href='/admin/users/new'>New User</a> |
|
12
|
-
<a href='/admin/users/import'>Import CSV</a>
|
13
|
-
</p>
|
14
|
-
|
15
|
-
<table class='data' id='users_table'>
|
16
|
-
<tr>
|
17
|
-
<%= raw @gen.sortable_table_headings({
|
18
|
-
'first_name' => 'First Name',
|
19
|
-
'last_name, first_name' => 'Last Name',
|
20
|
-
'username' => 'Username',
|
21
|
-
'email' => 'Email'
|
22
|
-
})
|
23
|
-
%>
|
24
|
-
</tr>
|
25
|
-
<% @users.each do |user| %>
|
26
|
-
<tr onclick="window.location='/admin/users/<%= user.id %>';">
|
27
|
-
<td><%= user.first_name %></td>
|
28
|
-
<td><%= user.last_name %></td>
|
29
|
-
<td><%= user.username %></td>
|
30
|
-
<td><%= user.email %></td>
|
31
|
-
</tr>
|
32
|
-
<% end %>
|
33
|
-
</table>
|
34
|
-
|
35
|
-
<p><%= raw @gen.generate %></p>
|
36
|
-
|
37
|
-
<% content_for :caboose_js do %>
|
38
|
-
<script type='text/javascript'>
|
39
|
-
|
40
|
-
</script>
|
41
|
-
<% end %>
|