caboose-cms 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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