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,25 @@
1
+
2
+ body, td, pre {
3
+ color: #000000;
4
+ font-family: Verdana,Arial,Helvetica,sans-serif;
5
+ font-size: inherit;
6
+ }
7
+ body {
8
+ background: none repeat scroll 0 0 #FFFFFF;
9
+ }
10
+ body.mceForceColors {
11
+ background: none repeat scroll 0 0 #FFFFFF;
12
+ color: #000000;
13
+ }
14
+ body.mceBrowserDefaults {
15
+ background: none repeat scroll 0 0 transparent;
16
+ color: inherit;
17
+ font-family: inherit;
18
+ font-size: inherit;
19
+ }
20
+ h1 { font-size: inherit; }
21
+ h2 { font-size: inherit; }
22
+ h3 { font-size: inherit; }
23
+ h4 { font-size: inherit; }
24
+ h5 { font-size: inherit; }
25
+ h6 { font-size: inherit; }
@@ -15,7 +15,6 @@ module Caboose
15
15
 
16
16
  # Find the page with an exact URI match
17
17
  page = Page.page_with_uri(request.fullpath, false)
18
- Caboose.log(page)
19
18
 
20
19
  if (!page)
21
20
  asset
@@ -41,22 +40,8 @@ module Caboose
41
40
  page.content = Caboose.plugin_hook('page_content', page.content)
42
41
  @page = page
43
42
  @user = user
44
- is_admin = @user.is_allowed('all', 'all')
45
-
46
43
  @crumb_trail = Caboose::Page.crumb_trail(@page)
47
44
  @subnav = Caboose::Page.subnav(@page, session['use_redirect_urls'], @user)
48
- @actions = Caboose::Page.permissible_actions(@user.id, @page.id)
49
- @tasks = {}
50
- @page_tasks = {}
51
-
52
- if (@actions.include?('edit') || is_admin)
53
- @page_tasks["/pages/#{@page.id}/sitemap"] = 'Site Map This Page'
54
- @page_tasks["/pages/#{@page.id}/edit"] = 'Edit Page Content'
55
- @page_tasks["/pages/#{@page.id}/edit-settings"] = 'Edit Page Settings'
56
- end
57
- if (@user.is_allowed('pages', 'add') || is_admin)
58
- @page_tasks["/pages/new?parent_id=#{@page.id}"] = 'New Page'
59
- end
60
45
 
61
46
  #@subnav.links = @tasks.collect {|href, task| {'href' => href, 'text' => task, 'is_current' => uri == href}}
62
47
 
@@ -86,9 +71,9 @@ module Caboose
86
71
  return
87
72
  end
88
73
 
89
- Caboose.log(Caboose::assets_path, 'Caboose::assets_path')
74
+ #Caboose.log(Caboose::assets_path, 'Caboose::assets_path')
90
75
  path = Caboose::assets_path.join("#{asset.id}.#{asset.extension}")
91
- Caboose.log("Sending asset #{path}")
76
+ #Caboose.log("Sending asset #{path}")
92
77
  #send_file(path)
93
78
  #send_file(path, :filename => "your_document.pdf", :type => "application/pdf")
94
79
 
@@ -110,14 +95,37 @@ module Caboose
110
95
  return if !user_is_allowed('pages', 'add')
111
96
  @pages = Page.new
112
97
  @parent_id = params[:parent_id].nil? ? params[:parent_id] : -1
113
- render :layout => 'caboose/caboose'
98
+ render :layout => 'caboose/admin'
99
+ end
100
+
101
+ # GET /pages/1/redirect
102
+ def redirect
103
+ @page = Page.find(params[:id])
104
+ redirect_to "/#{@page.uri}"
114
105
  end
115
106
 
116
107
  # GET /pages/1/edit
117
108
  def edit
118
109
  return if !user_is_allowed('pages', 'edit')
119
110
  @page = Page.find(params[:id])
120
- render :layout => 'caboose/caboose'
111
+
112
+ session['caboose_station_state'] = 'left'
113
+ session['caboose_station_open_tabs'] = ['pages']
114
+ session['caboose_station_return_url'] = "/#{@page.uri}"
115
+
116
+ render :layout => 'caboose/admin'
117
+ end
118
+
119
+ # GET /pages/1/edit-settings
120
+ def edit_settings
121
+ return if !user_is_allowed('pages', 'edit')
122
+ @page = Page.find(params[:id])
123
+
124
+ session['caboose_station_state'] = 'left'
125
+ session['caboose_station_open_tabs'] = ['pages']
126
+ session['caboose_station_return_url'] = "/#{@page.uri}"
127
+
128
+ render :layout => 'caboose/admin'
121
129
  end
122
130
 
123
131
  # POST /pages
@@ -261,6 +269,22 @@ module Caboose
261
269
  render json: resp
