spud_blog 0.8.18 → 0.9.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 (42) hide show
  1. data/app/assets/images/spud/admin/news_thumb@2x.png +0 -0
  2. data/app/assets/javascripts/spud/admin/post_categories.js +116 -2
  3. data/app/assets/javascripts/spud/admin/posts.js +52 -10
  4. data/app/assets/stylesheets/spud/admin/posts.css +93 -38
  5. data/app/controllers/blog_controller.rb +2 -4
  6. data/app/controllers/news_controller.rb +4 -4
  7. data/app/controllers/spud/admin/news_posts_controller.rb +2 -2
  8. data/app/controllers/spud/admin/post_categories_controller.rb +14 -8
  9. data/app/controllers/spud/admin/posts_controller.rb +1 -1
  10. data/app/controllers/spud/blog/sitemaps_controller.rb +2 -2
  11. data/app/models/spud_post_categories_post.rb +5 -0
  12. data/app/models/spud_post_category.rb +12 -7
  13. data/app/models/spud_post_category_sweeper.rb +3 -3
  14. data/app/models/spud_post_comment_sweeper.rb +4 -4
  15. data/app/models/spud_post_sweeper.rb +5 -5
  16. data/app/views/blog/index.html.erb +6 -2
  17. data/app/views/blog/show.html.erb +1 -1
  18. data/app/views/news/index.html.erb +6 -2
  19. data/app/views/news/show.html.erb +2 -2
  20. data/app/views/spud/admin/news_posts/index.html.erb +6 -1
  21. data/app/views/spud/admin/news_posts/new.html.erb +1 -1
  22. data/app/views/spud/admin/post_categories/_category.html.erb +14 -0
  23. data/app/views/spud/admin/post_categories/_form.html.erb +17 -27
  24. data/app/views/spud/admin/post_categories/edit.html.erb +1 -1
  25. data/app/views/spud/admin/post_categories/index.html.erb +6 -29
  26. data/app/views/spud/admin/posts/_category.html.erb +7 -7
  27. data/app/views/spud/admin/posts/_form.html.erb +70 -67
  28. data/app/views/spud/admin/posts/index.html.erb +5 -0
  29. data/app/views/spud/admin/posts/new.html.erb +1 -1
  30. data/db/migrate/20121113135812_add_nested_set_to_post_categories.rb +21 -0
  31. data/lib/spud_blog/configuration.rb +3 -4
  32. data/lib/spud_blog/engine.rb +6 -6
  33. data/lib/spud_blog/version.rb +1 -1
  34. data/test/dummy/log/development.log +36 -0
  35. metadata +44 -19
  36. data/app/assets/javascripts/spud/admin/news_posts.js +0 -2
  37. data/app/assets/javascripts/spud/admin/post_comments.js +0 -2
  38. data/app/assets/stylesheets/spud/admin/news_posts.css +0 -4
  39. data/app/assets/stylesheets/spud/admin/post_categories.css +0 -4
  40. data/app/assets/stylesheets/spud/admin/post_comments.css +0 -4
  41. data/app/views/layouts/spud/admin/post.html.erb +0 -5
  42. data/app/views/spud/admin/post_categories/show.html.erb +0 -0
