caboose-cms 0.0.7 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/images/caboose/caboose_nav.png +0 -0
- data/app/assets/javascripts/caboose/admin.js +37 -0
- data/app/assets/javascripts/caboose/application.js +2 -1
- data/app/assets/javascripts/caboose/model.form.page.js +30 -0
- data/app/assets/javascripts/caboose/station.js +223 -0
- data/app/assets/stylesheets/caboose/admin.css +57 -0
- data/app/assets/stylesheets/caboose/caboose.css +146 -16
- data/app/assets/stylesheets/caboose/tinymce.css +25 -0
- data/app/controllers/caboose/pages_controller.rb +43 -19
- data/app/controllers/caboose/permissions_controller.rb +91 -73
- data/app/controllers/caboose/roles_controller.rb +49 -37
- data/app/controllers/caboose/settings_controller.rb +100 -0
- data/app/controllers/caboose/station_controller.rb +13 -0
- data/app/controllers/caboose/users_controller.rb +51 -44
- data/app/models/caboose/caboose_plugin.rb +2 -6
- data/app/models/caboose/page.rb +3 -3
- data/app/models/caboose/page_bar_generator.rb +37 -28
- data/app/models/caboose/page_plugin.rb +43 -0
- data/app/models/caboose/permission_plugin.rb +27 -0
- data/app/models/caboose/role.rb +19 -1
- data/app/models/caboose/role_plugin.rb +27 -0
- data/app/models/caboose/setting.rb +5 -0
- data/app/models/caboose/settings_plugin.rb +27 -0
- data/app/models/caboose/user.rb +1 -2
- data/app/models/caboose/user_plugin.rb +28 -0
- data/app/views/caboose/pages/edit.html.erb +7 -27
- data/app/views/caboose/pages/edit_settings.html.erb +38 -0
- data/app/views/caboose/pages/sitemap.html.erb +12 -0
- data/app/views/caboose/permissions/edit.html.erb +21 -4
- data/app/views/caboose/permissions/index.html.erb +29 -21
- data/app/views/caboose/permissions/new.html.erb +22 -2
- data/app/views/caboose/roles/edit.html.erb +40 -27
- data/app/views/caboose/roles/index.html.erb +3 -5
- data/app/views/caboose/roles/new.html.erb +30 -11
- data/app/views/caboose/settings/edit.html.erb +23 -0
- data/app/views/caboose/settings/index.html.erb +33 -0
- data/app/views/caboose/settings/new.html.erb +25 -0
- data/app/views/caboose/users/edit.html.erb +11 -14
- data/app/views/caboose/users/index.html.erb +2 -4
- data/app/views/caboose/users/new.html.erb +2 -0
- data/app/views/caboose/users/update_pic.html.erb +1 -1
- data/app/views/layouts/caboose/_station.html.erb +43 -14
- data/app/views/layouts/caboose/{caboose.html.erb → admin.html.erb} +2 -2
- data/config/routes.rb +16 -5
- data/lib/caboose.rb +1 -1
- data/lib/caboose/engine.rb +15 -6
- data/lib/caboose/version.rb +1 -1
- data/lib/sample_files/tinymce.yml +22 -0
- data/lib/tasks/caboose.rake +21 -1
- metadata +40 -12
- data/app/assets/javascripts/caboose/caboose.js +0 -28
- data/app/assets/javascripts/caboose/permissions.js +0 -0
- data/app/assets/javascripts/caboose/roles.js +0 -35
- data/app/assets/javascripts/caboose/users.js +0 -38
- data/app/views/caboose/permissions/show.html.erb +0 -15
- data/app/views/caboose/roles/show.html.erb +0 -20
- data/app/views/caboose/users/update_resume.html.erb +0 -14
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
module Caboose
|
3
|
+
class StationController < ApplicationController
|
4
|
+
|
5
|
+
# PUT /admin/station
|
6
|
+
def index
|
7
|
+
session[:caboose_station_state] = params[:state]
|
8
|
+
session[:caboose_station_open_tabs] = params[:open_tabs]
|
9
|
+
session[:caboose_station_return_url] = params[:return_url]
|
10
|
+
render :json => true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,8 +1,13 @@
|
|
1
1
|
|
2
2
|
module Caboose
|
3
3
|
class UsersController < ApplicationController
|
4
|
+
layout 'caboose/admin'
|
4
5
|
|
5
|
-
|
6
|
+
def before_action
|
7
|
+
@page = Page.page_with_uri('/admin')
|
8
|
+
end
|
9
|
+
|
10
|
+
# GET /admin/users
|
6
11
|
def index
|
7
12
|
return if !user_is_allowed('users', 'view')
|
8
13
|
|
@@ -12,32 +17,29 @@ module Caboose
|
|
12
17
|
'username' => '',
|
13
18
|
'email' => '',
|
14
19
|
},{
|
20
|
+
'model' => 'Caboose::User',
|
15
21
|
'sort' => 'last_name, first_name',
|
16
22
|
'desc' => false,
|
17
|
-
'base_url' => '/users'
|
23
|
+
'base_url' => '/admin/users'
|
18
24
|
})
|
19
|
-
|
20
|
-
if (@gen.options['page'] == 0)
|
21
|
-
@gen.options['item_count'] = User.where(@gen.where).count
|
22
|
-
end
|
23
|
-
@users = User.where(@gen.where).limit(@gen.limit).offset(@gen.offset).reorder(@gen.reorder).all
|
25
|
+
@users = @gen.items
|
24
26
|
end
|
25
27
|
|
26
|
-
# GET /users/new
|
28
|
+
# GET /admin/users/new
|
27
29
|
def new
|
28
30
|
return if !user_is_allowed('users', 'add')
|
29
|
-
@
|
31
|
+
@newuser = User.new
|
30
32
|
end
|
31
33
|
|
32
|
-
# GET /users/1/edit
|
34
|
+
# GET /admin/users/1/edit
|
33
35
|
def edit
|
34
36
|
return if !user_is_allowed('users', 'edit')
|
35
|
-
@
|
37
|
+
@edituser = User.find(params[:id])
|
36
38
|
@all_roles = Role.tree
|
37
|
-
@roles = Role.roles_with_user(@
|
39
|
+
@roles = Role.roles_with_user(@edituser.id)
|
38
40
|
end
|
39
41
|
|
40
|
-
# POST /users
|
42
|
+
# POST /admin/users
|
41
43
|
def create
|
42
44
|
return if !user_is_allowed('users', 'add')
|
43
45
|
|
@@ -53,65 +55,70 @@ module Caboose
|
|
53
55
|
resp.error = "Your username is required."
|
54
56
|
elsif
|
55
57
|
user.save
|
56
|
-
resp.redirect = "/users/#{user.id}/edit"
|
58
|
+
resp.redirect = "/admin/users/#{user.id}/edit"
|
57
59
|
end
|
58
60
|
render json: resp
|
59
61
|
end
|
60
62
|
|
61
|
-
# PUT /users/1
|
63
|
+
# PUT /admin/users/1
|
62
64
|
def update
|
63
65
|
return if !user_is_allowed('users', 'edit')
|
64
|
-
|
66
|
+
|
65
67
|
resp = StdClass.new
|
66
68
|
user = User.find(params[:id])
|
67
|
-
name = params[:name]
|
68
|
-
value = params[:value]
|
69
69
|
|
70
70
|
save = true
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
71
|
+
params.each do |name,value|
|
72
|
+
case name
|
73
|
+
when "first_name", "last_name", "username", "email"
|
74
|
+
user[name.to_sym] = value
|
75
|
+
when "password"
|
76
|
+
confirm = params[:confirm]
|
77
|
+
if (value != confirm)
|
78
|
+
resp.error = "Passwords do not match.";
|
79
|
+
save = false
|
80
|
+
elsif (value.length < 8)
|
81
|
+
resp.error = "Passwords must be at least 8 characters.";
|
82
|
+
save = false
|
83
|
+
else
|
84
|
+
user.password = Digest::SHA1.hexdigest(Caboose::salt + value)
|
85
|
+
end
|
86
|
+
when "roles"
|
87
|
+
user.roles = [];
|
88
|
+
value.each { |rid| user.roles << Role.find(rid) } unless value.nil?
|
89
|
+
resp.attribute = { 'text' => user.roles.collect{ |r| r.name }.join(', ') }
|
90
|
+
end
|
89
91
|
end
|
90
92
|
|
91
93
|
resp.success = save && user.save
|
92
94
|
render json: resp
|
93
95
|
end
|
94
96
|
|
97
|
+
# POST /admin/users/1/update-pic
|
95
98
|
def update_pic
|
96
|
-
@
|
97
|
-
@new_value = "Testing"
|
98
|
-
end
|
99
|
-
|
100
|
-
def update_resume
|
101
|
-
@user = User.find(params[:id])
|
99
|
+
@edituser = User.find(params[:id])
|
102
100
|
@new_value = "Testing"
|
103
101
|
end
|
104
102
|
|
105
|
-
# DELETE /users/1
|
103
|
+
# DELETE /admin/users/1
|
106
104
|
def destroy
|
107
105
|
return if !user_is_allowed('users', 'delete')
|
108
106
|
user = User.find(params[:id])
|
109
107
|
user.destroy
|
110
108
|
|
111
109
|
resp = StdClass.new({
|
112
|
-
'redirect' => '/users'
|
110
|
+
'redirect' => '/admin/users'
|
113
111
|
})
|
114
112
|
render json: resp
|
115
113
|
end
|
114
|
+
|
115
|
+
# GET /admin/users/options
|
116
|
+
def options
|
117
|
+
return if !user_is_allowed('users', 'view')
|
118
|
+
@users = User.reorder('last_name, first_name').all
|
119
|
+
options = @users.collect { |u| { 'value' => u.id, 'text' => "#{u.first_name} #{u.last_name}"}}
|
120
|
+
render json: options
|
121
|
+
end
|
122
|
+
|
116
123
|
end
|
117
124
|
end
|
@@ -1,14 +1,10 @@
|
|
1
1
|
class Caboose::CaboosePlugin
|
2
2
|
|
3
|
-
def self.
|
3
|
+
def self.page_content(str)
|
4
4
|
return str
|
5
5
|
end
|
6
6
|
|
7
|
-
def self.
|
8
|
-
return arr
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.admin_subnav_hook(arr)
|
7
|
+
def self.admin_nav(arr)
|
12
8
|
return arr
|
13
9
|
end
|
14
10
|
|
data/app/models/caboose/page.rb
CHANGED
@@ -256,12 +256,12 @@ class Caboose::Page < ActiveRecord::Base
|
|
256
256
|
parent = self.find_with_fields(page.parent_id, [:title, :menu_title, :custom_sort_children])
|
257
257
|
return block if parent.nil? # If we happen to be at the top page
|
258
258
|
|
259
|
-
block.title = parent.menu_title.length > 0 ? parent.menu_title : parent.title
|
259
|
+
block.title = !parent.menu_title.nil? && parent.menu_title.length > 0 ? parent.menu_title : parent.title
|
260
260
|
block.title_id = parent.id
|
261
261
|
|
262
|
-
pages = self.select(
|
262
|
+
pages = self.select([
|
263
263
|
:id, :title, :menu_title, :alias, :slug, :uri, :redirect_url, :sort_order
|
264
|
-
).where(:parent_id => page.parent_id, :hide => 0)
|
264
|
+
]).where(:parent_id => page.parent_id, :hide => 0)
|
265
265
|
if (parent.custom_sort_children)
|
266
266
|
pages.sort! {|x,y| x.sort_order <=> y.sort_order }
|
267
267
|
else
|
@@ -22,10 +22,11 @@ module Caboose
|
|
22
22
|
# base_url, page, itemCount, itemsPerPage
|
23
23
|
@params = {}
|
24
24
|
@options = {
|
25
|
+
'model' => '',
|
25
26
|
'sort' => '',
|
26
27
|
'desc' => false,
|
27
28
|
'base_url' => '',
|
28
|
-
'page' =>
|
29
|
+
'page' => 1,
|
29
30
|
'item_count' => 0,
|
30
31
|
'items_per_page' => 10
|
31
32
|
}
|
@@ -33,6 +34,7 @@ module Caboose
|
|
33
34
|
options.each { |key, val| @options[key] = val }
|
34
35
|
@params.each { |key, val| @params[key] = post_get[key].nil? ? val : post_get[key] }
|
35
36
|
@options.each { |key, val| @options[key] = post_get[key].nil? ? val : post_get[key] }
|
37
|
+
@options['item_count'] = @options['model'].constantize.where(where).count
|
36
38
|
|
37
39
|
end
|
38
40
|
|
@@ -49,6 +51,10 @@ module Caboose
|
|
49
51
|
return false if val == ""
|
50
52
|
return true
|
51
53
|
end
|
54
|
+
|
55
|
+
def items
|
56
|
+
return @options['model'].constantize.where(where).limit(limit).offset(offset).reorder(reorder).all
|
57
|
+
end
|
52
58
|
|
53
59
|
def generate
|
54
60
|
|
@@ -58,53 +64,56 @@ module Caboose
|
|
58
64
|
|
59
65
|
# Set default parameter values if not present
|
60
66
|
@options['items_per_page'] = 10 if @options["items_per_page"].nil?
|
61
|
-
@options['page'] =
|
67
|
+
@options['page'] = 1 if @options["page"].nil?
|
62
68
|
|
63
69
|
# Variables to make the search form work
|
64
70
|
vars = get_vars()
|
65
|
-
page = @options["page"]
|
71
|
+
page = @options["page"].to_i
|
72
|
+
|
73
|
+
Caboose.log(@options)
|
66
74
|
|
67
75
|
# Max links to show (must be odd)
|
68
|
-
total_links =
|
69
|
-
prev_page = page - 1
|
76
|
+
total_links = 5
|
77
|
+
prev_page = page - 1
|
70
78
|
next_page = page + 1
|
71
79
|
total_pages = (@options['item_count'].to_f / @options['items_per_page'].to_f).ceil
|
72
80
|
|
73
81
|
if (total_pages < total_links)
|
74
|
-
start =
|
82
|
+
start = 1
|
75
83
|
stop = total_pages
|
76
84
|
else
|
77
85
|
start = page - (total_links/2).floor
|
78
|
-
start =
|
79
|
-
stop = start + total_links
|
86
|
+
start = 1 if start < 1
|
87
|
+
stop = start + total_links - 1
|
80
88
|
|
81
89
|
if (stop > total_pages)
|
82
90
|
stop = total_pages
|
83
91
|
start = stop - total_links
|
84
|
-
start =
|
92
|
+
start = 1 if start < 1
|
85
93
|
end
|
86
94
|
end
|
87
95
|
|
88
96
|
base_url = @params['base_url']
|
89
97
|
str = ''
|
90
|
-
str << "<p>Results
|
91
|
-
str << "<div class='page_links'>\n"
|
92
|
-
if (page > 0)
|
93
|
-
str << "<a href='#{base_url}?#{vars}&page=#{prev_page}'>Previous</a>"
|
94
|
-
end
|
95
|
-
|
96
|
-
for i in start..(stop-1)
|
97
|
-
if (page != i)
|
98
|
-
str << "<a href='#{base_url}?#{vars}&page=#{i}'>" + (i+1).to_s + "</a>"
|
99
|
-
else
|
100
|
-
str << "<span class='current_page'>" + (i+1).to_s + "</span>"
|
101
|
-
end
|
102
|
-
end
|
98
|
+
str << "<p>Results: showing page #{page} of #{total_pages}</p>\n"
|
103
99
|
|
104
|
-
if (
|
105
|
-
|
106
|
-
|
107
|
-
|
100
|
+
if (total_pages > 1)
|
101
|
+
str << "<div class='page_links'>\n"
|
102
|
+
if (page > 1)
|
103
|
+
str << "<a href='#{base_url}?#{vars}&page=#{prev_page}'>Previous</a>"
|
104
|
+
end
|
105
|
+
for i in start..stop
|
106
|
+
if (page != i)
|
107
|
+
str << "<a href='#{base_url}?#{vars}&page=#{i}'>#{i}</a>"
|
108
|
+
else
|
109
|
+
str << "<span class='current_page'>#{i}</span>"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
if (page < total_pages)
|
113
|
+
str << "<a href='#{base_url}?#{vars}&page=#{next_page}'>Next</a>"
|
114
|
+
end
|
115
|
+
str << "</div>\n"
|
116
|
+
end
|
108
117
|
|
109
118
|
return str
|
110
119
|
end
|
@@ -140,11 +149,11 @@ module Caboose
|
|
140
149
|
end
|
141
150
|
|
142
151
|
def limit
|
143
|
-
return @options['items_per_page']
|
152
|
+
return @options['items_per_page'].to_i
|
144
153
|
end
|
145
154
|
|
146
155
|
def offset
|
147
|
-
return @options['page'] * @options['items_per_page']
|
156
|
+
return (@options['page'].to_i - 1) * @options['items_per_page'].to_i
|
148
157
|
end
|
149
158
|
|
150
159
|
def reorder
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Caboose::PagePlugin < Caboose::CaboosePlugin
|
2
|
+
|
3
|
+
def self.admin_nav(nav, user, page)
|
4
|
+
return nav if user.nil? || !user.is_allowed('pages', 'view')
|
5
|
+
|
6
|
+
item = {
|
7
|
+
'id' => 'pages',
|
8
|
+
'text' => 'Pages',
|
9
|
+
'children' => []
|
10
|
+
#'show_children_default' => true
|
11
|
+
}
|
12
|
+
|
13
|
+
is_admin = user.is_allowed('all', 'all')
|
14
|
+
actions = Caboose::Page.permissible_actions(user.id, page.id)
|
15
|
+
if (actions.include?('edit') || is_admin)
|
16
|
+
item['children'] << { 'href' => "/pages/#{page.id}/sitemap" , 'text' => 'Site Map This Page' }
|
17
|
+
item['children'] << { 'href' => "/pages/#{page.id}/edit" , 'text' => 'Edit Page Content' }
|
18
|
+
item['children'] << { 'href' => "/pages/#{page.id}/edit-settings" , 'text' => 'Edit Page Settings' }
|
19
|
+
|
20
|
+
#uru = session['use_redirect_urls'].nil? ? true : session['use_redirect_urls']
|
21
|
+
#item['children'] << { 'id' => 'use_redirect_urls', 'href' => '#', 'text' => '' + (uru ? 'Disable' : 'Enable') + ' Redirect Urls' }
|
22
|
+
end
|
23
|
+
if (user.is_allowed('pages', 'add') || is_admin)
|
24
|
+
item['children'] << { 'href' => "/pages/new?parent_id=#{page.id}" , 'text' => 'New Page' }
|
25
|
+
end
|
26
|
+
nav << item
|
27
|
+
return nav
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.admin_js
|
31
|
+
return "
|
32
|
+
$('#use_redirect_urls').click(function() {
|
33
|
+
uru = $('#use_redirect_urls');
|
34
|
+
val = (uru.html() == 'Enable' ? 1 : 0);
|
35
|
+
$.ajax({
|
36
|
+
url: '/admin/settings/toggle-redirect-urls',
|
37
|
+
data: 'val='+val,
|
38
|
+
succes: function(resp) { uri.html(val == 1 ? 'Disable' : 'Enable'); }
|
39
|
+
});
|
40
|
+
});"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Caboose::PermissionPlugin < Caboose::CaboosePlugin
|
2
|
+
|
3
|
+
def self.admin_nav(nav, user, page)
|
4
|
+
return nav if user.nil? || !user.is_allowed('permissions', 'view')
|
5
|
+
|
6
|
+
item = {
|
7
|
+
'id' => 'permissions',
|
8
|
+
'text' => 'Permissions',
|
9
|
+
'children' => []
|
10
|
+
}
|
11
|
+
if (user.is_allowed('permissions', 'view'))
|
12
|
+
item['children'] << {
|
13
|
+
'href' => '/admin/permissions',
|
14
|
+
'text' => 'View All Permissions'
|
15
|
+
}
|
16
|
+
end
|
17
|
+
if (user.is_allowed('permissions', 'add'))
|
18
|
+
item['children'] << {
|
19
|
+
'href' => '/admin/permissions/new',
|
20
|
+
'text' => 'New Permission'
|
21
|
+
}
|
22
|
+
end
|
23
|
+
nav << item
|
24
|
+
return nav
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/app/models/caboose/role.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
class Caboose::Role < ActiveRecord::Base
|
3
|
-
self.table_name = "roles"
|
3
|
+
self.table_name = "roles"
|
4
|
+
belongs_to :parent, :class_name => "Caboose::Role"
|
4
5
|
has_and_belongs_to_many :users
|
5
6
|
has_and_belongs_to_many :permissions
|
6
7
|
has_many :page_permissions
|
@@ -46,5 +47,22 @@ class Caboose::Role < ActiveRecord::Base
|
|
46
47
|
def self.tree
|
47
48
|
return self.where(:parent_id => -1).reorder("name").all
|
48
49
|
end
|
50
|
+
|
51
|
+
def is_ancestor_of?(role)
|
52
|
+
if (role.is_a?(Integer) || role.is_a?(String))
|
53
|
+
role_id = role.to_i
|
54
|
+
return false if role_id = -1
|
55
|
+
role = Caboose::Role.find(role)
|
56
|
+
end
|
57
|
+
return false if role.parent_id == -1
|
58
|
+
return false if role.parent.nil?
|
59
|
+
return true if role.parent.id == id
|
60
|
+
return is_ancestor_of?(role.parent)
|
61
|
+
end
|
62
|
+
|
63
|
+
def is_child_of?(role)
|
64
|
+
role = Role.find(role) if role.is_a?(Integer)
|
65
|
+
return role.is_ancestor_of?(self)
|
66
|
+
end
|
49
67
|
|
50
68
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Caboose::RolePlugin < Caboose::CaboosePlugin
|
2
|
+
|
3
|
+
def self.admin_nav(nav, user, page)
|
4
|
+
return nav if user.nil? || !user.is_allowed('roles', 'view')
|
5
|
+
|
6
|
+
item = {
|
7
|
+
'id' => 'roles',
|
8
|
+
'text' => 'Roles',
|
9
|
+
'children' => []
|
10
|
+
}
|
11
|
+
if (user.is_allowed('roles', 'view'))
|
12
|
+
item['children'] << {
|
13
|
+
'href' => '/admin/roles',
|
14
|
+
'text' => 'View All Roles'
|
15
|
+
}
|
16
|
+
end
|
17
|
+
if (user.is_allowed('roles', 'add'))
|
18
|
+
item['children'] << {
|
19
|
+
'href' => '/admin/roles/new',
|
20
|
+
'text' => 'New Role'
|
21
|
+
}
|
22
|
+
end
|
23
|
+
nav << item
|
24
|
+
return nav
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|