caboose-cms 0.3.78 → 0.3.79

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OWRkNWIyNDE0NGQ1YTFlOWZjNDcxOTYxZjNiZDc2YmI5M2VkYzdhNw==
4
+ MDQ3YWIwOGVhM2Q3Yjc3ODgyMmUwNTVhMzVmMWQzNzgxMWQ1NzM4OA==
5
5
  data.tar.gz: !binary |-
6
- N2QzYmUzM2U2N2VkNmRjOWE5YTEzYWYzODc4NWJlNzgxYmUyYzAxNQ==
6
+ MjBlZmZiMzA1MzgwZDgyYjYxNjEyYzRmNWZmMTM2OWY5MGU1MDc5Zg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzQ3YzVmYzdhNzFlZWNhYTE1ZmI2ODY5NTM5NzAxYjVhYjFhZjQ2ZTcxMzJm
10
- YjAwZDEyMGM4ZWJhZjNkZjA4NTdjNDVmYTVkYmVjODU5MjQ3NTFjM2ZhNTM2
11
- NWYzN2MxZTY0YWUyYTc2Nzk0ZDg0OTU0MGJkODMyYzdjODM1OGY=
9
+ NmQ2NzI0ZTQ3OWQ4OGM4N2QzMTdhMjQzODAwNjk3YmMwMWE4ZDRhMzQ5OTQ4
10
+ ODg3ZjBjZWVhZDJmZGZiZmEwM2UwOGI2NWI4ZTA2MjA2Mzk3NzY1YTUwYjdh
11
+ ZDg1YmIxODI0YzIxMDliNjQzOGFjNjk3M2Q0NjY4ODliN2VjMWE=
12
12
  data.tar.gz: !binary |-
13
- ZmZkZDY3NzIzMTNmYTMzNjdlZDBiNDljMmI2NjRlOTg1NjFlYWY2ODExZWQw
14
- YWNlNjZjNjI5NmM2OGY0NWM3OTVkMWJkMDdkNmY1MjczMDVkYTE3ZjQyYTNi
15
- MjM3NmVlNzBmYWIyYzJjMjUyZjk3YzgwZGJlZDA5M2MzYTVjYzk=
13
+ MWMyN2ZlN2NkMWE1ZDQzZGU0MmJhYjc1YTJjNDAyZjJmMTRmNTIyYmU1MjUz
14
+ MTE4ZGZmZGUyOGUwMjQ2ZTE5MzdhOGQyODUzYjI0YWI1YzcxMmUwMjQxZDll
15
+ Zjk1YzBkNzE5ZjBhZWVmNmI4NzI0ZDc0MjBmZGMxNTE3Zjk0ZmY=
@@ -0,0 +1,38 @@
1
+
2
+ module Caboose
3
+ class PagePermissionsController < ApplicationController
4
+
5
+ # POST /admin/page-permissions
6
+ def admin_add
7
+ return unless user_is_allowed('pages', 'add')
8
+
9
+ resp = Caboose::StdClass.new
10
+ page_id = params[:page_id]
11
+ role_id = params[:role_id]
12
+ action = params[:action2]
13
+
14
+ if !PagePermission.where(:page_id => page_id, :role_id => role_id, :action => action).exists?
15
+ PagePermission.create(:page_id => page_id, :role_id => role_id, :action => action)
16
+ end
17
+
18
+ resp.success = true
19
+ render :json => resp
20
+ end
21
+
22
+ # DELETE /admin/page-permissions
23
+ # DELETE /admin/page-permissions/:id
24
+ def admin_delete
25
+ return unless user_is_allowed('pages', 'edit')
26
+
27
+ if params[:id]
28
+ PagePermission.find(params[:id]).destroy
29
+ else
30
+ PagePermission.where(:page_id => params[:page_id], :role_id => params[:role_id], :action => params[:action2]).destroy_all
31
+ end
32
+
33
+ resp = StdClass.new('success' => true)
34
+ render :json => true
35
+ end
36
+
37
+ end
38
+ end
@@ -22,7 +22,7 @@ module Caboose
22
22
  user = logged_in_user
23
23
  if !user.is_allowed(page, 'view')
24
24
  if user.id == User.logged_out_user_id
25
- redirect_to "/login?return_url=" + URI.encode(request.fullpath)
25
+ redirect_to "/modal/login?return_url=" + URI.encode(request.fullpath)
26
26
  return
27
27
  else
28
28
  page.title = 'Access Denied'
@@ -119,6 +119,13 @@ module Caboose
119
119
  @page = Page.find(params[:id])