@@ -1,2 +1,116 @@
1
- // Place all the behaviors and hooks related to the matching controller here.
2
- // All this logic will automatically be available in application.js.
1
+ Spud = (typeof(Spud) == 'undefined') ? {} : Spud;
2
+ Spud.Admin = (typeof(Spud.Admin) == 'undefined') ? {} : Spud.Admin;
3
+
4
+ Spud.Admin.PostCategories = new function(){
5
+
6
+ var self = this;
7
+ var _cachedCategoryIndex;
8
+
9
+ this.index = function(){
10
+ $('.spud_blog_manage_categories').live('click', self.clickedManageCategories);
11
+ $('.spud_blog_category_add_new').live('click', self.clickedAddNewCategory);
12
+ $('.spud_blog_category_edit').live('click', self.clickedEditCategory);
13
+ $('.spud_blog_manage_categories_back').live('click', self.clickedBackButton);
14
+ $('.spud_blog_manage_categories_save').live('click', self.submittedPostCategoryForm);
15
+ $('.spud_post_category_form').live('submit', self.submittedPostCategoryForm);
16
+ $('.spud_blog_category_delete').live('click', self.clickedDeleteCategory);
17
+ };
18
+
19
+ this.clickedManageCategories = function(e){
20
+ e.preventDefault();
21
+ $.ajax({
22
+ url: $(this).attr('href'),
23
+ success: function(html, textStatus, jqXHR){
24
+ _cachedCategoryIndex = html;
25
+ displayModalDialogWithOptions({
26
+ title: 'Manage Categories',
27
+ html: html,
28
+ buttons: {
29
+ 'spud_blog_manage_categories_back': 'Back',
30
+ 'spud_blog_manage_categories_save btn-primary': 'Save'
31
+ }
32
+ });
33
+ }
34
+ });
35
+ };
36
+
37
+ this.clickedAddNewCategory = function(e){
38
+ e.preventDefault();
39
+ $.ajax({
40
+ url: $(this).attr('href'),
41
+ dataType: 'html',
42
+ success: function(html, textStatus, jqXHR){
43
+ $('.modal-footer button[data-dismiss="modal"]').hide();
44
+ $('.spud_blog_manage_categories_save, .spud_blog_manage_categories_back').show();
45
+ $('.spud_blog_category_manager').replaceWith(html);
46
+ }
47
+ });
48
+ };
49
+
50
+ this.clickedEditCategory = function(e){
51
+ e.preventDefault();
52
+ $.ajax({
53
+ url: $(this).attr('href'),
54
+ dataType: 'html',
55
+ success: function(html, textStatus, jqXHR){
56
+ $('.modal-footer button[data-dismiss="modal"]').hide();
57
+ $('.spud_blog_manage_categories_save, .spud_blog_manage_categories_back').show();
58
+ $('.spud_blog_category_manager').replaceWith(html);
59
+ }
60
+ });
61
+ };
62
+
63
+ this.clickedBackButton = function(e){
64
+ e.preventDefault();
65
+ $('.spud_post_category_form').replaceWith(_cachedCategoryIndex);
66
+ $('.modal-footer button[data-dismiss="modal"]').show();
67
+ $('.spud_blog_manage_categories_save, .spud_blog_manage_categories_back').hide();
68
+ };
69
+
70
+ this.clickedDeleteCategory = function(e){
71
+ e.preventDefault();
72
+ if(window.confirm('Are you sure you want to delete this category?')){
73
+ $.ajax({
74
+ url: $(this).attr('href'),
75
+ data: {_method: 'delete'},
76
+ type: 'delete',
77
+ dataType: 'html',
78
+ success: function(html, textStatus, jqXHR){
79
+ _cachedCategoryIndex = html;
80
+ $('.spud_blog_category_manager').replaceWith(html);
81
+ }
82
+ });
83
+ }
84
+ };
85
+
86
+ this.submittedPostCategoryForm = function(e){
87
+ e.preventDefault();
88
+ var form = $('.spud_post_category_form');
89
+ $.ajax({
90
+ url: form.attr('action'),
91
+ data: form.serialize(),
92
+ type: 'post',
93
+ dataType: 'html',
94
+ success: self.savedPostCategorySuccess,
95
+ error: self.savePostCategoryError
96
+ });
97
+ };
98
+
99
+ this.savedPostCategorySuccess = function(html, textStatus, jqXHR){
100
+ _cachedCategoryIndex = html;
101
+ $('.spud_blog_manage_categories_save, .spud_blog_manage_categories_back').hide();
102
+ $('.spud_post_category_form').replaceWith(html);
103
+ };
104
+
105
+ this.savePostCategoryError = function(jqXHR, textStatus, errorThrown){
106
+ if(jqXHR.status == 422){
107
+ var html = jqXHR.responseText;
108
+ $('.spud_post_category_form').replaceWith(html);
109
+ }
110
+ else{
111
+ if(window.console){
112
+ console.error('Oh Snap:', arguments);
113
+ }
114
+ }
115
+ };
116
+ };
@@ -1,5 +1,4 @@
1
- // Place all the behaviors and hooks related to the matching controller here.
2
- // All this logic will automatically be available in application.js.
1
+ //= require spud/admin/post_categories
3
2
 
