tb_blog 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.md +23 -6
- data/app/controllers/admin/post_comments_controller.rb +21 -8
- data/app/controllers/admin/posts_controller.rb +17 -10
- data/app/controllers/concerns/blog_url_helpers.rb +60 -0
- data/app/controllers/posts_controller.rb +140 -0
- data/app/helpers/blog_helper.rb +6 -11
- data/app/models/spud/spud_post_model.rb +12 -38
- data/app/models/spud_blog_config.rb +26 -0
- data/app/models/spud_post_category.rb +0 -4
- data/app/models/spud_post_comment.rb +15 -0
- data/app/views/admin/post_comments/index.html.erb +1 -1
- data/app/views/admin/posts/_form.html.erb +9 -11
- data/app/views/admin/posts/index.html.erb +2 -2
- data/app/views/{blog → posts}/_comment_form.html.erb +1 -1
- data/app/views/{blog → posts}/index.html.erb +5 -5
- data/app/views/{blog → posts}/index.rss.builder +4 -4
- data/app/views/{blog → posts}/show.html.erb +9 -2
- data/config/routes.rb +30 -64
- data/db/migrate/20140808132950_add_blog_key_to_spud_posts.rb +6 -0
- data/db/migrate/20140811152252_add_blog_key_to_spud_post_comments.rb +6 -0
- data/lib/generators/spud/blog/blog_generator.rb +33 -0
- data/lib/generators/spud/blog/views_generator.rb +2 -3
- data/lib/spud_blog/configuration.rb +12 -12
- data/lib/spud_blog/engine.rb +37 -26
- data/lib/spud_blog/version.rb +1 -1
- data/lib/tasks/spud_blog_tasks.rake +14 -0
- data/spec/controllers/{blog_controller_spec.rb → posts_controller_spec.rb} +6 -6
- data/spec/dummy/db/migrate/20140811161502_add_blog_key_to_spud_posts.tb_blog.rb +7 -0
- data/spec/dummy/db/migrate/20140811161503_add_blog_key_to_spud_post_comments.tb_blog.rb +7 -0
- data/spec/dummy/db/schema.rb +5 -1
- data/spec/factories/spud_post_factories.rb +1 -0
- metadata +18 -20
- data/app/controllers/admin/news_posts_controller.rb +0 -69
- data/app/controllers/blog/sitemaps_controller.rb +0 -10
- data/app/controllers/blog_controller.rb +0 -129
- data/app/controllers/news_controller.rb +0 -69
- data/app/views/admin/news_posts/edit.html.erb +0 -3
- data/app/views/admin/news_posts/index.html.erb +0 -42
- data/app/views/admin/news_posts/new.html.erb +0 -3
- data/app/views/blog/_comment.html.erb +0 -6
- data/app/views/blog/sitemaps/show.xml.builder +0 -16
- data/app/views/news/index.html.erb +0 -37
- data/app/views/news/index.rss.builder +0 -18
- data/app/views/news/show.html.erb +0 -31
@@ -1,69 +0,0 @@
|
|
1
|
-
class Admin::NewsPostsController < Admin::ApplicationController
|
2
|
-
|
3
|
-
respond_to :html, :xml, :json
|
4
|
-
before_filter :find_post, :only => [:show, :edit, :update, :destroy]
|
5
|
-
add_breadcrumb 'News Posts', :admin_news_posts_path
|
6
|
-
belongs_to_spud_app :news_posts
|
7
|
-
|
8
|
-
def index
|
9
|
-
@posts = SpudPost.where(:is_news => true).order('published_at desc').includes(:author).paginate(:page => params[:page], :per_page => 15)
|
10
|
-
respond_with @posts
|
11
|
-
end
|
12
|
-
|
13
|
-
def edit
|
14
|
-
@categories = SpudPostCategory.ordered
|
15
|
-
respond_with @post
|
16
|
-
end
|
17
|
-
|
18
|
-
def update
|
19
|
-
@categories = SpudPostCategory.ordered
|
20
|
-
params[:spud_post][:spud_site_ids] ||= []
|
21
|
-
if @post.update_attributes(post_params)
|
22
|
-
flash[:notice] = 'News Post was successfully updated.'
|
23
|
-
end
|
24
|
-
respond_with @post, :location => admin_news_posts_path
|
25
|
-
end
|
26
|
-
|
27
|
-
def new
|
28
|
-
@categories = SpudPostCategory.ordered
|
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
|
-
respond_with @post
|
31
|
-
end
|
32
|
-
|
33
|
-
def create
|
34
|
-
@categories = SpudPostCategory.ordered
|
35
|
-
params[:spud_post][:spud_site_ids] ||= []
|
36
|
-
@post = SpudPost.new(post_params)
|
37
|
-
@post.is_news = true
|
38
|
-
if @post.save
|
39
|
-
flash[:notice] = 'News Post was successfully created.'
|
40
|
-
end
|
41
|
-
respond_with @post, :location => admin_news_posts_path
|
42
|
-
end
|
43
|
-
|
44
|
-
def destroy
|
45
|
-
if @post.destroy
|
46
|
-
flash[:notice] = 'News Post was successfully deleted.'
|
47
|
-
end
|
48
|
-
respond_with @post, :location => admin_news_posts_path
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def find_post
|
54
|
-
@post = SpudPost.find(params[:id])
|
55
|
-
if @post.blank?
|
56
|
-
flash[:error] = 'News Post not found!'
|
57
|
-
redirect_to admin_news_posts_path and return false
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def post_params
|
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)
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
@@ -1,129 +0,0 @@
|
|
1
|
-
class BlogController < ApplicationController
|
2
|
-
|
3
|
-
respond_to :html, :xml, :json, :rss
|
4
|
-
layout Spud::Blog.base_layout
|
5
|
-
|
6
|
-
before_filter :find_post, :only => [:show, :create_comment]
|
7
|
-
|
8
|
-
def index
|
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
|
-
if Spud::Core.config.multisite_mode_enabled
|
11
|
-
@posts = @posts.for_spud_site(current_site_id)
|
12
|
-
end
|
13
|
-
respond_with @posts
|
14
|
-
end
|
15
|
-
|
16
|
-
# The sole purpose of this action is to redirect from a POST to an seo-friendly url
|
17
|
-
def filter
|
18
|
-
if !params[:category_url_name].blank? && !params[:archive_date].blank?
|
19
|
-
redirect_to blog_category_archive_path(params[:category_url_name], params[:archive_date])
|
20
|
-
elsif !params[:category_url_name].blank?
|
21
|
-
redirect_to blog_category_path(params[:category_url_name])
|
22
|
-
elsif !params[:archive_date].blank?
|
23
|
-
redirect_to blog_archive_path(params[:archive_date])
|
24
|
-
else
|
25
|
-
redirect_to blog_path
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def category
|
30
|
-
page = 1
|
31
|
-
if params[:page].blank? == false
|
32
|
-
page = params[:page].to_i
|
33
|
-
if page.to_s != params[:page].to_s
|
34
|
-
if(page > 1)
|
35
|
-
redirect_to blog_category_path(:page => page),:status => :moved_permanently and return
|
36
|
-
else
|
37
|
-
redirect_to blog_category_path(:page => nil),:status => :moved_permanently and return
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
if @post_category = SpudPostCategory.find_by_url_name(params[:category_url_name])
|
43
|
-
if Spud::Core.config.multisite_mode_enabled
|
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
|
-
else
|
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
|
-
end
|
48
|
-
else
|
49
|
-
redirect_to blog_path
|
50
|
-
return
|
51
|
-
end
|
52
|
-
respond_with @posts do |format|
|
53
|
-
format.html { render 'index' }
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def archive
|
58
|
-
if Spud::Core.config.multisite_mode_enabled
|
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
|
-
else
|
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
|
-
end
|
63
|
-
respond_with @posts do |format|
|
64
|
-
format.html { render 'index' }
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def show
|
69
|
-
if @post.comments_enabled
|
70
|
-
@comment = SpudPostComment.new()
|
71
|
-
end
|
72
|
-
respond_with @post
|
73
|
-
end
|
74
|
-
|
75
|
-
def create_comment
|
76
|
-
unless params[:comment_validation].blank? # trap spam bots
|
77
|
-
render :nothing => true
|
78
|
-
return
|
79
|
-
end
|
80
|
-
@comment = @post.comments.new(comment_params)
|
81
|
-
@comment.user_agent = request.env["HTTP_USER_AGENT"]
|
82
|
-
@comment.user_ip = request.remote_ip
|
83
|
-
@comment.referrer = request.referrer
|
84
|
-
@comment.approved = Spud::Blog.default_comment_approval
|
85
|
-
@comment.permalink = blog_post_url(@post.url_name)
|
86
|
-
if @comment.save
|
87
|
-
if @comment.approved?
|
88
|
-
flash[:notice] = 'Your comment has been posted.'
|
89
|
-
else
|
90
|
-
flash[:notice] = 'Your comment has been saved and will appear after being reviewed by an administrator.'
|
91
|
-
end
|
92
|
-
@comment = SpudPostComment.new()
|
93
|
-
end
|
94
|
-
respond_with @comment do |format|
|
95
|
-
format.html {
|
96
|
-
render 'show'
|
97
|
-
}
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
private
|
102
|
-
|
103
|
-
def find_post
|
104
|
-
@post = SpudPost.for_user(current_user).where(:url_name => params[:id]).first
|
105
|
-
if @post.blank? || @post.is_private? || (Spud::Core.config.multisite_mode_enabled && !@post.spud_site_ids.include?(current_site_id))
|
106
|
-
raise Spud::NotFoundError.new(:item => 'post')
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def comment_params
|
111
|
-
params.require(:spud_post_comment).permit(:author, :content)
|
112
|
-
end
|
113
|
-
|
114
|
-
def get_page_number
|
115
|
-
page = 1
|
116
|
-
if params[:page].blank? == false
|
117
|
-
page = params[:page].to_i
|
118
|
-
if page.to_s != params[:page].to_s
|
119
|
-
if(page > 1)
|
120
|
-
redirect_to blog_path(:page => page), :status => :moved_permanently and return
|
121
|
-
else
|
122
|
-
redirect_to blog_path(:page => nil), :status => :moved_permanently and return
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
return page
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
class NewsController < ApplicationController
|
2
|
-
|
3
|
-
respond_to :html, :xml, :json, :rss
|
4
|
-
layout Spud::Blog.news_layout
|
5
|
-
|
6
|
-
before_filter :find_post, :only => [:show]
|
7
|
-
|
8
|
-
def index
|
9
|
-
@posts = SpudPost.for_user(current_user).visible.news_posts.ordered.paginate(:page => params[:page], :per_page => Spud::Blog.config.posts_per_page)
|
10
|
-
if Spud::Core.config.multisite_mode_enabled
|
11
|
-
@posts = @posts.for_spud_site(current_site_id)
|
12
|
-
end
|
13
|
-
respond_with @posts
|
14
|
-
end
|
15
|
-
|
16
|
-
# The sole purpose of this action is to redirect from a POST to an seo-friendly url
|
17
|
-
def filter
|
18
|
-
if !params[:category_url_name].blank? && !params[:archive_date].blank?
|
19
|
-
redirect_to news_category_archive_path(params[:category_url_name], params[:archive_date])
|
20
|
-
elsif !params[:category_url_name].blank?
|
21
|
-
redirect_to news_category_path(params[:category_url_name])
|
22
|
-
elsif !params[:archive_date].blank?
|
23
|
-
redirect_to news_archive_path(params[:archive_date])
|
24
|
-
else
|
25
|
-
redirect_to news_path
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def category
|
30
|
-
if @post_category = SpudPostCategory.find_by_url_name(params[:category_url_name])
|
31
|
-
if Spud::Core.config.multisite_mode_enabled
|
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)
|
33
|
-
else
|
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)
|
35
|
-
end
|
36
|
-
else
|
37
|
-
redirect_to news_path
|
38
|
-
return
|
39
|
-
end
|
40
|
-
respond_with @posts do |format|
|
41
|
-
format.html { render 'index' }
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def archive
|
46
|
-
if Spud::Core.config.multisite_mode_enabled
|
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)
|
48
|
-
else
|
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)
|
50
|
-
end
|
51
|
-
respond_with @posts do |format|
|
52
|
-
format.html { render 'index' }
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def show
|
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
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
<%= content_for :data_controls do %>
|
2
|
-
<%= link_to "Manage Categories", admin_post_categories_path, :class => 'btn spud_blog_manage_categories', :title => 'Manage Categories' %>
|
3
|
-
<%= link_to "New Post", new_admin_news_post_path, :class => "btn btn-primary", :title => "New Post" %>
|
4
|
-
<% end %>
|
5
|
-
|
6
|
-
<%=content_for :detail do %>
|
7
|
-
<table class="table table-striped">
|
8
|
-
<thead>
|
9
|
-
<tr>
|
10
|
-
<th>Title</th>
|
11
|
-
<th>Author</th>
|
12
|
-
<th>Published At</th>
|
13
|
-
<th> </th>
|
14
|
-
</tr>
|
15
|
-
</thead>
|
16
|
-
<tbody>
|
17
|
-
<% @posts.each do |post| %>
|
18
|
-
<tr>
|
19
|
-
<td>
|
20
|
-
<%= link_to post.title, news_post_path(post.url_name), :target => :blank %>
|
21
|
-
<% if !post.visible? %>
|
22
|
-
<span class="badge">Draft</span>
|
23
|
-
<% end %>
|
24
|
-
</td>
|
25
|
-
<td><%= post.author.full_name %></td>
|
26
|
-
<td><%= post.published_at.strftime('%m/%d/%Y') %></td>
|
27
|
-
<td class="text-right">
|
28
|
-
<%= link_to 'Edit', edit_admin_news_post_path(post), :class => 'btn btn-small' %>
|
29
|
-
<%= link_to 'Delete', admin_news_post_path(post), :method => :delete, :data => {:confirm => 'Are you sure you want to delete this post?'}, :class => 'btn btn-small btn-danger' %>
|
30
|
-
</td>
|
31
|
-
</tr>
|
32
|
-
<%end%>
|
33
|
-
</tbody>
|
34
|
-
</table>
|
35
|
-
<div class="spud_admin_pagination">
|
36
|
-
<%= will_paginate @posts %>
|
37
|
-
</div>
|
38
|
-
|
39
|
-
<script>
|
40
|
-
$(document).ready(spud.admin.post_categories.index);
|
41
|
-
</script>
|
42
|
-
<%end%>
|
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
xml.instruct! :xml, :version => '1.0', :encoding => 'UTF-8'
|
3
|
-
|
4
|
-
# create the urlset
|
5
|
-
xml.urlset :xmlns => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
|
6
|
-
@posts.each do |post|
|
7
|
-
xml.url do
|
8
|
-
if post.is_news
|
9
|
-
xml.loc news_post_url(post.url_name)
|
10
|
-
else
|
11
|
-
xml.loc blog_post_url(post.url_name)
|
12
|
-
end
|
13
|
-
xml.lastmod post.published_at.xmlschema
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
<% @page_title = 'News' %>
|
2
|
-
|
3
|
-
<% content_for :head do %>
|
4
|
-
<%= spud_news_rss_link %>
|
5
|
-
<% end %>
|
6
|
-
|
7
|
-
<% cache(cache_key_for_spud_collection(@posts, :cache_params => [:category_url_name, :archive_date, :page], :for_user => true)) do %>
|
8
|
-
<div id="spud_news_filters">
|
9
|
-
<%= form_tag news_path, :class => 'spud_blog_filter_form' do %>
|
10
|
-
<label>Category:</label>
|
11
|
-
<%= spud_post_category_select %>
|
12
|
-
<label>Month:</label>
|
13
|
-
<%= spud_post_archive_select %>
|
14
|
-
<input type="submit" value="Submit" />
|
15
|
-
<% end %>
|
16
|
-
</div>
|
17
|
-
|
18
|
-
<div id="spud_news_posts">
|
19
|
-
<% if @posts.length > 0 %>
|
20
|
-
<% @posts.includes(:categories, :author).each do |post| %>
|
21
|
-
<% cache(post) do %>
|
22
|
-
<div class="spud_news_post">
|
23
|
-
<h3><%= link_to post.title, news_post_path(post.url_name) %></h3>
|
24
|
-
<h4>Posted by <%= post.author.full_name %> on <%= post.display_date %></h4>
|
25
|
-
<div class="spud_news_post_content">
|
26
|
-
<%= truncate_html post.content_processed.html_safe, :length => 250 %>
|
27
|
-
</div>
|
28
|
-
</div>
|
29
|
-
<% end %>
|
30
|
-
<% end %>
|
31
|
-
<% else %>
|
32
|
-
<p>No posts were found in this category</p>
|
33
|
-
<% end %>
|
34
|
-
</div>
|
35
|
-
<% end %>
|
36
|
-
|
37
|
-
<%= will_paginate @posts %>
|
@@ -1,18 +0,0 @@
|
|
1
|
-
xml.instruct! :xml, :version => "1.0"
|
2
|
-
xml.rss :version => "2.0" do
|
3
|
-
xml.channel do
|
4
|
-
xml.title "#{Spud::Core.site_name} News"
|
5
|
-
xml.description "News articles for #{Spud::Core.site_name}"
|
6
|
-
xml.link news_url(:format => :rss)
|
7
|
-
|
8
|
-
for article in @posts
|
9
|
-
xml.item do
|
10
|
-
xml.title article.title
|
11
|
-
xml.description strip_tags(article.content_processed).truncate(250)
|
12
|
-
xml.pubDate article.created_at.to_s(:rfc822)
|
13
|
-
xml.link news_post_url(article.url_name)
|
14
|
-
xml.guid news_post_url(article.url_name)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
<% content_for :title do %>
|
2
|
-
<%= @post.title %> | <%=current_site_name%>
|
3
|
-
<% end %>
|
4
|
-
|
5
|
-
<% content_for :head do %>
|
6
|
-
<% cache([@post, 'head']) do %>
|
7
|
-
<%= spud_news_rss_link %>
|
8
|
-
<meta name="description" content="<%= @post.meta_description %>" />
|
9
|
-
<% if @post.meta_keywords.blank? %>
|
10
|
-
<meta name="keywords" content="<%= @post.categories.collect{ |c| c.name }.join(',') %>" />
|
11
|
-
<% else %>
|
12
|
-
<meta name="keywords" content="<%= @post.meta_keywords %>" />
|
13
|
-
<% end %>
|
14
|
-
<% end %>
|
15
|
-
<% end %>
|
16
|
-
|
17
|
-
<% cache(@post) do %>
|
18
|
-
<div class="spud_news_post">
|
19
|
-
<h3><%= @post.title %></h3>
|
20
|
-
<h4>Posted by <%= @post.author.full_name %> on <%= @post.display_date %></h4>
|
21
|
-
<% if @post.categories.any? %>
|
22
|
-
<p id="spud_news_post_categories">
|
23
|
-
Filed under
|
24
|
-
<%= raw(@post.categories.collect{ |c| link_to c.name, news_category_path(c.url_name) }.join(', ')) %>
|
25
|
-
</p>
|
26
|
-
<% end %>
|
27
|
-
<div id="spud_news_post_content">
|
28
|
-
<%= raw @post.content_processed %>
|
29
|
-
</div>
|
30
|
-
</div>
|
31
|
-
<% end %>
|