262
270
  end
263
271
 
272
+ def sitemap
273
+ parent_id = params[:parent_id]
274
+ top_page = Page.index_page
275
+ p = !parent_id.nil? ? Page.find(parent_id) : top_page
276
+ options = []
277
+ sitemap_helper2(top_page, options)
278
+ @options = options
279
+ end
280
+
281
+ def sitemap_helper2(page, options, prefix = '')
282
+ options << { 'value' => page.id, 'text' => prefix + page.title }
283
+ page.children.each do |kid|
284
+ sitemap_helper(kid, options, prefix + ' - ')
285
+ end
286
+ end
287
+
264
288
  def sitemap_options
265
289
  parent_id = params[:parent_id]
266
290
  top_page = Page.index_page
@@ -1,83 +1,101 @@
1
- class PermissionsController < ApplicationController
2
- # GET /permissions
3
- # GET /permissions.json
4
- def index
5
- @permissions = Permission.all
6
-
7
- respond_to do |format|
8
- format.html # index.html.erb
9
- format.json { render json: @permissions }
1
+ module Caboose
2
+ class PermissionsController < ApplicationController
3
+ layout 'caboose/admin'
4
+
5
+ def before_action
6
+ @page = Page.page_with_uri('/admin')
10
7
  end
11
- end
12
-
13
- # GET /permissions/1
14
- # GET /permissions/1.json
15
- def show
16
- @permission = Permission.find(params[:id])
17
-
18
- respond_to do |format|
19
- format.html # show.html.erb
20
- format.json { render json: @permission }
8
+
9
+ # GET /admin/permissions
10
+ def index
11
+ return if !user_is_allowed('permissions', 'view')
12
+
13
+ @gen = PageBarGenerator.new(params, {
14
+ 'resource' => nil
15
+ },{
16
+ 'model' => 'Caboose::Permission',
17
+ 'sort' => 'resource, action',
18
+ 'desc' => false,
19
+ 'base_url' => '/admin/permissions'
20
+ })
21
+ @permissions = @gen.items
21
22
  end
22
- end
23
-
24
- # GET /permissions/new
25
- # GET /permissions/new.json
26
- def new
27
- @permission = Permission.new
28
-
29
- respond_to do |format|
30
- format.html # new.html.erb
31
- format.json { render json: @permission }
23
+
24
+ # GET /admin/permissions/new
25
+ def new
26
+ return if !user_is_allowed('permissions', 'add')
27
+ @permission = Permission.new
32
28
  end
33
- end
34
-
35
- # GET /permissions/1/edit
36
- def edit
37
- @permission = Permission.find(params[:id])
38
- end
39
-
40
- # POST /permissions
41
- # POST /permissions.json
42
- def create
43
- @permission = Permission.new(params[:permission])
44
-
45
- respond_to do |format|
46
- if @permission.save
47
- format.html { redirect_to @permission, notice: 'Permission was successfully created.' }
48
- format.json { render json: @permission, status: :created, location: @permission }
49
- else
50
- format.html { render action: "new" }
51
- format.json { render json: @permission.errors, status: :unprocessable_entity }
52
- end
29
+
30
+ # GET /admin/permissions/1/edit
31
+ def edit
32
+ return if !user_is_allowed('permissions', 'edit')
33
+ @permission = Permission.find(params[:id])
53
34
  end
54
- end
55
-
56
- # PUT /permissions/1
57
- # PUT /permissions/1.json
58
- def update
59
- @permission = Permission.find(params[:id])
60
-
61
- respond_to do |format|
62
- if @permission.update_attributes(params[:permission])
63
- format.html { redirect_to @permission, notice: 'Permission was successfully updated.' }
64
- format.json { head :no_content }
65
- else
66
- format.html { render action: "edit" }
67
- format.json { render json: @permission.errors, status: :unprocessable_entity }
35
+
36
+ # POST /admin/permissions
37
+ def create
38
+ return if !user_is_allowed('permissions', 'add')
39
+
40
+ resp = StdClass.new({
41
+ 'error' => nil,
42
+ 'redirect' => nil
43
+ })
44
+
45
+ perm = Permission.new()
46
+ perm.resource = params[:resource]
47
+ perm.action = params[:action2]
48
+
49
+ if (perm.resource.strip.length == 0)
50
+ resp.error = "The resource is required."
51
+ elsif (perm.action.strip.length == 0)
52
+ resp.error = "The action is required."
53
+ else
54
+ perm.save
55
+ resp.redirect = "/admin/permissions/#{perm.id}/edit"
68
56
  end
57
+ render json: resp
69
58
  end