4
3
  Spud = (typeof(Spud) == 'undefined') ? {} : Spud;
5
4
  Spud.Admin = (typeof(Spud.Admin) == 'undefined') ? {} : Spud.Admin;
@@ -9,21 +8,64 @@ Spud.Admin.Posts = new function(){
9
8
  var self = this;
10
9
 
11
10
  this.edit = function(){
12
- $('input[type=submit],.close_dialog').button();
13
11
  initDatePicker();
14
12
  initTinyMCE();
15
- $('#spud_post_new_category_form button').live('click', self.didSubmitCategory);
13
+ $('.spud_post_add_category').live('click', self.clickedPostAddCategory);
14
+ $('.save_post_category_button').live('click', self.submittedPostCategoryForm);
15
+ $('.spud_post_category_form').live('submit', self.submittedPostCategoryForm);
16
16
  };
17
17
 
18
- this.didSubmitCategory = function(event){
18
+ this.clickedPostAddCategory = function(e){
19
+ e.preventDefault();
19
20
  $.ajax({
20
- url: $('#spud_post_new_category_path').val(),
21
+ url: $(this).attr('href'),
22
+ dataType: 'html',
23
+ success: function(html, textStatus, jqXHR){
24
+ displayModalDialogWithOptions({
25
+ title: 'Add Category',
26
+ html: html
27
+ });
28
+ }
29
+ });
30
+ };
31
+
32
+ this.submittedPostCategoryForm = function(e){
33
+ e.preventDefault();
34
+ var form = $('.spud_post_category_form');
35
+ $.ajax({
36
+ url: form.attr('action'),
37
+ data: form.serialize(),
21
38
  type: 'post',
22
39
  dataType: 'json',
23
- data: {
24
- 'spud_post_category[name]': $('#spud_post_new_category_name').val(),
25
- 'spud_post_category[parent_id]': $('#spud_post_new_category_parent_id').val()
26
- }
40
+ success: self.savedPostCategorySuccess,
41
+ error: self.savePostCategoryError
27
42
  });
28
43
  };
44
+
45
+ this.savedPostCategorySuccess = function(data, textStatus, jqXHR){
46
+ var checkbox = '';
47
+ checkbox += '<li class="spud_post_form_category" data-id="'+data.id+'">';
48
+ checkbox += '<input id="spud_post_category_'+data.id+'" name="spud_post[category_ids][]" type="checkbox" value="'+data.id+'" checked>' + "\n";
49
+ checkbox += '<label for="spud_post_category_'+data.id+'">'+data.name+'</label>';
50
+ checkbox += '<ul></ul></li>';
51
+ if(data.parent_id > 0){
52
+ $('.spud_post_form_category[data-id="'+data.parent_id+'"]>ul').append(checkbox);
53
+ }
54
+ else{
55
+ $('.spud_post_categories_form').append(checkbox);
56
+ }
57
+ hideModalDialog();
58
+ };
59
+
60
+ this.savePostCategoryError = function(jqXHR, textStatus, errorThrown){
61
+ if(jqXHR.status == 422){
62
+ var html = jqXHR.responseText;
63
+ $('.spud_post_category_form').replaceWith(html);
64
+ }
65
+ else{
66
+ if(window.console){
67
+ console.error('Oh Snap:', arguments);
68
+ }
69
+ }
70
+ };
29
71
  };
@@ -1,52 +1,107 @@
1
- /*
2
- Place all the styles related to the matching controller here.
3
- They will automatically be included in application.css.
4
- */
1
+ /* Form Layout
2
+ ---------------- */
3
+ .spud_post_form_fieldset{
4
+ margin: 30px 0;
5
+ }
6
+ .spud_post_form_col{
7
+ width: 400px;
8
+ float: left;
9
+ margin: 0 20px;
10
+ }
11
+ .spud_post_form_input_group{
12
+ border: 1px dashed #E5E5E5;
13
+ padding: 4px;
14
+ margin: 0 0 10px;
15
+ }
16
+ .spud_post_form_input_group input{
17
+ display: inline-block;
18
+ }
19
+ .spud_post_form_input_group select{
20
+ margin-bottom: 20px;
21
+ }
22
+ .spud_post_form_input_group label{
23
+ margin: 0 10px 0 0;
24
+ padding: 0;
25
+ }
26
+ .spud_post_form_row{
27
+ margin: 5px 0;
28
+ }
29
+ .spud_post_form_help_block{
30
+ font-size: 12px;
31
+ font-style: italic;
32
+ margin: 0 0 20px;
33
+ display: block;
34
+ }
35
+ #spud_post_meta_keywords, #spud_post_meta_description{
36
+ width: 380px;
37
+ }
38
+ #spud_post_meta_description{
39
+ height: 100px;
40
+ }
5
41
 
