caboose-cms 0.5.214 → 0.5.215

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzFiYmRlZWU5Zjg3YTViMjZmNzZjZmEyMmFhZDQ3Zjc2MWI4Nzk3ZA==
4
+ ZDA4ODMwZTZhOGNhYTU0NGJlMzk2NmRlMmIzM2Q0ZGQ3ODk5YzY1OQ==
5
5
  data.tar.gz: !binary |-
6
- MDQ1MzI3NTM2OTRmNzUxNzg0YjEyMWVhMjUzNzcyMzkxZDI1NWQ0Zg==
6
+ ZTQxOWYwNTVmZTgyMDhlYjJiOGY3YjlhNGI0NDc4NmYyZjEyYjdhZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZWY2Y2NkYjE1YjQ3YmY2ZjhjZWEyZTBkOWI0NjM5MDczOTVkYWU2MmE0YjVh
10
- MTUxMzc0NmVhNGZhOTZhMzU3NzI4Zjc2Nzc3Mjc1ZjRiOTE2YjgzYjZkNWYz
11
- OGFkMGNhYTdmMmQ5M2FmYTMzZTI2NzA3MGQzZmUzYWIxMzk4MGU=
9
+ MmZiOTNkZTQzZjI4ZmUyMzNjYWI1Y2ZjNTU2NGQxZGYxZGViM2E1NTVjNmNl
10
+ Yjc0YTViMDFkNDBmOTg5NDFhNTY2MjNiOGIxOGNjZWVjYzM5NzZhNGVhZTc4
11
+ M2MxYmNhNDFjZWVkZDg2MDU3MDc3NWI4ZDU3MGVhMTNiMzIzOWM=
12
12
  data.tar.gz: !binary |-
13
- MWJiM2MxZGFiNGNhMmFjMjM0OTc0Y2Y5OTA5NjgxYjM1OWY0MTMyYmYxODlk
14
- ZDBiZTVhZmNiNjcxZGMyZWYzYmEzMjNkNjZhZjE4MjJjM2I5MzBiNjdiN2Y1
15
- Nzg1ZTU5N2FiYjU3NTg4MzMwZjcyZDlkMzhhZTE4ZjNiYWViM2E=
13
+ NGI2NzEyODFlOWY1MDQ1OTUwZTZlMzlhNTE2OWQyNTM0OTBlMThkMDI0NDhl
14
+ NWUxMjBkODMxMzE2ZmQ2NmZmMGQ4NTg0NzJmNzVlNmRjODhhZjA0YWQ2M2Qz
15
+ MjkxMzc5NGFiZDM2NWU2NWY3N2JkZTcyYmE0MWZhMTY0NGI5ODk=
@@ -0,0 +1,98 @@
1
+ module Caboose
2
+ class PostCategoriesController < Caboose::ApplicationController
3
+
4
+ #=============================================================================
5
+ # Admin actions
6
+ #=============================================================================
7
+
8
+ # GET /admin/post-categories
9
+ def admin_index
10
+ return unless user_is_allowed('post_categories', 'view')
11
+
12
+ @main_cat = PostCategory.where("site_id = ?", @site.id).first
13
+ if @main_cat.nil?
14
+ @main_cat = PostCategory.create(:site_id => @site.id, :name => 'General News')
15
+ end
16
+ render :layout => 'caboose/admin'
17
+ end
18
+
19
+ # GET /admin/post-categories/new
20
+ def admin_new
21
+ return unless user_is_allowed('post_categories', 'add')
22
+ render :layout => 'caboose/admin'
23
+ end
24
+
25
+ # POST /admin/post-categories
26
+ def admin_add
27
+ return unless user_is_allowed('post_categories', 'add')
28
+
29
+ resp = Caboose::StdClass.new
30
+
31
+ if params[:name].nil? || params[:name].empty?
32
+ resp.error = 'The category name cannot be empty.'
33
+ else
34
+ cat = PostCategory.new(
35
+ :site_id => @site.id,
36
+ :name => params[:name]
37
+ )
38
+
39
+ if cat.save
40
+ resp.redirect = "/admin/post-categories/#{cat.id}"
41
+ else
42
+ resp.error = 'There was an error saving the category.'
43
+ end
44
+ end
45
+
46
+ render :json => resp
47
+ end
48
+
49
+ # GET /admin/post-categories/:id
50
+ def admin_edit
51
+ return unless user_is_allowed('post_categories', 'edit')
52
+ @category = PostCategory.find(params[:id])
53
+ render :layout => 'caboose/admin'
54
+ end
55
+
56
+ # PUT /admin/post-categories/:id
57
+ def admin_update
58
+ return unless user_is_allowed('post_categories', 'edit')
59
+
60
+ # Define category and initialize response
61
+ cat = PostCategory.find(params[:id])
62
+ resp = Caboose::StdClass.new({ :attributes => {} })
63
+
64
+ # Iterate over params and update relevant attributes
65
+ params.each do |key, value|
66
+ case key
67
+ when 'site_id' then cat.name = value
68
+ when 'name' then cat.name = value
69
+ end
70
+ end
71
+
72
+ # Try and save category
73
+ resp.success = cat.save
74
+
75
+ # Respond to update request
76
+ render :json => resp
77
+ end
78
+
79
+ # DELETE /admin/post-categories/:id
80
+ def admin_delete
81
+ return unless user_is_allowed('post_categories', 'delete')
82
+
83
+ resp = Caboose::StdClass.new
84
+ cat = PostCategory.find(params[:id])
85
+
86
+ if cat.posts.any?
87
+ resp.error = "Can't delete a post category that has posts in it."
88
+ else
89
+ resp.success = cat.destroy
90
+ resp.redirect = '/admin/post-categories'
91
+ end
92
+ render :json => resp
93
+ end
94
+
95
+
96
+ end
97
+ end
98
+
@@ -8,15 +8,16 @@ class Caboose::CorePlugin < Caboose::CaboosePlugin
8
8
 