70
- end
71
-
72
- # DELETE /permissions/1
73
- # DELETE /permissions/1.json
74
- def destroy
75
- @permission = Permission.find(params[:id])
76
- @permission.destroy
59
+
60
+ # PUT /admin/permissions/1
61
+ def update
62
+ return if !user_is_allowed('permissions', 'edit')
77
63
 
78
- respond_to do |format|
79
- format.html { redirect_to permissions_url }
80
- format.json { head :no_content }
64
+ resp = StdClass.new
65
+ perm = Permission.find(params[:id])
66
+
67
+ save = true
68
+ params.each do |name,value|
69
+ case name
70
+ when "resource"
71
+ perm.resource = value
72
+ when "action2"
73
+ perm.action = value
74
+ end
75
+ end
76
+
77
+ resp.success = save && perm.save
78
+ render json: resp
79
+ end
80
+
81
+ # DELETE /admin/permissions/1
82
+ def destroy
83
+ return if !user_is_allowed('permissions', 'delete')
84
+ perm = Permission.find(params[:id])
85
+ perm.destroy
86
+
87
+ resp = StdClass.new({
88
+ 'redirect' => '/admin/permissions'
89
+ })
90
+ render json: resp
91
+ end
92
+
93
+ # GET /admin/permissions/options
94
+ def options
95
+ return if !user_is_allowed('permissions', 'view')
96
+ perms = Permission.reorder('resource, action').all
97
+ options = perms.collect { |p| { 'value' => p.id, 'text' => "#{p.resource}_#{p.action}"}}
98
+ render json: options
81
99
  end
82
100
  end
83
101
  end
@@ -1,7 +1,12 @@
1
1
  module Caboose
2
2
  class RolesController < ApplicationController
3
+ layout 'caboose/admin'
3
4
 
4
- # GET /roles
5
+ def before_action
6
+ @page = Page.page_with_uri('/admin')
7
+ end
8
+
9
+ # GET /admin/roles
5
10
  def index
6
11
  return if !user_is_allowed('roles', 'view')
7
12
  top_roles = Role.tree
@@ -10,20 +15,19 @@ module Caboose
10
15
  @roles = arr
11
16
  end
12
17
 
13
- # GET /roles/new
18
+ # GET /admin/roles/new
14
19
  def new
15
20
  return if !user_is_allowed('roles', 'add')
16
21
  @role = Role.new
17
22
  end
18
23
 
19
- # GET /roles/1/edit
24
+ # GET /admin/roles/1/edit
20
25
  def edit
21
26
  return if !user_is_allowed('roles', 'edit')
22
27
  @role = Role.find(params[:id])
23
- @users = User.users_with_role(@role.id)
24
28
  end
25
29
 
26
- # POST /roles
30
+ # POST /admin/roles
27
31
  def create
28
32
  return if !user_is_allowed('roles', 'add')
29
33
 
@@ -37,65 +41,73 @@ module Caboose
37
41
  role.name = params[:name]
38
42
  role.save
39
43
 
40
- resp.redirect = "/roles/#{role.id}/edit"
44
+ resp.redirect = "/admin/roles/#{role.id}/edit"
41
45
  render json: resp
42
46
  end
43
47
 
44
- # PUT /roles/1
48
+ # PUT /admin/roles/1
45
49
  def update
46
50
  return if !user_is_allowed('roles', 'edit')
47
51
 
48
52
  resp = StdClass.new
49
53
  role = Role.find(params[:id])
50
- name = params[:name]
51
- value = params[:value]
52
54
 
53
55
  save = true
54
- case name
55
- when "name"
56
- role.name = value
57
- when "parent_id"
58
- if (role.id == value)
59
- resp.error = "You can't set the parent to be this role."
60
- save = false
61
- #elsif (role.is_parent_of(value))
62
- # resp.error = "You can't set the parent to be one of the child roles."
63
- # save = false
64
- else
65
- role.parent_id = value
66
- end
67
- when "users"
68
- role.users = []
69
- value.each { |uid| role.users << User.find(uid) } unless value.nil?
70
- resp.attribute = { 'text' => role.users.collect{ |u| "#{u.first_name} #{u.last_name}" }.join(', ') }
56
+ params.each do |name,value|
57
+ case name
58
+ when "name"
59
+ role.name = value
60
+ when "description"
61
+ role.description = value
62
+ when "parent_id"
63
+ value = value.to_i
64
+ if (role.id == value)
65
+ resp.error = "You can't set the parent to be this role."
66
+ save = false
67
+ elsif (role.is_ancestor_of?(value))
68
+ resp.error = "You can't set the parent to be one of the child roles."
69
+ save = false
70
+ else
71
+ role.parent_id = value
72
+ if (value == -1)
73
+ resp.attributes = { 'parent_id' => { 'text' => '[No parent]' }}
74
+ else
75
+ p = Role.find(value)
76
+ resp.attributes = { 'parent_id' => { 'text' => p.name }}
77
+ end
78
+ end
79
+ when "members"
80
+ value = [] if value.nil? || value.length == 0
81
+ role.users = value.collect { |uid| User.find(uid) }
82
+ resp.attributes = { 'members' => { 'text' => role.users.collect{ |u| "#{u.first_name} #{u.last_name}" }.join('<br />') }}
83
+ end
71
84
  end