6
- #spud_post_categories_form{
42
+ /* Categories
43
+ -------------- */
44
+ .spud_post_categories_form{
45
+ white-space: nowrap;
7
46
  list-style-type: none;
8
- margin: 15px 0 15px 20px;
9
- height: 200px;
10
- width: 400px;
47
+ margin: 15px 0;
48
+ max-height: 400px;
49
+ min-height: 200px;
11
50
  background: white;
12
- border: 1px solid #ccc;
13
- padding: 10px;
14
- overflow: scroll;
51
+ border: 1px solid #E5E5E5;
52
+ padding: 10px 0 10px 15px;
53
+ overflow: auto;
54
+ border-radius: 5px;
15
55
  }
16
- #spud_post_categories_form ul{
56
+ .spud_post_categories_form ul{
17
57
  list-style-type: none;
18
- margin: 3px 0;
19
- padding: 0 0 0 20px;
58
+ margin: 0;
59
+ padding: 0 0 0 15px;
60
+ }
61
+ .spud_post_categories_form input{
62
+ display: inline-block;
63
+ margin: 0;
20
64
  }
21
- #spud_post_categories_form label{
22
- float: none;
23
- text-align: left;
65
+ .spud_post_categories_form label{
24
66
  display: inline;
25
67
  }
26
- #spud_post_new_category_form{
27
- background: white;
28
- border: 1px solid #ccc;
29
- margin: 15px 0 15px 20px;
30
- padding: 10px 20px;
31
- overflow: hidden;
32
- width: 380px;
68
+ .spud_post_form_category{
69
+ margin: 4px 0;
33
70
  }
34
- #spud_post_new_category_form h5{
35
- margin: 0 0 5px;
71
+
72
+ /* Category Manager
73
+ ------------------- */
74
+ .spud_blog_category_add_new{
75
+ float: right;
36
76
  }
37
- #spud_post_new_category_form div{
38
- margin: 5px 0;
77
+ .spud_blog_category_manager{
78
+ padding-right: 10px;
39
79
  }
40
- #spud_post_new_category_form label{
41
- float: none;
42
- margin: 0 1px 0 0;
43
- font-size: 12px;
44
- display: inline-block;
45
- width: 50px;
80
+ .spud_blog_category_manager ul{
81
+
82
+ }
83
+ .spud_blog_category_manager_list{
84
+ clear: right;
85
+ padding: 0 0 0 20px;
86
+ margin: 10px 0;
87
+ min-height: 100px;
88
+ max-height: 350px;
89
+ overflow: auto;
90
+ }
91
+ .spud_blog_category_manager_item{
92
+ position: relative;
93
+ margin: 10px 0;
94
+ /*border: 1px solid #E5E5E5;*/
95
+ }
96
+ .spud_blog_category_manager_item_children{
97
+ margin: 0;
98
+ padding: 0 0 0 15px;
46
99
  }