9
9
  item = { 'id' => 'core', 'text' => 'Settings', 'children' => [] }
10
10
  item['children'] << { 'id' => 'blocktypes' , 'text' => 'AB Test Variants' , 'href' => '/admin/ab-variants' , 'modal' => false } if user.is_allowed('abvariants' , 'view')
11
- item['children'] << { 'id' => 'blocktypes' , 'text' => 'Block Types' , 'href' => '/admin/block-types' , 'modal' => false } if user.is_allowed('blocktypes' , 'view')
12
- item['children'] << { 'id' => 'fonts' , 'text' => 'Fonts' , 'href' => '/admin/fonts' , 'modal' => false } if user.is_allowed('fonts' , 'view') if site.use_fonts
11
+ item['children'] << { 'id' => 'blocktypes' , 'text' => 'Block Types' , 'href' => '/admin/block-types' , 'modal' => false } if user.is_allowed('blocktypes' , 'view') if site.is_master == true
12
+ item['children'] << { 'id' => 'fonts' , 'text' => 'Fonts' , 'href' => '/admin/fonts' , 'modal' => false } if user.is_allowed('fonts' , 'view') if site.use_fonts == true
13
13
  item['children'] << { 'id' => 'redirects' , 'text' => 'Permanent Redirects' , 'href' => '/admin/redirects' , 'modal' => false } if user.is_allowed('redirects' , 'view')
14
- item['children'] << { 'id' => 'permissions' , 'text' => 'Permissions' , 'href' => '/admin/permissions' , 'modal' => false } if user.is_allowed('permissions' , 'view')
14
+ item['children'] << { 'id' => 'permissions' , 'text' => 'Permissions' , 'href' => '/admin/permissions' , 'modal' => false } if user.is_allowed('permissions' , 'view')
15
+ item['children'] << { 'id' => 'post_categories' , 'text' => 'Post Categories' , 'href' => '/admin/post-categories' , 'modal' => false } if user.is_allowed('post_categories', 'view')
15
16
  item['children'] << { 'id' => 'roles' , 'text' => 'Roles' , 'href' => '/admin/roles' , 'modal' => false } if user.is_allowed('roles' , 'view')
16
17
  item['children'] << { 'id' => 'sites' , 'text' => 'Sites' , 'href' => '/admin/sites' , 'modal' => false } if user.is_allowed('sites' , 'view') if site.is_master == true