120
120
  render :layout => 'caboose/admin'
121
121
  end
122
+
123
+ # GET /admin/pages/:id/permissions
124
+ def admin_edit_permissions
125
+ return unless user_is_allowed('pages', 'edit')
126
+ @page = Page.find(params[:id])
127
+ render :layout => 'caboose/admin'
128
+ end
122
129
 
123
130
  # GET /admin/pages/:id/content
124
131
  def admin_edit_content
@@ -26,24 +26,26 @@ module Caboose
26
26
  pass1 = params[:pass1]
27
27
  pass2 = params[:pass2]
28
28
 
29
- if (first_name.nil? || first_name.strip.length == 0)
29
+ if first_name.nil? || first_name.strip.length == 0
30
30
  resp.error = "Your first name is required."
31
- elsif (last_name.nil? || last_name.strip.length == 0)
31
+ elsif last_name.nil? || last_name.strip.length == 0
32
32
  resp.error = "Your last name is required."
33
- elsif (email.nil? || email.strip.length == 0)
33
+ elsif email.nil? || email.strip.length == 0
34
34
  resp.error = "Your email address is required."
35
- elsif (phone.nil? || phone.strip.length < 10)
36
- resp.error = "Your phone number is required."
37
- elsif (pass1.nil? || pass1.strip.length < 8)
35
+ elsif User.where(:email => email.strip.downcase).exists?
36
+ resp.error = "A user with that email address already exists."
37
+ elsif phone.nil? || phone.strip.length < 10
38
+ resp.error = "Your phone number is required. Please include your area code."
39
+ elsif pass1.nil? || pass1.strip.length < 8
38
40
  resp.error = "Your password must be at least 8 characters."
39
- elsif (pass2.nil? || pass1 != pass2)
41
+ elsif pass2.nil? || pass1 != pass2
40
42
  resp.error = "Your passwords don't match."
41
43
  else
42
44
 
43
45
  u = Caboose::User.new
44
46
  u.first_name = first_name
45
47
  u.last_name = last_name
46
- u.email = email
48
+ u.email = email.strip.downcase
47
49
  u.phone = phone
48
50
  u.password = Digest::SHA1.hexdigest(Caboose::salt + pass1)
49
51
  u.date_created = DateTime.now
@@ -24,5 +24,20 @@ module Caboose
24
24
  return "var _gaq = _gaq || [];\n_gaq.push(['_setCustomVar', 1, 'caboose_ab_variants', #{Caboose.json(AbTesting.analytics_string)}]);"
25
25
  end
26
26
 
27
+ def pages_roles_with_prefix(top_roles, prefix)
28
+ arr = []
29
+ top_roles.each do |r|
30
+ arr = pages_roles_with_prefix_helper(arr, r, prefix, "")
31
+ end
32
+ end
33
+
34
+ def pages_roles_with_prefix_helper(arr, role, prefix, str)
35
+ arr << "#{str}#{role.name}"
36
+ role.children.each do |r|
37
+ arr = pages_roles_with_prefix_helper(arr, r, prefix, "#{prefix}#{str}")
38
+ end
39
+ return arr
40
+ end
41
+
27
42
  end
28
43
  end
@@ -75,6 +75,23 @@ class Caboose::Role < ActiveRecord::Base
75
75
  return self.where(:parent_id => -1).reorder("name").all
76
76
  end
77
77
 
78
+ def self.flat_tree(prefix = '-')
79
+ arr = []
80
+ self.tree.each do |r|
81
+ arr += self.flat_tree_helper(r, prefix, '')
82
+ end
83
+ return arr
84
+ end
85
+
86
+ def self.flat_tree_helper(role, prefix, str)
87
+ role.name = "#{str}#{role.name}"
88
+ arr = [role]
89
+ role.children.each do |r|
90
+ arr += self.flat_tree_helper(r, prefix, "#{str}#{prefix}")
91
+ end
92
+ return arr
93
+ end
94
+
78
95
  def is_ancestor_of?(role)
79
96
  if (role.is_a?(Integer) || role.is_a?(String))
80
97
  role_id = role.to_i
@@ -90,6 +107,6 @@ class Caboose::Role < ActiveRecord::Base
90
107
  def is_child_of?(role)
91
108
  role = Role.find(role) if role.is_a?(Integer)
92
109
  return role.is_ancestor_of?(self)
93
- end
94
-
110
+ end
111
+
95
112
  end
@@ -1,4 +1,17 @@
1
1
  <% content_for :caboose_css do %>