47
- #spud_post_new_category_form input[type=button]{
48
- margin-left: 55px;
100
+ .spud_blog_category_manager_item_actions{
101
+ position: absolute;
102
+ right: 0;
103
+ margin: 0 0 0 10px;
49
104
  }
50
- #spud_post_site_options label{
51
- padding: 5px 10px 0 0;
105
+ .spud_blog_manage_categories_save, .spud_blog_manage_categories_back{
106
+ display: none;
52
107
  }
@@ -8,11 +8,11 @@ class BlogController < ApplicationController
8
8
  caches_action :show, :index,
9
9
  :expires => Spud::Blog.config.action_caching_duration,
10
10
  :if => Proc.new{ |c|
11
- Spud::Blog.config.enable_action_caching && !(c.params[:page] && c.params[:page].to_i > 1) && (SpudPost.where(:is_news => false).future_posts.count == 0)
11
+ Spud::Blog.cache_mode == :action && !(c.params[:page] && c.params[:page].to_i > 1) && (SpudPost.where(:is_news => false).future_posts.count == 0)
12
12
  }
13
13
 
14
14
  after_filter :only => [:show, :index] do |c|
15
- if Spud::Blog.enable_full_page_caching && !(c.params[:page] && c.params[:page].to_i > 1)
15
+ if Spud::Blog.cache_mode == :full_page && !(c.params[:page] && c.params[:page].to_i > 1)
16
16
  if (SpudPost.where(:is_news => false).future_posts.count == 0)
17
17
  c.cache_page(nil, nil, false)
18
18
  end
@@ -30,8 +30,6 @@ class BlogController < ApplicationController
30
30
  end
31
31
  end
32
32
 
33
-
34
- logger.debug("Page = #{page}")
35
33
  @posts = SpudPost.public_blog_posts(page, Spud::Blog.config.posts_per_page)
36
34
  if Spud::Core.config.multisite_mode_enabled
37
35
  @posts = @posts.for_spud_site(current_site_id)
@@ -6,11 +6,11 @@ class NewsController < ApplicationController
6
6
  caches_action :show, :index,
7
7
  :expires => Spud::Blog.config.action_caching_duration,
8
8
  :if => Proc.new{ |c|
9
- Spud::Blog.config.enable_action_caching && !(c.params[:page] && c.params[:page].to_i > 1) && (SpudPost.where(:is_news => true).future_posts.count == 0)
9
+ Spud::Blog.cache_mode == :action && !(c.params[:page] && c.params[:page].to_i > 1) && (SpudPost.where(:is_news => true).future_posts.count == 0)
10
10
  }
11
11
 
12
12
  after_filter :only => [:show, :index] do |c|
13
- if Spud::Blog.enable_full_page_caching && !(c.params[:page] && c.params[:page].to_i > 1)
13
+ if Spud::Blog.cache_mode == :full_page && !(c.params[:page] && c.params[:page].to_i > 1)
14
14
  if (SpudPost.where(:is_news => true).future_posts.count == 0)
15
15
  c.cache_page(nil, nil, false)
16
16
  end
@@ -23,7 +23,7 @@ class NewsController < ApplicationController
23
23
  @posts = SpudPost.public_news_posts(params[:page], Spud::Blog.config.posts_per_page)
24
24
  if Spud::Core.config.multisite_mode_enabled
25
25
  @posts = @posts.for_spud_site(current_site_id)
26
- end
26
+ end
27
27
  respond_with @posts
28
28
  end
29
29
 
@@ -77,4 +77,4 @@ class NewsController < ApplicationController
77
77
  end
78
78
  end
79
79
 
80
- end
80
+ end
@@ -1,6 +1,6 @@
1
1
  class Spud::Admin::NewsPostsController < Spud::Admin::ApplicationController
2
2
 
3
- layout 'spud/admin/post'
3
+ layout 'spud/admin/detail'
4
4
  respond_to :html, :xml, :json
5
5
  before_filter :find_post, :only => [:show, :edit, :update, :destroy]