72
85
 
73
- resp.success = save && user.save
86
+ resp.success = save && role.save
74
87
  render json: resp
75
88
  end
76
89
 
77
- # DELETE /roles/1
90
+ # DELETE /admin/roles/1
78
91
  def destroy
79
92
  return if !user_is_allowed('roles', 'delete')
80
93
  @role = Role.find(params[:id])
81
94
  @role.destroy
82
-
83
- respond_to do |format|
84
- format.html { redirect_to roles_url }
85
- format.json { head :no_content }
86
- end
95
+ render json: { 'redirect' => '/admin/roles' }
87
96
  end
88
97
 
89
- # GET /roles/options
98
+ # GET /admin/roles/options
90
99
  def options
91
100
  return if !user_is_allowed('roles', 'view')
92
101
  @top_roles = Role.tree
93
- arr = []
94
- @top_roles.each { |r| arr += add_role_options(r, 0) }
102
+ arr = [{
103
+ "value" => -1,
104
+ "text" => 'Top Level'
105
+ }]
106
+ @top_roles.each { |r| arr += add_role_options(r, 1) }
95
107
  render json: arr.to_json
96
108
  end
97
109
 
98
- def add_role_options(role, level)
110
+ def add_role_options(role, level)
99
111
  arr = [{
100
112
  "value" => role.id,
101
113
  "text" => (" - " * level) + role.name
@@ -0,0 +1,100 @@
1
+ module Caboose
2
+ class SettingsController < ApplicationController
3
+ layout 'caboose/admin'
4
+
5
+ def before_action
6
+ @page = Page.page_with_uri('/admin')
7
+ end
8
+
9
+ # GET /admin/settings
10
+ def index
11
+ return if !user_is_allowed('settings', 'view')
12
+
13
+ @gen = PageBarGenerator.new(params, {
14
+ 'name' => nil,
15
+ 'value' => nil
16
+ },{
17
+ 'model' => 'Caboose::Setting',
18
+ 'sort' => 'name',
19
+ 'desc' => false,
20
+ 'base_url' => '/admin/settings'
21
+ })
22
+ @settings = @gen.items
23
+ end
24
+
25
+ # GET /admin/settings/new
26
+ def new
27
+ return if !user_is_allowed('settings', 'add')
28
+ @setting = Setting.new
29
+ end
30
+
31
+ # GET /admin/settings/1/edit
32
+ def edit
33
+ return if !user_is_allowed('settings', 'edit')
34
+ @setting = Setting.find(params[:id])
35
+ end
36
+
37
+ # POST /admin/settings
38
+ def create
39
+ return if !user_is_allowed('settings', 'add')
40
+
41
+ resp = StdClass.new({
42
+ 'error' => nil,
43
+ 'redirect' => nil
44
+ })
45
+
46
+ setting = Setting.new()
47
+ setting.name = params[:name]
48
+ setting.value = params[:value]
49
+
50
+ if (setting.name.strip.length == 0)
51
+ resp.error = "The setting name is required."
52
+ else
53
+ setting.save
54
+ resp.redirect = "/admin/settings/#{setting.id}/edit"
55
+ end
56
+ render json: resp
57
+ end
58
+
59
+ # PUT /admin/settings/1
60
+ def update
61
+ return if !user_is_allowed('settings', 'edit')
62
+
63
+ resp = StdClass.new
64
+ setting = Setting.find(params[:id])
65
+
66
+ save = true
67
+ params.each do |name,value|
68
+ case name
69
+ when "name"
70
+ setting.name = value
71
+ when "value"
72
+ setting.value = value
73
+ end
74
+ end
75
+
76
+ resp.success = save && setting.save
77
+ render json: resp
78
+ end
79
+
80
+ # DELETE /admin/settings/1
81
+ def destroy
82
+ return if !user_is_allowed('settings', 'delete')
83
+ setting = Setting.find(params[:id])
84
+ setting.destroy
85
+
86
+ resp = StdClass.new({
87
+ 'redirect' => '/admin/settings'
88
+ })
89
+ render json: resp
90
+ end
91
+
92
+ # GET /admin/settings/options
93
+ def options
94
+ return if !user_is_allowed('settings', 'view')
95
+ settings = Setting.reorder('name').all
96
+ options = settings.collect { |s| { 'value' => s.id, 'text' => s.name }}
97
+ render json: options
98
+ end
99
+ end
100
+ end