2
+ <style type='text/css'>
3
+
4
+ p.uri {
5
+ background: #efefef;
6
+ border: #999 1px solid;
7
+ padding: 10px;
8
+ position: absolute;
9
+ top: 67px;
10
+ left: 0;
11
+ height: 16px;
12
+ }
13
+
14
+ </style>
2
15
  <% end %>
3
16
  <% content_for :caboose_js do %>
4
17
  <%
@@ -23,6 +36,7 @@
23
36
  <%
24
37
  tabs = {
25
38
  'General' => "/admin/pages/#{@page.id}/edit",
39
+ 'Permissions' => "/admin/pages/#{@page.id}/permissions",
26
40
  'Content' => "/admin/pages/#{@page.id}/content",
27
41
  'Custom CSS' => "/admin/pages/#{@page.id}/css",
28
42
  'Custom JS' => "/admin/pages/#{@page.id}/js",
@@ -0,0 +1,46 @@
1
+
2
+ <%= render :partial => 'caboose/pages/admin_header' %>
3
+
4
+ <p class='uri'>URI: /<span id='uri'><%= @page.uri %></span></p>
5
+
6
+ <table class='data' id='viewers'>
7
+ <tr><th>Role</th><th>View</th><th>Edit</th></tr>
8
+ <% Caboose::Role.flat_tree(' - ').each do |r| %>
9
+ <% next if r.id == 1 %>
10
+ <% may_view = Caboose::PagePermission.where(:role_id => r.id, :page_id => @page.id, :action => 'view').exists? %>
11
+ <% may_edit = Caboose::PagePermission.where(:role_id => r.id, :page_id => @page.id, :action => 'edit').exists? %>
12
+ <tr>
13
+ <td><label for='role_<%= r.id %>'><%= r.name %></td>
14
+ <td><input type='checkbox' id='role_<%= r.id %>' value='<%= r.id %>' <%= may_view ? "checked='true'" : '' %> onchange="toggle_page_permission(<%= r.id %>, $(this).prop('checked'), 'view');" /></td>
15
+ <td><input type='checkbox' id='role_<%= r.id %>' value='<%= r.id %>' <%= may_edit ? "checked='true'" : '' %> onchange="toggle_page_permission(<%= r.id %>, $(this).prop('checked'), 'edit');" /></td>
16
+ </tr>
17
+ <% end %>
18
+ </table>
19
+
20
+ <%= render :partial => 'caboose/pages/admin_footer' %>
21
+
22
+ <% content_for :caboose_css do %>
23
+ <style type='text/css'>
24
+ #viewers input[type=checkbox] { position: relative; }
25
+ #editors input[type=checkbox] { position: relative; }
26
+ </style>
27
+ <% end %>
28
+ <% content_for :caboose_js do %>
29
+ <script type='text/javascript'>
30
+
31
+ function toggle_page_permission(role_id, checked, action)
32
+ {
33
+ $.ajax({
34
+ url: '/admin/page-permissions',
35
+ type: checked ? 'post' : 'delete',
36
+ data: {
37
+ page_id: <%= @page.id %>,
38
+ role_id: role_id,
39
+ action2: action
40
+ },
41
+ success: function(resp) {}
42
+ });
43
+ }
44
+
45
+ </script>
46
+ <% end %>
@@ -1,4 +1,5 @@
1
1
  <h1>Roles</h1>
2
+ <p><a href='/admin/roles/new'>New Role</a></p>
2
3
 
3
4
  <table class='data'>
4
5
  <tr>
@@ -1,35 +1,39 @@
1
1
 
2
2
  <h1>New role</h1>
3
- <div id='role_new_container'></div>
3
+
4
+ <form action='/admin/roles' method='post' id='new_role_form'>
5
+ <input type='hidden' name='authenticity_token' value='<%= form_authenticity_token %>' />
6
+ <p><select name='parent_id'>
7
+ <option value=''>-- Select a parent role --</option>
8
+ <% Caboose::Role.flat_tree(' - ').each do |r| %>
9
+ <option value='<%= r.id %>'><%= r.name %></option>
10
+ <% end %>
11
+ </select></p>
12
+ <p><input type='text' name='name' id='name' placeholder='Name' value='' style='width: 200px;' /></p>
13
+ <div id='message'></div>
14
+ <p><input type='submit' value='Add Role' /></p>
15
+ </form>
4
16
 
5
17
  <% content_for :caboose_js do %>
6
18
  <script type='text/javascript'>
7
19
 
8
- var role = false;
9
20
  $(document).ready(function() {
21
+ $('#new_role_form').submit(function() { add_role(); return false; });
22
+ });
10
23
 
11
- role = new Model({
12
- name: 'Role',
13
- id: 'new',
14
- listing_url: 'get /admin/roles',
15
- create_url: 'post /admin/roles',
16
- attributes: [
17
- {
18
- name: 'parent_id',
19
- type: 'select',
20
- value: -1,
21
- text: "[No Parent]",
22
- options_url: '/admin/roles/options'
23
- },
24
- {
25
- name: 'name',
26
- type: 'text',
27
- value: ''
28
- }
29
- ]
24
+ function add_role()
25
+ {
26
+ $('#message').html("<p class='loading'>Adding role...</p>");
27
+ $.ajax({
28
+ url: '/admin/roles',
29
+ type: 'post',
30
+ data: $('#new_role_form').serialize(),
31
+ success: function(resp) {
32
+ if (resp.error) $('#message').html("<p class='note error'>" + resp.error + "</p>");
33
+ if (resp.redirect) window.location = resp.redirect;
34
+ }
30
35
  });
31
-
32
- });
36
+ }
33
37
 
34
38
  </script>
35
39
  <% end %>
@@ -66,17 +66,24 @@ Caboose::Engine.routes.draw do
66
66
  get "admin/pages/:id/delete" => "pages#admin_delete_form"
67
67
  get "admin/pages/:id/sitemap" => "pages#admin_sitemap"
68
68
  get "admin/pages/:id/edit" => "pages#admin_edit_general"
69
+ get "admin/pages/:id/permissions" => "pages#admin_edit_permissions"
69
70
  get "admin/pages/:id/css" => "pages#admin_edit_css"
70
71
  get "admin/pages/:id/js" => "pages#admin_edit_js"
71
72
  get "admin/pages/:id/seo" => "pages#admin_edit_seo"
72
73
  get "admin/pages/:id/block-order" => "pages#admin_edit_block_order"
73
74
  put "admin/pages/:id/block-order" => "pages#admin_update_block_order"
74
75
  get "admin/pages/:id/new-blocks" => "pages#admin_new_blocks"
75
- get "admin/pages/:id/content" => "pages#admin_edit_content"
76
+ get "admin/pages/:id/content" => "pages#admin_edit_content"
77
+ put "admin/pages/:id/viewers" => "pages#admin_update_viewers"
78
+ put "admin/pages/:id/editors" => "pages#admin_update_editors"
76
79
  put "admin/pages/:id" => "pages#admin_update"
77
80
  get "admin/pages" => "pages#admin_index"
78
81
  post "admin/pages" => "pages#admin_create"
79
82
  delete "admin/pages/:id" => "pages#admin_delete"
83
+
84
+ post "admin/page-permissions" => "page_permissions#admin_add"
85
+ delete "admin/page-permissions" => "page_permissions#admin_delete"
86
+ delete "admin/page-permissions/:id" => "page_permissions#admin_delete"
80
87
 
81
88
  get "admin/pages/:page_id/blocks/new" => "page_blocks#admin_new"
82
89
  get "admin/pages/:page_id/blocks/render" => "page_blocks#admin_render_all"
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.3.78'
2
+ VERSION = '0.3.79'
3
3
  end
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.3.78
4
+ version: 0.3.79
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-24 00:00:00.000000000 Z
11
+ date: 2014-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -227,6 +227,7 @@ files:
227
227
  - app/controllers/caboose/page_block_fields_controller.rb
228
228
  - app/controllers/caboose/page_block_types_controller.rb
229
229
  - app/controllers/caboose/page_blocks_controller.rb
230
+ - app/controllers/caboose/page_permissions_controller.rb
230
231
  - app/controllers/caboose/pages_controller.rb
231
232
  - app/controllers/caboose/permissions_controller.rb
232
233
  - app/controllers/caboose/posts_controller.rb
@@ -316,6 +317,7 @@ files:
316
317
  - app/views/caboose/pages/admin_edit_css.html.erb
317
318
  - app/views/caboose/pages/admin_edit_general.html.erb
318
319
  - app/views/caboose/pages/admin_edit_js.html.erb
320
+ - app/views/caboose/pages/admin_edit_permissions.html.erb
319
321
  - app/views/caboose/pages/admin_edit_seo.html.erb
320
322
  - app/views/caboose/pages/admin_index.html.erb
321
323
  - app/views/caboose/pages/admin_new.html.erb