6
6
  add_breadcrumb 'News Posts', :spud_admin_news_posts_path
@@ -59,4 +59,4 @@ class Spud::Admin::NewsPostsController < Spud::Admin::ApplicationController
59
59
  end
60
60
  end
61
61
 
62
- end
62
+ end
@@ -1,14 +1,13 @@
1
1
  class Spud::Admin::PostCategoriesController < Spud::Admin::ApplicationController
2
2
 
3
- layout 'spud/admin/post'
4
- respond_to :html, :xml, :json
3
+ layout false
4
+ respond_to :html, :json
5
+
5
6
  before_filter :find_category, :only => [:show, :edit, :update, :destroy]
6
- add_breadcrumb 'Post Categories', :spud_admin_post_categories_path
7
- belongs_to_spud_app :post_categories
8
7
  cache_sweeper :spud_post_category_sweeper, :only => [:create, :update, :destroy]
9
8
 
10
9
  def index
11
- @post_categories = SpudPostCategory.order('name asc').includes(:posts).paginate(:page => params[:page], :per_page => 15)
10
+ @post_categories = SpudPostCategory.grouped
12
11
  respond_with @post_categories
13
12
  end
14
13
 
@@ -20,8 +19,10 @@ class Spud::Admin::PostCategoriesController < Spud::Admin::ApplicationController
20
19
  if @post_category.update_attributes(params[:spud_post_category])
21
20
  flash[:notice] = 'Post Category was successfully updated'
22
21
  expire_post_actions
22
+ respond_with @post_category, :location => spud_admin_post_categories_path
23
+ else
24
+ render 'new', :status => 422
23
25
  end
24
- respond_with @post_category, :location => spud_admin_post_categories_path
25
26
  end
26
27
 
27
28
  def new
@@ -34,16 +35,21 @@ class Spud::Admin::PostCategoriesController < Spud::Admin::ApplicationController
34
35
  if @post_category.save
35
36
  flash[:notice] = 'Post Category was successfully created'
36
37
  expire_post_actions
38
+ respond_with @post_category, :location => spud_admin_post_categories_path
39
+ else
40
+ render 'new', :status => 422
37
41
  end
38
- respond_with @post_category, :location => spud_admin_post_categories_path
39
42
  end
40
43
 
41
44
  def destroy
42
45
  if @post_category.destroy
43
46
  flash[:notice] = 'Post Category was successfully deleted'
44
47
  expire_post_actions
48
+ @post_categories = SpudPostCategory.grouped
49
+ render 'index'
50
+ else
51
+ respond_with @post_category, :location => spud_admin_post_categories_path
45
52
  end
46
- respond_with @post_category, :location => spud_admin_post_categories_path
47
53
  end
48
54
 
49
55
  private
@@ -1,6 +1,6 @@
1
1
  class Spud::Admin::PostsController < Spud::Admin::ApplicationController
2
2
 
3
- layout 'spud/admin/post'
3
+ layout 'spud/admin/detail'
4
4
  respond_to :html, :xml, :json
5
5
  before_filter :find_post, :only => [:show, :edit, :update, :destroy]
6
6
  add_breadcrumb 'Blog Posts', :spud_admin_posts_path
@@ -1,7 +1,7 @@
1
1
  class Spud::Blog::SitemapsController < Spud::ApplicationController
2
2
  respond_to :xml
3
- caches_action :show, :expires_in => 1.day, :if => Proc.new{ |c| Spud::Blog.config.enable_action_caching }
4
- caches_page :show, :if => Proc.new{ |c| Spud::Blog.config.enable_full_page_caching }
3
+ caches_action :show, :expires_in => 1.day, :if => Proc.new{ |c| Spud::Blog.cache_mode == :action }
4
+ caches_page :show, :if => Proc.new{ |c| Spud::Blog.cache_mode == :full_page }
5
5
  def show
6
6
  @posts = SpudPost.publicly.all
7
7
  respond_with @pages
