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.
Files changed (57) hide show
  1. data/app/assets/images/caboose/caboose_nav.png +0 -0
  2. data/app/assets/javascripts/caboose/admin.js +37 -0
  3. data/app/assets/javascripts/caboose/application.js +2 -1
  4. data/app/assets/javascripts/caboose/model.form.page.js +30 -0
  5. data/app/assets/javascripts/caboose/station.js +223 -0
  6. data/app/assets/stylesheets/caboose/admin.css +57 -0
  7. data/app/assets/stylesheets/caboose/caboose.css +146 -16
  8. data/app/assets/stylesheets/caboose/tinymce.css +25 -0
  9. data/app/controllers/caboose/pages_controller.rb +43 -19
  10. data/app/controllers/caboose/permissions_controller.rb +91 -73
  11. data/app/controllers/caboose/roles_controller.rb +49 -37
  12. data/app/controllers/caboose/settings_controller.rb +100 -0
  13. data/app/controllers/caboose/station_controller.rb +13 -0
  14. data/app/controllers/caboose/users_controller.rb +51 -44
  15. data/app/models/caboose/caboose_plugin.rb +2 -6
  16. data/app/models/caboose/page.rb +3 -3
  17. data/app/models/caboose/page_bar_generator.rb +37 -28
  18. data/app/models/caboose/page_plugin.rb +43 -0
  19. data/app/models/caboose/permission_plugin.rb +27 -0
  20. data/app/models/caboose/role.rb +19 -1
  21. data/app/models/caboose/role_plugin.rb +27 -0
  22. data/app/models/caboose/setting.rb +5 -0
  23. data/app/models/caboose/settings_plugin.rb +27 -0
  24. data/app/models/caboose/user.rb +1 -2
  25. data/app/models/caboose/user_plugin.rb +28 -0
  26. data/app/views/caboose/pages/edit.html.erb +7 -27
  27. data/app/views/caboose/pages/edit_settings.html.erb +38 -0
  28. data/app/views/caboose/pages/sitemap.html.erb +12 -0
  29. data/app/views/caboose/permissions/edit.html.erb +21 -4
  30. data/app/views/caboose/permissions/index.html.erb +29 -21
  31. data/app/views/caboose/permissions/new.html.erb +22 -2
  32. data/app/views/caboose/roles/edit.html.erb +40 -27
  33. data/app/views/caboose/roles/index.html.erb +3 -5
  34. data/app/views/caboose/roles/new.html.erb +30 -11
  35. data/app/views/caboose/settings/edit.html.erb +23 -0
  36. data/app/views/caboose/settings/index.html.erb +33 -0
  37. data/app/views/caboose/settings/new.html.erb +25 -0
  38. data/app/views/caboose/users/edit.html.erb +11 -14
  39. data/app/views/caboose/users/index.html.erb +2 -4
  40. data/app/views/caboose/users/new.html.erb +2 -0
  41. data/app/views/caboose/users/update_pic.html.erb +1 -1
  42. data/app/views/layouts/caboose/_station.html.erb +43 -14
  43. data/app/views/layouts/caboose/{caboose.html.erb → admin.html.erb} +2 -2
  44. data/config/routes.rb +16 -5
  45. data/lib/caboose.rb +1 -1
  46. data/lib/caboose/engine.rb +15 -6
  47. data/lib/caboose/version.rb +1 -1
  48. data/lib/sample_files/tinymce.yml +22 -0
  49. data/lib/tasks/caboose.rake +21 -1
  50. metadata +40 -12
  51. data/app/assets/javascripts/caboose/caboose.js +0 -28
  52. data/app/assets/javascripts/caboose/permissions.js +0 -0
  53. data/app/assets/javascripts/caboose/roles.js +0 -35
  54. data/app/assets/javascripts/caboose/users.js +0 -38
  55. data/app/views/caboose/permissions/show.html.erb +0 -15
  56. data/app/views/caboose/roles/show.html.erb +0 -20
  57. 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
- # GET /users
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
- @user = User.new
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
- @user = User.find(params[:id])
37
+ @edituser = User.find(params[:id])
36
38
  @all_roles = Role.tree
37
- @roles = Role.roles_with_user(@user.id)
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
- case name
72
- when "first_name", "last_name", "username", "email"
73
- user[name.to_sym] = value
74
- when "password"
75
- confirm = params[:confirm]
76
- if (value != confirm)
77
- resp.error = "Passwords do not match.";
78
- save = false
79
- elsif (value.length < 8)
80
- resp.error = "Passwords must be at least 8 characters.";
81
- save = false
82
- else
83
- user.password = Digest::SHA1.hexdigest(Caboose::salt + value)
84
- end
85
- when "roles"
86
- user.roles = [];
87
- value.each { |rid| user.roles << Role.find(rid) } unless value.nil?
88
- resp.attribute = { 'text' => user.roles.collect{ |r| r.name }.join(', ') }
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
- @user = User.find(params[:id])
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.page_content_hook(str)
3
+ def self.page_content(str)
4
4
  return str
5
5
  end
6
6
 
7
- def self.admin_nav_hook(arr)
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
 
@@ -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' => 0,
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'] = 0 if @options["page"].nil?
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 = 9
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 = 0
82
+ start = 1
75
83
  stop = total_pages
76
84
  else
77
85
  start = page - (total_links/2).floor
78
- start = 0 if start < 0
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 = 0 if start < 0
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 Pages: showing page " + (page+1).to_s + " of #{total_pages}</p>\n"
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 (page < (total_pages-1))
105
- str << "<a href='#{base_url}?#{vars}&page=#{next_page}'>Next</a>"
106
- end
107
- str << "</div>\n"
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
@@ -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