17
18
  item['children'] << { 'id' => 'smtp' , 'text' => 'SMTP (Mail)' , 'href' => '/admin/smtp' , 'modal' => false } if user.is_allowed('smtp' , 'view')
18
19
  item['children'] << { 'id' => 'social' , 'text' => 'Social Media' , 'href' => '/admin/social' , 'modal' => false } if user.is_allowed('social' , 'view')
19
- item['children'] << { 'id' => 'store' , 'text' => 'Store' , 'href' => '/admin/store' , 'modal' => false } if user.is_allowed('store' , 'view')
20
+ item['children'] << { 'id' => 'store' , 'text' => 'Store' , 'href' => '/admin/store' , 'modal' => false } if user.is_allowed('store' , 'view') if site.use_store == true
20
21
  item['children'] << { 'id' => 'users' , 'text' => 'Users' , 'href' => '/admin/users' , 'modal' => false } if user.is_allowed('users' , 'view')
21
22
  item['children'] << { 'id' => 'variables' , 'text' => 'Variables' , 'href' => '/admin/settings' , 'modal' => false } if user.is_allowed('settings' , 'view')
22
23
  nav << item if item['children'].count > 0
@@ -10,7 +10,11 @@ class Caboose::Role < ActiveRecord::Base
10
10
  has_many :permissions, :through => :role_permissions
11
11
  has_many :page_permissions
12
12
 
13
- attr_accessible :name, :description, :parent_id, :site_id
13
+ attr_accessible :id,
14
+ :name,
15
+ :description,
16
+ :parent_id,
17
+ :site_id
14
18
  attr_accessor :children
15
19
 
16
20
  def self.admin_role
@@ -19,7 +19,10 @@ width = 200
19
19
  <% id = item['id'].nil? ? i.to_s : item['id'] %>
20
20
  <% href = item['href'].nil? ? '#' : item['href'] %>
21
21
  <% modal = item['modal'].nil? ? false : item['modal'] %>
22
- <li id='nav_item_<%= id %>'><a href='<%= href %>'<%= raw (modal ? " rel='modal'" : "") %>><span class='icon'></span><span class='text'><%= item['text'] %></span></a>
22
+ <li id='nav_item_<%= id %>'>
23
+ <% if href != "#" %><a href='<%= href %>'<%= raw (modal ? " rel='modal'" : "") %>><% end %>
24
+ <span class='icon'></span><span class='text'><%= item['text'] %></span>
25
+ <% if href != "#" %></a><% end %>
23
26
  <% if (!item['children'].nil? && item['children'].count > 0) %>
24
27
  <ul>
25
28
  <% item['children'].each do |item2| %>