@@ -0,0 +1,5 @@
1
+ class SpudPostCategoriesPost < ActiveRecord::Base
2
+ attr_accessible :spud_post_id, :spud_post_category_id
3
+ belongs_to :spud_post
4
+ belongs_to :spud_post_category
5
+ end
@@ -1,22 +1,25 @@
1
1
  class SpudPostCategory < ActiveRecord::Base
2
2
  searchable
3
+ acts_as_nested_set
4
+
3
5
  has_and_belongs_to_many :posts,
4
6
  :class_name => 'SpudPost',
5
7
  :join_table => 'spud_post_categories_posts',
6
8
  :foreign_key => 'spud_post_category_id'
7
- has_many :children, :class_name => 'SpudPostCategory', :foreign_key => 'parent_id'
8
9
 
9
10
  validates_presence_of :name, :url_name
10
11
  validates_uniqueness_of :name, :url_name
11
- validate :parent_is_valid
12
12
  before_validation :set_url_name
13
13
 
14
14
  before_destroy :update_child_categories
15
15
 
16
- scope :top_level, where(:parent_id => 0).order('name asc')
17
-
18
16
  attr_accessible :name, :url_name, :parent_id
19
17
 
18
+ # tell awesome_nested_set not to destroy descendants
19
+ def skip_before_destroy
20
+ return true
21
+ end
22
+
20
23
  def self.grouped
21
24
  return all.group_by(&:parent_id)
22
25
  end
@@ -27,7 +30,7 @@ class SpudPostCategory < ActiveRecord::Base
27
30
  def self.options_for_categories(config={})
28
31
  collection = config[:collection] || self.grouped
29
32
  level = config[:level] || 0
30
- parent_id = config[:parent_id] || 0
33
+ parent_id = config[:parent_id] || nil
31
34
  filter = config[:filter] || nil
32
35
  value = config[:value] || :id
33
36
  list = []
@@ -43,8 +46,9 @@ class SpudPostCategory < ActiveRecord::Base
43
46
  end
44
47
 
45
48
  def posts_with_children
46
- # TO DO: This should return all posts that belong to the instance category and all its child categories
47
- return posts
49
+ category_ids = self.self_and_ancestors.collect{ |category| category.id }
50
+ post_ids = SpudPostCategoriesPost.where(:spud_post_category_id => category_ids).collect{ |it| it.spud_post_id }
51
+ return SpudPost.where(:id => post_ids)
48
52
  end
49
53
 
50
54
  private
@@ -61,5 +65,6 @@ class SpudPostCategory < ActiveRecord::Base
61
65
 
62
66
  def update_child_categories
63
67
  self.children.update_all(:parent_id => self.parent_id)
68
+ self.class.rebuild!
64
69
  end
65
70
  end
@@ -13,7 +13,7 @@ class SpudPostCategorySweeper < ActionController::Caching::Sweeper
13
13
  private
14
14
 
15
15
  def expire_cache_for(record)
16
- if Spud::Blog.config.enable_action_caching
16
+ if Spud::Blog.config.cache_mode = :action
17
17
  SpudPost.find_each do |p|
18
18
  if p.is_news && Spud::Blog.config.news_enabled
19
19
  expire_action news_post_url(p.url_name)
@@ -25,7 +25,7 @@ class SpudPostCategorySweeper < ActionController::Caching::Sweeper
25
25
  expire_action blog_url if Spud::Blog.config.blog_enabled
26
26
  expire_action spud_blog_sitemap_url
27
27
  end
28
- if Spud::Blog.config.enable_full_page_caching
28
+ if Spud::Blog.config.cache_mode = :full_page
29
29
  SpudPost.find_each do |p|
30
30
  if p.is_news && Spud::Blog.config.news_enabled
31
31
  expire_page news_post_path(p.url_name)
@@ -38,4 +38,4 @@ class SpudPostCategorySweeper < ActionController::Caching::Sweeper
38
38
  expire_page spud_blog_sitemap_path(:format => :xml)
39
39
  end
40
40
  end
