tb_blog 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.md +39 -25
- data/app/assets/images/spud/admin/news_thumb.png +0 -0
- data/app/controllers/admin/news_posts_controller.rb +9 -7
- data/app/controllers/admin/post_categories_controller.rb +3 -3
- data/app/controllers/admin/posts_controller.rb +9 -5
- data/app/controllers/blog/sitemaps_controller.rb +1 -1
- data/app/controllers/blog_controller.rb +7 -8
- data/app/controllers/news_controller.rb +17 -12
- data/app/helpers/blog_helper.rb +1 -1
- data/app/models/spud/spud_post_model.rb +193 -0
- data/app/models/spud_post.rb +2 -185
- data/app/models/spud_post_category.rb +4 -47
- data/app/views/admin/post_categories/_form.html.erb +0 -9
- data/app/views/admin/post_categories/index.html.erb +1 -1
- data/app/views/admin/posts/_category.html.erb +1 -6
- data/app/views/admin/posts/_custom_fields.html.erb +9 -0
- data/app/views/admin/posts/_form.html.erb +3 -8
- data/app/views/blog/index.rss.builder +1 -1
- data/app/views/news/index.rss.builder +2 -2
- data/db/migrate/20140508200730_remove_awesome_nested_set_columns_from_spud_post_categories.rb +15 -0
- data/lib/spud_blog/configuration.rb +3 -1
- data/lib/spud_blog/engine.rb +0 -5
- data/lib/spud_blog/version.rb +1 -1
- data/spec/controllers/blog_controller_spec.rb +15 -2
- data/spec/dummy/app/controllers/application_controller.rb +1 -1
- data/spec/dummy/db/migrate/20140730131549_add_primary_key_to_spud_post_categories_posts.tb_blog.rb +6 -0
- data/spec/dummy/db/migrate/20140730131550_remove_awesome_nested_set_columns_from_spud_post_categories.tb_blog.rb +16 -0
- data/spec/dummy/db/schema.rb +2 -7
- metadata +9 -17
- data/app/assets/images/spud/admin/news_thumb@2x.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6985b911d99d89f62668336b020afd530179731b
|
4
|
+
data.tar.gz: a6670c45aae3e10bc112844326cc78ef64310003
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51fe31feee68e1f6191a5ac9eaa80a6d00454ada4b96089c3c8aee56d5a6550acf17405758ba8234de8c11f14af9735fd5aa4046c3ee6c60661029ee6bedce7e
|
7
|
+
data.tar.gz: 96ae50f8a8e5393e3c03194e6e4b41302ee2bb3efc3c5509d6159fe447dce89c02646302cf3067658a9271d5bd89e937236e8a7b905a8bed38c8731f0d680e8b
|
data/Readme.md
CHANGED
@@ -28,9 +28,6 @@ TB Blog current accepts the following configuration options.
|
|
28
28
|
config.blog_path = 'blog'
|
29
29
|
config.news_path = 'news'
|
30
30
|
config.posts_per_page = 5
|
31
|
-
config.has_custom_fields = true
|
32
|
-
config.caching_enabled = true
|
33
|
-
config.caching_expires_in = 1.hour
|
34
31
|
config.default_comment_approval = true
|
35
32
|
end
|
36
33
|
|
@@ -48,46 +45,63 @@ TB Blog includes a small, unobtrusive javascript driver that adds functionality
|
|
48
45
|
|
49
46
|
<%= javascript_include_tag 'spud/blog' %>
|
50
47
|
|
48
|
+
## Access Control
|
49
|
+
|
50
|
+
TB Blog offers a mechanism for limitting who can see what posts. Supply a lambda to the `query_for_user` config, which takes a single `user` argument. The value you return will be supplied directly to the `where()` query used to find posts.
|
51
|
+
|
52
|
+
The example below is from an application that allows subscribers to view subscriber-only content.
|
53
|
+
|
54
|
+
Spud::Blog.query_for_user = ->(user){
|
55
|
+
if user.present? && user.has_paid_subscription?
|
56
|
+
{}
|
57
|
+
else
|
58
|
+
{:requires_subscription => false}
|
59
|
+
end
|
60
|
+
}
|
61
|
+
|
62
|
+
*See the section on Custom Fields to see how you might go about adding such a field to your model.*
|
63
|
+
|
51
64
|
## Custom Fields
|
52
65
|
|
53
66
|
You may find that your blog requires a field that isn't included in the default `spud_post` model. Adding custom fields is easy.
|
54
67
|
|
55
|
-
1.
|
56
|
-
2. Create a migration adding the necessary column(s) to your database
|
68
|
+
1. Create a migration adding the necessary column(s) to your database
|
57
69
|
|
58
70
|
class AddCaptionToPosts < ActiveRecord::Migration
|
59
71
|
def change
|
60
|
-
add_column :spud_posts, :
|
72
|
+
add_column :spud_posts, :requires_subscription, :boolean, :default => false
|
61
73
|
end
|
62
74
|
end
|
63
75
|
|
64
|
-
|
76
|
+
2. Save a view partial at `app/views/admin/posts/_custom_fields.html.erb` with the desired inputs
|
65
77
|
|
78
|
+
<h4>My Custom Fields</h4>
|
79
|
+
<div class="spud_post_form_row">
|
80
|
+
<%= f.label :requires_subscription, 'Require subscription' %>
|
81
|
+
<%= f.check_box :requires_subscription %>
|
82
|
+
</div>
|
66
83
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
</div>
|
84
|
+
3. Finally, add the field to your `permitted_attributes` array. This is to satisfy the [Strong Parameters](http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters) in the admin controller.
|
85
|
+
|
86
|
+
Spud::Blog.configure do |config|
|
87
|
+
config.permitted_attributes = [:requires_subscription]
|
88
|
+
end
|
73
89
|
|
74
90
|
## Extending the Post Model
|
75
91
|
|
76
|
-
|
92
|
+
You might want to add custom methods or attributes to the Post model. Create a file at `app/models/spud_post.rb` and add the following code:
|
77
93
|
|
78
|
-
|
79
|
-
|
94
|
+
class SpudPost < Spud::SpudPostModel
|
95
|
+
# custom methods here!
|
96
|
+
def hello_world
|
97
|
+
return "Hello, World!"
|
98
|
+
end
|
99
|
+
end
|
80
100
|
|
81
|
-
|
82
|
-
Spud::Blog::Engine.require_model('spud_post')
|
101
|
+
That's it! You may now begin customizing the post class.
|
83
102
|
|
84
|
-
|
85
|
-
|
86
|
-
attr_accessible :caption
|
87
|
-
def byline
|
88
|
-
return "'#{self.title}' was posted by #{self.author.full_name} on #{self.display_date}"
|
89
|
-
end
|
90
|
-
end
|
103
|
+
p = SpudPost.first
|
104
|
+
puts p.hello_world # outputs "Hello, World!"
|
91
105
|
|
92
106
|
## Akismet Support
|
93
107
|
|
Binary file
|
@@ -11,12 +11,12 @@ class Admin::NewsPostsController < Admin::ApplicationController
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def edit
|
14
|
-
@categories = SpudPostCategory.
|
14
|
+
@categories = SpudPostCategory.ordered
|
15
15
|
respond_with @post
|
16
16
|
end
|
17
17
|
|
18
18
|
def update
|
19
|
-
@categories = SpudPostCategory.
|
19
|
+
@categories = SpudPostCategory.ordered
|
20
20
|
params[:spud_post][:spud_site_ids] ||= []
|
21
21
|
if @post.update_attributes(post_params)
|
22
22
|
flash[:notice] = 'News Post was successfully updated.'
|
@@ -25,13 +25,13 @@ class Admin::NewsPostsController < Admin::ApplicationController
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def new
|
28
|
-
@categories = SpudPostCategory.
|
28
|
+
@categories = SpudPostCategory.ordered
|
29
29
|
@post = SpudPost.new(:published_at => Time.zone.now, :spud_user_id => current_user.id, :is_news => true, :comments_enabled => false, :spud_site_ids => [current_site_id])
|
30
30
|
respond_with @post
|
31
31
|
end
|
32
32
|
|
33
33
|
def create
|
34
|
-
@categories = SpudPostCategory.
|
34
|
+
@categories = SpudPostCategory.ordered
|
35
35
|
params[:spud_post][:spud_site_ids] ||= []
|
36
36
|
@post = SpudPost.new(post_params)
|
37
37
|
@post.is_news = true
|
@@ -59,9 +59,11 @@ private
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def post_params
|
62
|
-
|
63
|
-
|
64
|
-
|
62
|
+
permitted = [:published_at, :title, :content, :spud_user_id, :url_name, :visible, :comments_enabled, :meta_keywords, :meta_description, :content_format, :category_ids => [], :spud_site_ids => []]
|
63
|
+
if Spud::Blog.permitted_attributes.present?
|
64
|
+
permitted = permitted + Spud::Blog.permitted_attributes
|
65
|
+
end
|
66
|
+
params.require(:spud_post).permit(permitted)
|
65
67
|
end
|
66
68
|
|
67
69
|
end
|
@@ -6,7 +6,7 @@ class Admin::PostCategoriesController < Admin::ApplicationController
|
|
6
6
|
before_filter :find_category, :only => [:show, :edit, :update, :destroy]
|
7
7
|
|
8
8
|
def index
|
9
|
-
@post_categories = SpudPostCategory.
|
9
|
+
@post_categories = SpudPostCategory.ordered
|
10
10
|
respond_with @post_categories
|
11
11
|
end
|
12
12
|
|
@@ -41,7 +41,7 @@ class Admin::PostCategoriesController < Admin::ApplicationController
|
|
41
41
|
def destroy
|
42
42
|
if @post_category.destroy
|
43
43
|
flash[:notice] = 'Post Category was successfully deleted'
|
44
|
-
@post_categories = SpudPostCategory.
|
44
|
+
@post_categories = SpudPostCategory.ordered
|
45
45
|
render 'index'
|
46
46
|
else
|
47
47
|
respond_with @post_category, :location => admin_post_categories_path
|
@@ -55,7 +55,7 @@ class Admin::PostCategoriesController < Admin::ApplicationController
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def category_params
|
58
|
-
params.require(:spud_post_category).permit(:name
|
58
|
+
params.require(:spud_post_category).permit(:name)
|
59
59
|
end
|
60
60
|
|
61
61
|
end
|
@@ -11,12 +11,12 @@ class Admin::PostsController < Admin::ApplicationController
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def edit
|
14
|
-
@categories = SpudPostCategory.
|
14
|
+
@categories = SpudPostCategory.ordered
|
15
15
|
respond_with @post
|
16
16
|
end
|
17
17
|
|
18
18
|
def update
|
19
|
-
@categories = SpudPostCategory.
|
19
|
+
@categories = SpudPostCategory.ordered
|
20
20
|
params[:spud_post][:spud_site_ids] ||= []
|
21
21
|
params[:spud_post][:updated_at] = Time.now()
|
22
22
|
if @post.update_attributes(post_params)
|
@@ -26,13 +26,13 @@ class Admin::PostsController < Admin::ApplicationController
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def new
|
29
|
-
@categories = SpudPostCategory.
|
29
|
+
@categories = SpudPostCategory.ordered
|
30
30
|
@post = SpudPost.new(:published_at => Time.zone.now, :spud_user_id => current_user.id, :spud_site_ids => [session[:admin_site] || 0])
|
31
31
|
respond_with @post
|
32
32
|
end
|
33
33
|
|
34
34
|
def create
|
35
|
-
@categories = SpudPostCategory.
|
35
|
+
@categories = SpudPostCategory.ordered
|
36
36
|
params[:spud_post][:spud_site_ids] ||= []
|
37
37
|
@post = SpudPost.new(post_params)
|
38
38
|
if @post.save
|
@@ -59,7 +59,11 @@ private
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def post_params
|
62
|
-
|
62
|
+
permitted = [:published_at, :title, :content, :spud_user_id, :url_name, :visible, :comments_enabled, :meta_keywords, :meta_description, :content_format, :category_ids => [], :spud_site_ids => []]
|
63
|
+
if Spud::Blog.permitted_attributes.present?
|
64
|
+
permitted = permitted + Spud::Blog.permitted_attributes
|
65
|
+
end
|
66
|
+
params.require(:spud_post).permit(permitted)
|
63
67
|
end
|
64
68
|
|
65
69
|
end
|
@@ -6,7 +6,7 @@ class BlogController < ApplicationController
|
|
6
6
|
before_filter :find_post, :only => [:show, :create_comment]
|
7
7
|
|
8
8
|
def index
|
9
|
-
@posts = SpudPost.visible.blog_posts.ordered.paginate(:page => get_page_number, :per_page => Spud::Blog.config.posts_per_page)
|
9
|
+
@posts = SpudPost.for_user(current_user).visible.blog_posts.ordered.paginate(:page => get_page_number, :per_page => Spud::Blog.config.posts_per_page)
|
10
10
|
if Spud::Core.config.multisite_mode_enabled
|
11
11
|
@posts = @posts.for_spud_site(current_site_id)
|
12
12
|
end
|
@@ -41,9 +41,9 @@ class BlogController < ApplicationController
|
|
41
41
|
|
42
42
|
if @post_category = SpudPostCategory.find_by_url_name(params[:category_url_name])
|
43
43
|
if Spud::Core.config.multisite_mode_enabled
|
44
|
-
@posts = @post_category.
|
44
|
+
@posts = @post_category.posts.for_user(current_user).visible.blog_posts.for_spud_site(current_site_id).from_archive(params[:archive_date]).paginate(:page => page, :per_page => Spud::Blog.config.posts_per_page)
|
45
45
|
else
|
46
|
-
@posts = @post_category.
|
46
|
+
@posts = @post_category.posts.for_user(current_user).visible.blog_posts.from_archive(params[:archive_date]).paginate(:page => page, :per_page => Spud::Blog.config.posts_per_page)
|
47
47
|
end
|
48
48
|
else
|
49
49
|
redirect_to blog_path
|
@@ -56,9 +56,9 @@ class BlogController < ApplicationController
|
|
56
56
|
|
57
57
|
def archive
|
58
58
|
if Spud::Core.config.multisite_mode_enabled
|
59
|
-
@posts = SpudPost.visible.blog_posts.from_archive(params[:archive_date]).for_spud_site(current_site_id).paginate(:page => get_page_number, :per_page => Spud::Blog.config.posts_per_page)
|
59
|
+
@posts = SpudPost.for_user(current_user).visible.blog_posts.from_archive(params[:archive_date]).for_spud_site(current_site_id).paginate(:page => get_page_number, :per_page => Spud::Blog.config.posts_per_page)
|
60
60
|
else
|
61
|
-
@posts = SpudPost.visible.blog_posts.from_archive(params[:archive_date]).paginate(:page => get_page_number, :per_page => Spud::Blog.config.posts_per_page)
|
61
|
+
@posts = SpudPost.for_user(current_user).visible.blog_posts.from_archive(params[:archive_date]).paginate(:page => get_page_number, :per_page => Spud::Blog.config.posts_per_page)
|
62
62
|
end
|
63
63
|
respond_with @posts do |format|
|
64
64
|
format.html { render 'index' }
|
@@ -101,10 +101,9 @@ class BlogController < ApplicationController
|
|
101
101
|
private
|
102
102
|
|
103
103
|
def find_post
|
104
|
-
|
104
|
+
@post = SpudPost.for_user(current_user).where(:url_name => params[:id]).first
|
105
105
|
if @post.blank? || @post.is_private? || (Spud::Core.config.multisite_mode_enabled && !@post.spud_site_ids.include?(current_site_id))
|
106
|
-
|
107
|
-
redirect_to blog_path and return false
|
106
|
+
raise Spud::NotFoundError.new(:item => 'post')
|
108
107
|
end
|
109
108
|
end
|
110
109
|
|
@@ -3,8 +3,10 @@ class NewsController < ApplicationController
|
|
3
3
|
respond_to :html, :xml, :json, :rss
|
4
4
|
layout Spud::Blog.news_layout
|
5
5
|
|
6
|
+
before_filter :find_post, :only => [:show]
|
7
|
+
|
6
8
|
def index
|
7
|
-
@posts = SpudPost.visible.news_posts.ordered.paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
9
|
+
@posts = SpudPost.for_user(current_user).visible.news_posts.ordered.paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
8
10
|
if Spud::Core.config.multisite_mode_enabled
|
9
11
|
@posts = @posts.for_spud_site(current_site_id)
|
10
12
|
end
|
@@ -27,9 +29,9 @@ class NewsController < ApplicationController
|
|
27
29
|
def category
|
28
30
|
if @post_category = SpudPostCategory.find_by_url_name(params[:category_url_name])
|
29
31
|
if Spud::Core.config.multisite_mode_enabled
|
30
|
-
@posts = @post_category.
|
32
|
+
@posts = @post_category.posts.for_user(current_user).visible.news_posts.for_spud_site(current_site_id).from_archive(params[:archive_date]).paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
31
33
|
else
|
32
|
-
@posts = @post_category.
|
34
|
+
@posts = @post_category.posts.for_user(current_user).visible.news_posts.from_archive(params[:archive_date]).paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
33
35
|
end
|
34
36
|
else
|
35
37
|
redirect_to news_path
|
@@ -42,9 +44,9 @@ class NewsController < ApplicationController
|
|
42
44
|
|
43
45
|
def archive
|
44
46
|
if Spud::Core.config.multisite_mode_enabled
|
45
|
-
@posts = SpudPost.visible.news_posts.for_spud_site(current_site_id).from_archive(params[:archive_date]).paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
47
|
+
@posts = SpudPost.for_user(current_user).visible.news_posts.for_spud_site(current_site_id).from_archive(params[:archive_date]).paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
46
48
|
else
|
47
|
-
@posts = SpudPost.visible.news_posts.from_archive(params[:archive_date]).paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
49
|
+
@posts = SpudPost.for_user(current_user).visible.news_posts.from_archive(params[:archive_date]).paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
48
50
|
end
|
49
51
|
respond_with @posts do |format|
|
50
52
|
format.html { render 'index' }
|
@@ -52,13 +54,16 @@ class NewsController < ApplicationController
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def show
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
respond_with @post
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def find_post
|
63
|
+
@post = SpudPost.for_user(current_user).where(:url_name => params[:id]).first
|
64
|
+
if @post.blank? || @post.is_private? || (Spud::Core.config.multisite_mode_enabled && !@post.spud_site_ids.include?(current_site_id))
|
65
|
+
raise Spud::NotFoundError.new(:item => 'post')
|
66
|
+
end
|
62
67
|
end
|
63
68
|
|
64
69
|
end
|
data/app/helpers/blog_helper.rb
CHANGED
@@ -2,7 +2,7 @@ module BlogHelper
|
|
2
2
|
|
3
3
|
def spud_post_category_select
|
4
4
|
return select_tag 'category_url_name',
|
5
|
-
options_for_select(SpudPostCategory.options_for_categories(
|
5
|
+
options_for_select(SpudPostCategory.options_for_categories(), params[:category_url_name]),
|
6
6
|
:include_blank => true,
|
7
7
|
:rel => 'category'
|
8
8
|
end
|
@@ -0,0 +1,193 @@
|
|
1
|
+
class Spud::SpudPostModel < ActiveRecord::Base
|
2
|
+
self.table_name = 'spud_posts'
|
3
|
+
|
4
|
+
spud_searchable
|
5
|
+
|
6
|
+
has_many :spud_post_categories_posts, :foreign_key => 'spud_post_id'
|
7
|
+
has_many :categories,
|
8
|
+
:class_name => 'SpudPostCategory',
|
9
|
+
:through => :spud_post_categories_posts,
|
10
|
+
:source => :spud_post_category
|
11
|
+
|
12
|
+
belongs_to :author, :class_name => 'SpudUser', :foreign_key => 'spud_user_id'
|
13
|
+
has_many :comments, :class_name => 'SpudPostComment', :inverse_of => :post, :foreign_key => 'spud_post_id'
|
14
|
+
has_many :pending_comments, ->{ where(:spam => [nil, false], :approved => false) }, :class_name => "SpudPostComment", :foreign_key => 'spud_post_id'
|
15
|
+
has_many :visible_comments, ->{ where(:spam => [nil,false], :approved => true) }, :class_name => 'SpudPostComment', :foreign_key => 'spud_post_id'
|
16
|
+
has_many :spam_comments, ->{ where(:spam => true) }, :class_name => "SpudPostComment", :foreign_key => 'spud_post_id'
|
17
|
+
has_many :spud_permalinks,:as => :attachment
|
18
|
+
has_many :spud_post_sites, :dependent => :destroy
|
19
|
+
|
20
|
+
scope :blog_posts, ->{ where(:is_news => false) }
|
21
|
+
scope :news_posts, ->{ where(:is_news => true) }
|
22
|
+
scope :visible, ->{ where('visible = true AND published_at <= ?', Time.now.utc) }
|
23
|
+
scope :ordered, ->{ order('published_at desc') }
|
24
|
+
|
25
|
+
scope :for_user, ->(user){
|
26
|
+
if Spud::Blog.query_for_user.present?
|
27
|
+
where(Spud::Blog.query_for_user.call(user))
|
28
|
+
else
|
29
|
+
where({})
|
30
|
+
end
|
31
|
+
}
|
32
|
+
|
33
|
+
validates_presence_of :title, :content, :published_at, :spud_user_id, :url_name
|
34
|
+
validates_uniqueness_of :url_name
|
35
|
+
before_validation :set_url_name
|
36
|
+
after_save :set_spud_site_ids
|
37
|
+
|
38
|
+
acts_as_spud_liquid_content
|
39
|
+
|
40
|
+
attr_accessor :spud_site_ids
|
41
|
+
|
42
|
+
def self.for_spud_site(spud_site_id)
|
43
|
+
return joins(:spud_post_sites).where(:spud_post_sites => {:spud_site_id => spud_site_id})
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.public_posts(page, per_page)
|
47
|
+
ActiveSupport::Deprecation.warn "SpudPost.public_posts is deprecated. Please the :visible, and :ordered scopes instead.", caller
|
48
|
+
return where('visible = ? AND published_at <= ?', true,Time.now.utc).order('published_at desc').paginate(:page => page, :per_page => per_page)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.public_blog_posts(page, per_page)
|
52
|
+
ActiveSupport::Deprecation.warn "SpudPost.public_blog_posts is deprecated. Please the :blog_posts, :visible, and :ordered scopes instead.", caller
|
53
|
+
return self.public_posts(page, per_page).where(:is_news => false)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.public_news_posts(page, per_page)
|
57
|
+
ActiveSupport::Deprecation.warn "SpudPost.public_news_posts is deprecated. Please the :news_posts, :visible, and :ordered scopes instead.", caller
|
58
|
+
return self.public_posts(page, per_page).where(:is_news => true)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.recent_posts(limit=5)
|
62
|
+
return where('visible = ? AND published_at <= ?', true, Time.now.utc).order('published_at desc').limit(limit)
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.recent_blog_posts(limit=5)
|
66
|
+
return self.blog_posts.recent_posts(limit)
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.recent_news_posts(limit=5)
|
70
|
+
return self.news_posts.recent_posts(limit)
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.from_archive(date_string)
|
74
|
+
begin
|
75
|
+
date = Date.strptime(date_string, "%Y-%b")
|
76
|
+
return where(:published_at => date..date.end_of_month)
|
77
|
+
rescue
|
78
|
+
return all
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
#def self.posts_for_category_archive(category, )
|
83
|
+
|
84
|
+
# Returns an array of Date objects for months with public posts
|
85
|
+
def self.months_with_public_posts
|
86
|
+
# Select
|
87
|
+
# Month(published_at) as published_month,
|
88
|
+
# Year(published_at) as published_year
|
89
|
+
# From spud_posts
|
90
|
+
# Where visible = 1
|
91
|
+
# And published_at < '2012-01-30'
|
92
|
+
# Group By published_month, published_year
|
93
|
+
# Order By published_year desc, published_month desc
|
94
|
+
records = SpudPost.select('Extract(Month from published_at) as published_month, Extract(Year from published_at) as published_year').where('visible = ? AND published_at < ?', true, DateTime.now).group('published_month, published_year').order('published_year desc, published_month desc')
|
95
|
+
begin
|
96
|
+
return records.collect{ |r| Date.new(r[:published_year].to_i, r[:published_month].to_i) }
|
97
|
+
rescue Exception => e
|
98
|
+
logger.fatal "Exception occurred while fetching post archive dates:\n #{e.to_s}"
|
99
|
+
return []
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.months_with_public_news_posts
|
104
|
+
records = SpudPost.select('Extract(Month from published_at) as published_month, Extract(Year from published_at) as published_year').where('visible = ? AND published_at < ? AND is_news = ?', true, DateTime.now, true).group('published_month, published_year').order('published_year desc, published_month desc')
|
105
|
+
begin
|
106
|
+
return records.collect{ |r| Date.new(r[:published_year].to_i, r[:published_month].to_i) }
|
107
|
+
rescue Exception => e
|
108
|
+
logger.fatal "Exception occurred while fetching post archive dates:\n #{e.to_s}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def self.months_with_public_blog_posts
|
113
|
+
records = SpudPost.select('Extract(Month from published_at) as published_month, Extract(Year from published_at) as published_year').where('visible = ? AND published_at < ? AND is_news = ?', true, DateTime.now, false).group('published_month, published_year').order('published_year desc, published_month desc')
|
114
|
+
begin
|
115
|
+
return records.collect{ |r| Date.new(r[:published_year].to_i, r[:published_month].to_i) }
|
116
|
+
rescue Exception => e
|
117
|
+
logger.fatal "Exception occurred while fetching post archive dates:\n #{e.to_s}"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def postprocess_content
|
122
|
+
# if self.content_format == 'Markdown'
|
123
|
+
# require 'redcarpet'
|
124
|
+
# renderer = Redcarpet::Render::HTML.new
|
125
|
+
# extensions = {fenced_code_blocks: true}
|
126
|
+
# redcarpet = Redcarpet::Markdown.new(renderer, extensions)
|
127
|
+
# self.content_processed = redcarpet.render self.content
|
128
|
+
# else
|
129
|
+
template = Liquid::Template.parse(self.content)
|
130
|
+
self.content_processed = template.render()
|
131
|
+
# end
|
132
|
+
end
|
133
|
+
|
134
|
+
def content_processed
|
135
|
+
if read_attribute(:content_processed).blank?
|
136
|
+
postprocess_content
|
137
|
+
end
|
138
|
+
read_attribute(:content_processed)
|
139
|
+
end
|
140
|
+
|
141
|
+
def content_processed=(content)
|
142
|
+
write_attribute(:content_processed,content)
|
143
|
+
end
|
144
|
+
|
145
|
+
def display_date
|
146
|
+
return published_at.strftime("%b %d, %Y")
|
147
|
+
end
|
148
|
+
|
149
|
+
def is_public?
|
150
|
+
return (published_at < DateTime.now) && visible
|
151
|
+
end
|
152
|
+
|
153
|
+
def is_private?
|
154
|
+
return !is_public?
|
155
|
+
end
|
156
|
+
|
157
|
+
def category_names
|
158
|
+
return self.categories.collect{ |c| c.name }.join(', ')
|
159
|
+
end
|
160
|
+
|
161
|
+
# Spud site ids getter
|
162
|
+
def spud_site_ids
|
163
|
+
if @spud_site_ids.nil?
|
164
|
+
@spud_site_ids = spud_post_sites.collect{ |site| site.spud_site_id }
|
165
|
+
end
|
166
|
+
return @spud_site_ids
|
167
|
+
end
|
168
|
+
|
169
|
+
# Spud site ids setter
|
170
|
+
def spud_site_ids=(site_ids)
|
171
|
+
if site_ids.is_a?(Array)
|
172
|
+
@spud_site_ids = site_ids.collect{ |id| id.to_i }
|
173
|
+
else
|
174
|
+
raise 'Site ids must be an Array'
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
private
|
179
|
+
|
180
|
+
def set_url_name
|
181
|
+
self.url_name = "#{self.published_at.strftime('%Y-%m-%d')}-#{self.title.parameterize}"
|
182
|
+
end
|
183
|
+
|
184
|
+
def set_spud_site_ids
|
185
|
+
if Spud::Core.multisite_mode_enabled
|
186
|
+
_spud_post_sites = []
|
187
|
+
self.spud_site_ids.each do |site_id|
|
188
|
+
_spud_post_sites << SpudPostSite.new(:spud_post_id => id, :spud_site_id => site_id)
|
189
|
+
end
|
190
|
+
self.spud_post_sites = _spud_post_sites
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
data/app/models/spud_post.rb
CHANGED
@@ -1,186 +1,3 @@
|
|
1
|
-
class SpudPost <
|
2
|
-
|
3
|
-
|
4
|
-
has_many :spud_post_categories_posts
|
5
|
-
has_many :categories,
|
6
|
-
:class_name => 'SpudPostCategory',
|
7
|
-
:through => :spud_post_categories_posts,
|
8
|
-
:source => :spud_post_category
|
9
|
-
|
10
|
-
belongs_to :author, :class_name => 'SpudUser', :foreign_key => 'spud_user_id'
|
11
|
-
has_many :comments, :class_name => 'SpudPostComment', :inverse_of => :post
|
12
|
-
has_many :pending_comments, ->{ where(:spam => [nil, false], :approved => false) }, :class_name => "SpudPostComment"
|
13
|
-
has_many :visible_comments, ->{ where(:spam => [nil,false], :approved => true) }, :class_name => 'SpudPostComment'
|
14
|
-
has_many :spam_comments, ->{ where(:spam => true) }, :class_name => "SpudPostComment"
|
15
|
-
has_many :spud_permalinks,:as => :attachment
|
16
|
-
has_many :spud_post_sites, :dependent => :destroy
|
17
|
-
|
18
|
-
scope :publicly, ->{ where('visible = true AND published_at <= ?', Time.now.utc).order('published_at desc') }
|
19
|
-
scope :future_posts, ->{ where('visible = true AND published_at > ?', Time.now.utc) }
|
20
|
-
|
21
|
-
scope :blog_posts, ->{ where(:is_news => false) }
|
22
|
-
scope :news_posts, ->{ where(:is_news => true) }
|
23
|
-
scope :visible, ->{ where('visible = true AND published_at <= ?', Time.now.utc) }
|
24
|
-
scope :ordered, ->{ order('published_at desc') }
|
25
|
-
|
26
|
-
validates_presence_of :title, :content, :published_at, :spud_user_id, :url_name
|
27
|
-
validates_uniqueness_of :url_name
|
28
|
-
before_validation :set_url_name
|
29
|
-
after_save :set_spud_site_ids
|
30
|
-
|
31
|
-
acts_as_spud_liquid_content
|
32
|
-
|
33
|
-
attr_accessor :spud_site_ids
|
34
|
-
|
35
|
-
def self.for_spud_site(spud_site_id)
|
36
|
-
return joins(:spud_post_sites).where(:spud_post_sites => {:spud_site_id => spud_site_id})
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.public_posts(page, per_page)
|
40
|
-
ActiveSupport::Deprecation.warn "SpudPost.public_posts is deprecated. Please the :visible, and :ordered scopes instead.", caller
|
41
|
-
return where('visible = ? AND published_at <= ?', true,Time.now.utc).order('published_at desc').paginate(:page => page, :per_page => per_page)
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.public_blog_posts(page, per_page)
|
45
|
-
ActiveSupport::Deprecation.warn "SpudPost.public_blog_posts is deprecated. Please the :blog_posts, :visible, and :ordered scopes instead.", caller
|
46
|
-
return self.public_posts(page, per_page).where(:is_news => false)
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.public_news_posts(page, per_page)
|
50
|
-
ActiveSupport::Deprecation.warn "SpudPost.public_news_posts is deprecated. Please the :news_posts, :visible, and :ordered scopes instead.", caller
|
51
|
-
return self.public_posts(page, per_page).where(:is_news => true)
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.recent_posts(limit=5)
|
55
|
-
return where('visible = ? AND published_at <= ?', true, Time.now.utc).order('published_at desc').limit(limit)
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.recent_blog_posts(limit=5)
|
59
|
-
return self.blog_posts.recent_posts(limit)
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.recent_news_posts(limit=5)
|
63
|
-
return self.news_posts.recent_posts(limit)
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.from_archive(date_string)
|
67
|
-
begin
|
68
|
-
date = Date.strptime(date_string, "%Y-%b")
|
69
|
-
return where(:published_at => date..date.end_of_month)
|
70
|
-
rescue
|
71
|
-
return all
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
#def self.posts_for_category_archive(category, )
|
76
|
-
|
77
|
-
# Returns an array of Date objects for months with public posts
|
78
|
-
def self.months_with_public_posts
|
79
|
-
# Select
|
80
|
-
# Month(published_at) as published_month,
|
81
|
-
# Year(published_at) as published_year
|
82
|
-
# From spud_posts
|
83
|
-
# Where visible = 1
|
84
|
-
# And published_at < '2012-01-30'
|
85
|
-
# Group By published_month, published_year
|
86
|
-
# Order By published_year desc, published_month desc
|
87
|
-
records = SpudPost.select('Extract(Month from published_at) as published_month, Extract(Year from published_at) as published_year').where('visible = ? AND published_at < ?', true, DateTime.now).group('published_month, published_year').order('published_year desc, published_month desc')
|
88
|
-
begin
|
89
|
-
return records.collect{ |r| Date.new(r[:published_year].to_i, r[:published_month].to_i) }
|
90
|
-
rescue Exception => e
|
91
|
-
logger.fatal "Exception occurred while fetching post archive dates:\n #{e.to_s}"
|
92
|
-
return []
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def self.months_with_public_news_posts
|
97
|
-
records = SpudPost.select('Extract(Month from published_at) as published_month, Extract(Year from published_at) as published_year').where('visible = ? AND published_at < ? AND is_news = ?', true, DateTime.now, true).group('published_month, published_year').order('published_year desc, published_month desc')
|
98
|
-
begin
|
99
|
-
return records.collect{ |r| Date.new(r[:published_year].to_i, r[:published_month].to_i) }
|
100
|
-
rescue Exception => e
|
101
|
-
logger.fatal "Exception occurred while fetching post archive dates:\n #{e.to_s}"
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
def self.months_with_public_blog_posts
|
106
|
-
records = SpudPost.select('Extract(Month from published_at) as published_month, Extract(Year from published_at) as published_year').where('visible = ? AND published_at < ? AND is_news = ?', true, DateTime.now, false).group('published_month, published_year').order('published_year desc, published_month desc')
|
107
|
-
begin
|
108
|
-
return records.collect{ |r| Date.new(r[:published_year].to_i, r[:published_month].to_i) }
|
109
|
-
rescue Exception => e
|
110
|
-
logger.fatal "Exception occurred while fetching post archive dates:\n #{e.to_s}"
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def postprocess_content
|
115
|
-
# if self.content_format == 'Markdown'
|
116
|
-
# require 'redcarpet'
|
117
|
-
# renderer = Redcarpet::Render::HTML.new
|
118
|
-
# extensions = {fenced_code_blocks: true}
|
119
|
-
# redcarpet = Redcarpet::Markdown.new(renderer, extensions)
|
120
|
-
# self.content_processed = redcarpet.render self.content
|
121
|
-
# else
|
122
|
-
template = Liquid::Template.parse(self.content)
|
123
|
-
self.content_processed = template.render()
|
124
|
-
# end
|
125
|
-
end
|
126
|
-
|
127
|
-
def content_processed
|
128
|
-
if read_attribute(:content_processed).blank?
|
129
|
-
postprocess_content
|
130
|
-
end
|
131
|
-
read_attribute(:content_processed)
|
132
|
-
end
|
133
|
-
|
134
|
-
def content_processed=(content)
|
135
|
-
write_attribute(:content_processed,content)
|
136
|
-
end
|
137
|
-
|
138
|
-
def display_date
|
139
|
-
return published_at.strftime("%b %d, %Y")
|
140
|
-
end
|
141
|
-
|
142
|
-
def is_public?
|
143
|
-
return (published_at < DateTime.now) && visible
|
144
|
-
end
|
145
|
-
|
146
|
-
def is_private?
|
147
|
-
return !is_public?
|
148
|
-
end
|
149
|
-
|
150
|
-
def category_names
|
151
|
-
return self.categories.collect{ |c| c.name }.join(', ')
|
152
|
-
end
|
153
|
-
|
154
|
-
# Spud site ids getter
|
155
|
-
def spud_site_ids
|
156
|
-
if @spud_site_ids.nil?
|
157
|
-
@spud_site_ids = spud_post_sites.collect{ |site| site.spud_site_id }
|
158
|
-
end
|
159
|
-
return @spud_site_ids
|
160
|
-
end
|
161
|
-
|
162
|
-
# Spud site ids setter
|
163
|
-
def spud_site_ids=(site_ids)
|
164
|
-
if site_ids.is_a?(Array)
|
165
|
-
@spud_site_ids = site_ids.collect{ |id| id.to_i }
|
166
|
-
else
|
167
|
-
raise 'Site ids must be an Array'
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
private
|
172
|
-
|
173
|
-
def set_url_name
|
174
|
-
self.url_name = "#{self.published_at.strftime('%Y-%m-%d')}-#{self.title.parameterize}"
|
175
|
-
end
|
176
|
-
|
177
|
-
def set_spud_site_ids
|
178
|
-
if Spud::Core.multisite_mode_enabled
|
179
|
-
_spud_post_sites = []
|
180
|
-
self.spud_site_ids.each do |site_id|
|
181
|
-
_spud_post_sites << SpudPostSite.new(:spud_post_id => id, :spud_site_id => site_id)
|
182
|
-
end
|
183
|
-
self.spud_post_sites = _spud_post_sites
|
184
|
-
end
|
185
|
-
end
|
1
|
+
class SpudPost < Spud::SpudPostModel
|
2
|
+
# Copy this file to your app to extend the base SpudPost model
|
186
3
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
class SpudPostCategory < ActiveRecord::Base
|
2
2
|
spud_searchable
|
3
|
-
acts_as_nested_set
|
4
3
|
|
5
4
|
has_and_belongs_to_many :posts,
|
6
5
|
:class_name => 'SpudPost',
|
@@ -11,63 +10,21 @@ class SpudPostCategory < ActiveRecord::Base
|
|
11
10
|
validates_uniqueness_of :name, :url_name
|
12
11
|
before_validation :set_url_name
|
13
12
|
|
14
|
-
before_destroy :update_child_categories
|
15
13
|
after_update :touch_posts
|
16
14
|
after_destroy :touch_posts
|
17
15
|
|
18
|
-
|
19
|
-
def skip_before_destroy
|
20
|
-
return true
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.grouped
|
24
|
-
return all.group_by(&:parent_id)
|
25
|
-
end
|
26
|
-
|
27
|
-
# Returns an array of categories in order of heirarchy
|
28
|
-
# :fitler Filters out a category by ID, and all of its children
|
29
|
-
# :value Pick an attribute to be used in the value field, defaults to ID
|
30
|
-
def self.options_for_categories(config={})
|
31
|
-
collection = config[:collection] || self.grouped
|
32
|
-
level = config[:level] || 0
|
33
|
-
parent_id = config[:parent_id] || nil
|
34
|
-
filter = config[:filter] || nil
|
35
|
-
value = config[:value] || :id
|
36
|
-
list = []
|
37
|
-
if collection[parent_id]
|
38
|
-
collection[parent_id].each do |c|
|
39
|
-
if c.id != filter
|
40
|
-
list << [level.times.collect{ '- ' }.join('') + c.name, c[value]]
|
41
|
-
list += self.options_for_categories({:collection => collection, :parent_id => c.id, :level => level+1, :filter => filter, :value => value})
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
return list
|
46
|
-
end
|
16
|
+
scope :ordered, ->{ order('name asc') }
|
47
17
|
|
48
|
-
def
|
49
|
-
|
50
|
-
post_ids = SpudPostCategoriesPost.where(:spud_post_category_id => category_ids).collect{ |it| it.spud_post_id }
|
51
|
-
return SpudPost.where(:id => post_ids)
|
18
|
+
def self.options_for_categories()
|
19
|
+
return ordered.select(:name, :url_name).collect{ |c| [c.name, c.url_name] }
|
52
20
|
end
|
53
21
|
|
54
|
-
|
22
|
+
private
|
55
23
|
|
56
24
|
def set_url_name
|
57
25
|
self.url_name = self.name.parameterize
|
58
26
|
end
|
59
27
|
|
60
|
-
def parent_is_valid
|
61
|
-
if parent_id == self.id
|
62
|
-
errors.add :base, 'Category cannot be its own parent'
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def update_child_categories
|
67
|
-
self.children.update_all(:parent_id => self.parent_id)
|
68
|
-
self.class.rebuild!
|
69
|
-
end
|
70
|
-
|
71
28
|
def touch_posts
|
72
29
|
if self.name_changed?
|
73
30
|
self.posts.update_all(:updated_at => Time.now)
|
@@ -9,15 +9,6 @@
|
|
9
9
|
<%= f.text_field :name %>
|
10
10
|
</div>
|
11
11
|
</div>
|
12
|
-
<div class="control-group">
|
13
|
-
<%= label_tag :parent,'Parent',:class => "control-label" %>
|
14
|
-
<div class="controls">
|
15
|
-
<select name="spud_post_category[parent_id]">
|
16
|
-
<option value="">No Parent</option>
|
17
|
-
<%= options_for_select(SpudPostCategory.options_for_categories(:filter => @post_category.id), @post_category.parent_id) %>
|
18
|
-
</select>
|
19
|
-
</div>
|
20
|
-
</div>
|
21
12
|
</fieldset>
|
22
13
|
|
23
14
|
<% end %>
|
@@ -4,6 +4,6 @@
|
|
4
4
|
<% if @post_categories.length == 0 %>
|
5
5
|
<li class="spud_blog_category_manager_empty">You do not have any Post Categories at this time.</li>
|
6
6
|
<% end %>
|
7
|
-
<%= render :partial => 'category', :collection => @post_categories
|
7
|
+
<%= render :partial => 'category', :collection => @post_categories %>
|
8
8
|
</ul>
|
9
9
|
</div>
|
@@ -1,9 +1,4 @@
|
|
1
1
|
<%= content_tag :li, :class => 'spud_post_form_category', 'data-id' => category.id do %>
|
2
2
|
<%= check_box_tag 'spud_post[category_ids][]', category.id, @post.category_ids.include?(category.id), :id => "spud_post_category_#{category.id}" %>
|
3
3
|
<%= label_tag "spud_post_category_#{category.id}", category.name %>
|
4
|
-
|
5
|
-
<% if @categories[category.id] %>
|
6
|
-
<%= render :partial => '/admin/posts/category', :collection => @categories[category.id] %>
|
7
|
-
<% end %>
|
8
|
-
</ul>
|
9
|
-
<% end %>
|
4
|
+
<% end %>
|
@@ -17,17 +17,12 @@
|
|
17
17
|
<%= f.text_area :content,:style => "width:100%;", :class => 'tinymce full-width', "data-format" => f.object.content_format%>
|
18
18
|
</div>
|
19
19
|
|
20
|
-
<% if Spud::Blog.config.has_custom_fields %>
|
21
|
-
<fieldset>
|
22
|
-
<legend>Custom Fields</legend>
|
23
|
-
<%= render :partial => '/admin/posts/custom_fields', :locals => {:f => f} %>
|
24
|
-
</fieldset>
|
25
|
-
<% end %>
|
26
|
-
|
27
20
|
<fieldset class="spud_post_form_fieldset">
|
28
21
|
<legend>Advanced</legend>
|
29
22
|
|
30
23
|
<div class="spud_post_form_col">
|
24
|
+
<%= render :partial => '/admin/posts/custom_fields', :locals => {:f => f} %>
|
25
|
+
|
31
26
|
<h4>Meta Data</h4>
|
32
27
|
|
33
28
|
<div class="spud_post_form_row">
|
@@ -101,7 +96,7 @@
|
|
101
96
|
<%= link_to 'Add Category', new_admin_post_category_path, :class => 'btn btn-mini spud_post_add_category' %>
|
102
97
|
<input type="hidden" name="spud_post[category_ids][]" value="" />
|
103
98
|
<ul class="spud_post_categories_form">
|
104
|
-
<%= render :partial => '/admin/posts/category', :collection => @categories
|
99
|
+
<%= render :partial => '/admin/posts/category', :collection => @categories %>
|
105
100
|
</ul>
|
106
101
|
</div>
|
107
102
|
|
@@ -8,7 +8,7 @@ xml.rss :version => "2.0" do
|
|
8
8
|
for article in @posts
|
9
9
|
xml.item do
|
10
10
|
xml.title article.title
|
11
|
-
xml.description article.
|
11
|
+
xml.description strip_tags(article.content_truncated).truncate(250)
|
12
12
|
xml.pubDate article.created_at.to_s(:rfc822)
|
13
13
|
xml.link blog_post_url(article.url_name)
|
14
14
|
xml.guid blog_post_url(article.url_name)
|
@@ -8,11 +8,11 @@ xml.rss :version => "2.0" do
|
|
8
8
|
for article in @posts
|
9
9
|
xml.item do
|
10
10
|
xml.title article.title
|
11
|
-
xml.description article.
|
11
|
+
xml.description strip_tags(article.content_processed).truncate(250)
|
12
12
|
xml.pubDate article.created_at.to_s(:rfc822)
|
13
13
|
xml.link news_post_url(article.url_name)
|
14
14
|
xml.guid news_post_url(article.url_name)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
|
-
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class RemoveAwesomeNestedSetColumnsFromSpudPostCategories < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
change_table :spud_post_categories do |t|
|
4
|
+
t.remove :lft, :rgt, :depth, :parent_id
|
5
|
+
end
|
6
|
+
end
|
7
|
+
def down
|
8
|
+
change_table :spud_post_categories do |t|
|
9
|
+
t.integer :lft
|
10
|
+
t.integer :rgt
|
11
|
+
t.integer :depth
|
12
|
+
t.inreger :parent_id
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -5,7 +5,7 @@ module Spud
|
|
5
5
|
:base_layout, :news_layout, :blog_enabled,
|
6
6
|
:news_enabled, :posts_per_page, :blog_path,
|
7
7
|
:news_path, :enable_sitemap, :has_custom_fields,
|
8
|
-
:cache_mode,
|
8
|
+
:cache_mode, :permitted_attributes, :query_for_user,
|
9
9
|
:enable_rakismet, :enable_markdown, :default_comment_approval
|
10
10
|
)
|
11
11
|
self.base_layout = 'application'
|
@@ -21,5 +21,7 @@ module Spud
|
|
21
21
|
self.enable_rakismet = false
|
22
22
|
self.enable_markdown = false
|
23
23
|
self.default_comment_approval = true
|
24
|
+
self.permitted_attributes = []
|
25
|
+
self.query_for_user = nil
|
24
26
|
end
|
25
27
|
end
|
data/lib/spud_blog/engine.rb
CHANGED
@@ -1,17 +1,12 @@
|
|
1
1
|
require 'tb_core'
|
2
2
|
require 'tb_permalinks'
|
3
3
|
require 'tb_liquid'
|
4
|
-
require 'awesome_nested_set'
|
5
4
|
require 'truncate_html'
|
6
5
|
|
7
6
|
module Spud
|
8
7
|
module Blog
|
9
8
|
class Engine < Rails::Engine
|
10
9
|
|
11
|
-
def self.require_model(model_name)
|
12
|
-
require "#{root}/app/models/#{model_name}"
|
13
|
-
end
|
14
|
-
|
15
10
|
def self.require_controller(controller_name)
|
16
11
|
require "#{root}/app/controllers/#{controller_name}"
|
17
12
|
end
|
data/lib/spud_blog/version.rb
CHANGED
@@ -2,8 +2,8 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe BlogController, :type => :controller do
|
4
4
|
|
5
|
-
before(:
|
6
|
-
|
5
|
+
before(:each) do
|
6
|
+
activate_authlogic
|
7
7
|
end
|
8
8
|
|
9
9
|
describe :index do
|
@@ -12,6 +12,19 @@ describe BlogController, :type => :controller do
|
|
12
12
|
get :index
|
13
13
|
assigns(:posts).count.should be > 1
|
14
14
|
end
|
15
|
+
|
16
|
+
it "should not display any posts" do
|
17
|
+
Spud::Blog.config.query_for_user = ->(user){
|
18
|
+
if user.blank?
|
19
|
+
'1=0'
|
20
|
+
else
|
21
|
+
{}
|
22
|
+
end
|
23
|
+
}
|
24
|
+
get :index
|
25
|
+
assigns(:posts).count.should be 0
|
26
|
+
Spud::Blog.config.query_for_user = nil
|
27
|
+
end
|
15
28
|
end
|
16
29
|
|
17
30
|
describe :create_comment do
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This migration comes from tb_blog (originally 20140508200730)
|
2
|
+
class RemoveAwesomeNestedSetColumnsFromSpudPostCategories < ActiveRecord::Migration
|
3
|
+
def up
|
4
|
+
change_table :spud_post_categories do |t|
|
5
|
+
t.remove :lft, :rgt, :depth, :parent_id
|
6
|
+
end
|
7
|
+
end
|
8
|
+
def down
|
9
|
+
change_table :spud_post_categories do |t|
|
10
|
+
t.integer :lft
|
11
|
+
t.integer :rgt
|
12
|
+
t.integer :depth
|
13
|
+
t.inreger :parent_id
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended that you check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(version:
|
14
|
+
ActiveRecord::Schema.define(version: 20140730131550) do
|
15
15
|
|
16
16
|
create_table "spud_liquid_tags", force: true do |t|
|
17
17
|
t.integer "attachment_id"
|
@@ -49,17 +49,12 @@ ActiveRecord::Schema.define(version: 20140113162805) do
|
|
49
49
|
t.string "name"
|
50
50
|
t.datetime "created_at"
|
51
51
|
t.datetime "updated_at"
|
52
|
-
t.integer "parent_id", default: 0
|
53
52
|
t.string "url_name"
|
54
|
-
t.integer "lft"
|
55
|
-
t.integer "rgt"
|
56
|
-
t.integer "depth"
|
57
53
|
end
|
58
54
|
|
59
|
-
add_index "spud_post_categories", ["parent_id"], name: "index_spud_post_categories_on_parent_id", using: :btree
|
60
55
|
add_index "spud_post_categories", ["url_name"], name: "index_spud_post_categories_on_url_name", using: :btree
|
61
56
|
|
62
|
-
create_table "spud_post_categories_posts",
|
57
|
+
create_table "spud_post_categories_posts", force: true do |t|
|
63
58
|
t.integer "spud_post_id"
|
64
59
|
t.integer "spud_post_category_id"
|
65
60
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tb_blog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Westlake Design
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -80,20 +80,6 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: awesome_nested_set
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 3.0.0.rc.3
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - '='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 3.0.0.rc.3
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: mysql2
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -217,7 +203,6 @@ files:
|
|
217
203
|
- Rakefile
|
218
204
|
- Readme.md
|
219
205
|
- app/assets/images/spud/admin/news_thumb.png
|
220
|
-
- app/assets/images/spud/admin/news_thumb@2x.png
|
221
206
|
- app/assets/images/spud/admin/posts_thumb.png
|
222
207
|
- app/assets/javascripts/admin/blog/application.js
|
223
208
|
- app/assets/javascripts/admin/blog/post_categories.js
|
@@ -238,6 +223,7 @@ files:
|
|
238
223
|
- app/helpers/blog/sitemaps_helper.rb
|
239
224
|
- app/helpers/blog_helper.rb
|
240
225
|
- app/helpers/news_helper.rb
|
226
|
+
- app/models/spud/spud_post_model.rb
|
241
227
|
- app/models/spud_post.rb
|
242
228
|
- app/models/spud_post_categories_post.rb
|
243
229
|
- app/models/spud_post_category.rb
|
@@ -253,6 +239,7 @@ files:
|
|
253
239
|
- app/views/admin/post_categories/new.html.erb
|
254
240
|
- app/views/admin/post_comments/index.html.erb
|
255
241
|
- app/views/admin/posts/_category.html.erb
|
242
|
+
- app/views/admin/posts/_custom_fields.html.erb
|
256
243
|
- app/views/admin/posts/_form.html.erb
|
257
244
|
- app/views/admin/posts/edit.html.erb
|
258
245
|
- app/views/admin/posts/index.html.erb
|
@@ -282,6 +269,7 @@ files:
|
|
282
269
|
- db/migrate/20130120151857_add_content_format_to_spud_posts.rb
|
283
270
|
- db/migrate/20130121130612_add_content_processed_to_spud_post.rb
|
284
271
|
- db/migrate/20140406182651_add_primary_key_to_spud_post_categories_posts.rb
|
272
|
+
- db/migrate/20140508200730_remove_awesome_nested_set_columns_from_spud_post_categories.rb
|
285
273
|
- lib/generators/spud/blog/random_posts_generator.rb
|
286
274
|
- lib/generators/spud/blog/views_generator.rb
|
287
275
|
- lib/spud_blog/configuration.rb
|
@@ -341,6 +329,8 @@ files:
|
|
341
329
|
- spec/dummy/db/migrate/20140110180430_add_content_format_to_spud_posts.tb_blog.rb
|
342
330
|
- spec/dummy/db/migrate/20140110180431_add_content_processed_to_spud_post.tb_blog.rb
|
343
331
|
- spec/dummy/db/migrate/20140113162805_create_tb_liquid_spud_liquid_tags.tb_liquid.rb
|
332
|
+
- spec/dummy/db/migrate/20140730131549_add_primary_key_to_spud_post_categories_posts.tb_blog.rb
|
333
|
+
- spec/dummy/db/migrate/20140730131550_remove_awesome_nested_set_columns_from_spud_post_categories.tb_blog.rb
|
344
334
|
- spec/dummy/db/schema.rb
|
345
335
|
- spec/dummy/public/404.html
|
346
336
|
- spec/dummy/public/422.html
|
@@ -425,6 +415,8 @@ test_files:
|
|
425
415
|
- spec/dummy/db/migrate/20140110180430_add_content_format_to_spud_posts.tb_blog.rb
|
426
416
|
- spec/dummy/db/migrate/20140110180431_add_content_processed_to_spud_post.tb_blog.rb
|
427
417
|
- spec/dummy/db/migrate/20140113162805_create_tb_liquid_spud_liquid_tags.tb_liquid.rb
|
418
|
+
- spec/dummy/db/migrate/20140730131549_add_primary_key_to_spud_post_categories_posts.tb_blog.rb
|
419
|
+
- spec/dummy/db/migrate/20140730131550_remove_awesome_nested_set_columns_from_spud_post_categories.tb_blog.rb
|
428
420
|
- spec/dummy/db/schema.rb
|
429
421
|
- spec/dummy/public/404.html
|
430
422
|
- spec/dummy/public/422.html
|
Binary file
|