@@ -46,7 +46,11 @@ $(document).ready(function() {
46
46
  m = new ModelBinder({
47
47
  name: 'Block',
48
48
  id: <%= b.id %>,
49
+ <% if b.post_id %>
50
+ update_url: '/admin/posts/<%= b.post_id %>/blocks/<%= b.id %>',
51
+ <% else %>
49
52
  update_url: '/admin/pages/<%= b.page_id %>/blocks/<%= b.id %>',
53
+ <% end %>
50
54
  authenticity_token: '<%= form_authenticity_token %>',
51
55
  attributes: [{
52
56
  name: 'block_type_id',
@@ -3,6 +3,7 @@
3
3
 
4
4
  <form action='/admin/pages/<%= @page.id %>' method='put' id='layout_form'>
5
5
  <input type='hidden' name='authenticity_token' value='<%= form_authenticity_token %>' />
6
+ <h4 style="color:red;">WARNING: Changing the page layout will delete all existing content from the page.</h4>
6
7
  <p><select name='block_type_id'>
7
8
  <option value=''>-- Select a layout --</option>
8
9
  <% cat_ids = Caboose::BlockTypeCategory.layouts.collect{ |cat| cat.id } %>
@@ -0,0 +1,66 @@
1
+ <h1>Edit Category</h1>
2
+
3
+ <p><div class="push-below" id="postcategory_<%= @category.id %>_name"></div></p>
4
+
5
+ <h2>Posts</h2>
6
+
7
+ <% if @category.posts.any? %>
8
+ <ul>
9
+ <% @category.posts.each do |post| %>
10
+ <li><a href="/admin/posts/<%= post.id %>"><%= post.title %></a></li>
11
+ <% end %>
12
+ </ul>
13
+ <% else %>
14
+ <p>This category has no associated posts.</p>
15
+ <% end %>
16
+
17
+ <div id="message"></div>
18
+ <p>
19
+ <input type="button" value="< Back" onclick="window.location='/admin/post-categories';" />
20
+ <input type="button" value="Delete Category" onclick="delete_category(<%= @category.id %>)" />
21
+ </p>
22
+
23
+ <% content_for :caboose_css do %>
24
+ <style>
25
+ .push-below { margin-bottom: 24px; }
26
+ </style>
27
+ <% end %>
28
+
29
+ <% content_for :caboose_js do %>
30
+ <%= javascript_include_tag "caboose/model/all" %>
31
+ <script type='text/javascript'>
32
+
33
+ $(document).ready(function() {
34
+ m = new ModelBinder({
35
+ name: 'PostCategory',
36
+ id: <%= @category.id %>,
37
+ update_url: '/admin/post-categories/<%= @category.id %>',
38
+ authenticity_token: '<%= form_authenticity_token %>',
39
+ attributes: [
40
+
41
+ { name: 'name' , nice_name: 'Name' , type: 'text' , value: <%= raw Caboose.json(@category.name) %> , width: 400 }
42
+ ]
43
+ });
44
+ });
45
+
46
+ function delete_category(cat_id, confirm) {
47
+ if (!confirm) {
48
+ var p = $('<p/>').addClass('note error').css('margin-bottom', '10px')
49
+ .append("Are you sure you want to delete the category?<br />This can't be undone.<br /><br />")
50
+ .append($('<input/>').attr('type', 'button').val('Yes').click(function() { delete_category(cat_id, true); })).append(' ')
51
+ .append($('<input/>').attr('type', 'button').val('No').click(function() { $('#message').empty(); }));
52
+ $('#message').empty().append(p);
53
+ return;
54
+ }
55
+ $('#message').html("<p class='loading'>Deleting the category...</p>");
56
+ $.ajax({
57
+ url: '/admin/post-categories/' + cat_id,
58
+ type: 'delete',
59
+ success: function(resp) {
60
+ if (resp.error) $('#message').html("<p class='note error'>" + resp.error + "</p>");
61
+ if (resp.redirect) window.location = resp.redirect;
62
+ }
63
+ });
64
+ }
65
+ </script>
66
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <h1>Post Categories</h1>
2
+ <a href='/admin/post-categories/new'>New Category</a>
3
+
4
+ <% cats = Caboose::PostCategory.where(:site_id => @site.id).order(:name).all %>
5
+ <ul>
6
+ <% cats.each do |c| %>
7
+ <li><a href="/admin/post-categories/<%= c.id %>" title="<%= c.name %>"><%= c.name %></a>
8
+ <% end %>
9
+ </ul>
10
+
11
+
12
+ <% content_for :caboose_js do %>
13
+ <script type='text/javascript'>
14
+
15
+ </script>
16
+ <% end %>
@@ -0,0 +1,43 @@
1
+ <h1>New Category</h1>
2
+
3
+ <form action="/admin/categories" method="post" id="new_form">
4
+ <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>" />
5
+ <p><input type="text" name="name" id='name' placeholder="Category Name" /></p>
6
+ <div id="message"></div>
7
+ <input type="button" value="< Back" onclick="window.location='/admin/post-categories';" />
8
+ <input type="submit" value="Add Category" onclick="add_category(); return false" />
9
+ </form>
10
+
11
+ <% content_for :caboose_js do %>
12
+ <%= javascript_include_tag "caboose/model/all" %>
13
+ <script type='text/javascript'>
14
+
15
+ function add_category() {
16
+ $('#message').html("<p class='loading'>Adding category...</p>");
17
+ var stay = $('#stay').prop('checked');
18
+
19
+ $.ajax({
20
+ url: '/admin/post-categories',
21
+ type: 'post',
22
+ data: $('#new_form').serialize(),
23
+ success: function(resp) {
24
+ if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
25
+ if (resp.redirect)
26
+ {
27
+ if (stay)
28
+ {
29
+ $('#name').val('');
30
+ get_category_options();
31
+ $('#message').html("<p class='note succes'>The category has been added successfully.</p>");
32
+ setTimeout(function() { $('#message').empty(); }, 2000);
33
+ }
34
+ else if (resp.redirect)
35
+ window.location = resp.redirect;
36
+ }
37
+ }
38
+ });
39
+ }
40
+
41
+
42
+ </script>
43
+ <% end %>
@@ -46,7 +46,7 @@ user_ids = [] if user_ids.nil?
46
46
  <div id='members'>
47
47
  <table class='data'>
48
48
  <tr><th>User</th><th>None</th><th>User</th><th>Admin</th></tr>
49
- <% Caboose::User.reorder('last_name, first_name').all.each do |u| %>
49
+ <% Caboose::User.where(:site_id => @site.id).reorder('last_name, first_name').all.each do |u| %>
50
50
  <tr>
51
51
  <td><%= u.first_name %> <%= u.last_name %> (<%= u.email %>)</td>
52
52
  <td align='center'><input type='radio' name='user<%= u.id %>' <%= !admin_ids.include?(u.id) && !user_ids.include?(u.id) ? "checked='true'" : '' %> onclick="remove_site_membership(<%= s.id %>, <%= u.id %>);" /></td>
data/config/routes.rb CHANGED
@@ -372,6 +372,23 @@ Caboose::Engine.routes.draw do
372
372
  get "/admin/posts" => "posts#admin_index"
373
373
  post "/admin/posts" => "posts#admin_add"
374
374
  delete "/admin/posts/:id" => "posts#admin_delete"
375
+
376
+ #=============================================================================
377
+ # Post Categories
378
+ #=============================================================================
379
+
380
+ get "/admin/post-categories" => "post-categories#admin_index"
381
+ get "/admin/post-categories/new" => "post-categories#admin_new"
382
+ get "/admin/post-categories/options" => "post-categories#admin_options"
383
+ get '/admin/post-categories/status-options' => 'post-categories#admin_status_options'
384
+ get "/admin/post-categories/:id/sort-children" => "post-categories#admin_sort_children"
385
+ put "/admin/post-categories/:id/children/sort-order" => "post-categories#admin_update_sort_order"
386
+ get "/admin/post-categories/:id/products/json" => "post-categories#admin_category_products"
387
+ get "/admin/post-categories/:id" => "post-categories#admin_edit"
388
+ put "/admin/post-categories/:id" => "post-categories#admin_update"
389
+ post "/admin/post-categories/:id" => "post-categories#admin_update"
390
+ post "/admin/post-categories" => "post-categories#admin_add"
391
+ delete "/admin/post-categories/:id" => "post-categories#admin_delete"
375
392
 
376
393
  #=============================================================================
377
394
  # Google Spreadsheets
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.5.214'
2
+ VERSION = '0.5.215'
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.5.214
4
+ version: 0.5.215
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-15 00:00:00.000000000 Z
11
+ date: 2015-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -554,6 +554,7 @@ files:
554
554
  - app/controllers/caboose/page_permissions_controller.rb
555
555
  - app/controllers/caboose/pages_controller.rb
556
556
  - app/controllers/caboose/permissions_controller.rb
557
+ - app/controllers/caboose/post_categories_controller.rb
557
558
  - app/controllers/caboose/posts_controller.rb
558
559
  - app/controllers/caboose/product_images_controller.rb
559
560
  - app/controllers/caboose/products_controller.rb
@@ -847,6 +848,9 @@ files:
847
848
  - app/views/caboose/permissions/edit.html.erb
848
849
  - app/views/caboose/permissions/index.html.erb
849
850
  - app/views/caboose/permissions/new.html.erb
851
+ - app/views/caboose/post_categories/admin_edit.html.erb
852
+ - app/views/caboose/post_categories/admin_index.html.erb
853
+ - app/views/caboose/post_categories/admin_new.html.erb
850
854
  - app/views/caboose/posts/_admin_footer.html.erb
851
855
  - app/views/caboose/posts/_admin_header.html.erb
852
856
  - app/views/caboose/posts/admin_delete_form.html.erb