41
- end
41
+ end
@@ -1,5 +1,5 @@
1
1
  class SpudPostCommentSweeper < ActionController::Caching::Sweeper
2
-
2
+
3
3
  observe SpudPostComment
4
4
 
5
5
  def after_save(record)
@@ -14,14 +14,14 @@ class SpudPostCommentSweeper < ActionController::Caching::Sweeper
14
14
 
15
15
  def expire_cache_for(record)
16
16
  unless record.post.nil?
17
- if Spud::Blog.config.enable_action_caching
17
+ if Spud::Blog.config.cache_mode == :action
18
18
  if record.post.is_news
19
19
  expire_action news_post_url(record.post.url_name)
20
20
  else
21
21
  expire_action blog_post_url(record.post.url_name)
22
22
  end
23
23
  end
24
- if Spud::Blog.config.enable_full_page_caching
24
+ if Spud::Blog.config.cache_mode == :full_page
25
25
  if record.post.is_news
26
26
  expire_page news_post_path(record.post.url_name)
27
27
  else
@@ -30,4 +30,4 @@ class SpudPostCommentSweeper < ActionController::Caching::Sweeper
30
30
  end
31
31
  end
32
32
  end
33
- end
33
+ end
@@ -1,5 +1,5 @@
1
1
  class SpudPostSweeper < ActionController::Caching::Sweeper
2
-
2
+
3
3
  observe SpudPost
4
4
 
5
5
  def after_create(record)
@@ -17,10 +17,10 @@ class SpudPostSweeper < ActionController::Caching::Sweeper
17
17
  private
18
18
 
19
19
  def expire_cache_for(record)
20
- if Spud::Blog.config.enable_action_caching
20
+ if Spud::Blog.config.cache_mode == :action
21
21
  expire_action spud_blog_sitemap_url
22
22
  if !record.is_news && Spud::Blog.config.blog_enabled
23
- expire_action blog_url
23
+ expire_action blog_url
24
24
  expire_action blog_url(:format => :rss)
25
25
  expire_action blog_post_url(record.url_name)
26
26
  elsif Spud::Blog.config.news_enabled
@@ -29,7 +29,7 @@ class SpudPostSweeper < ActionController::Caching::Sweeper
29
29
  expire_action news_post_url(record.url_name)
30
30
  end
31
31
  end
32
- if Spud::Blog.config.enable_full_page_caching
32
+ if Spud::Blog.config.cache_mode == :full_page
33
33
  expire_page spud_blog_sitemap_path(:format => :xml)
34
34
  if record.is_news && Spud::Blog.config.news_enabled
35
35
  expire_page news_path
@@ -44,4 +44,4 @@ class SpudPostSweeper < ActionController::Caching::Sweeper
44
44
  expire_page spud_sitemap_path(:format => :xml)
45
45
  end
46
46
 
47
- end
47
+ end
@@ -1,3 +1,7 @@
1
+ <% content_for :title do %>
2
+ Blog | <%=current_site_name%>
3
+ <% end %>
4
+
1
5
  <% content_for :head do %>
2
6
  <%= spud_blog_rss_link %>
3
7
  <% end %>
@@ -19,7 +23,7 @@
19
23
  <h3><%= link_to post.title, blog_post_path(post.url_name) %></h3>
20
24
  <h4>Posted by <%= post.author.full_name %> on <%= post.display_date %></h4>
21
25
  <div class="spud_blog_post_content">
22
- <%= raw post.content %>
26
+ <%= truncate_html post.content.html_safe, :length => 250 %>
23
27
  </div>
24
28
  </div>
25
29
  <% end %>
@@ -28,4 +32,4 @@
28
32
  <% end %>
29
33
  </div>
30
34
 
31
- <%= will_paginate @posts %>
35
+ <%= will_paginate @posts %>
@@ -1,5 +1,5 @@
1
1
  <% content_for :title do %>
2
- <%= @post.title %> | <%= Spud::Core.site_name %>
2
+ <%= @post.title %> | <%=current_site_name%>
3
3
  <% end %>
4
4
 
5
5
  <% content_for :head do %>