bcms_blog 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +10 -0
- data/README.markdown +10 -4
- data/app/assets/javascripts/bcms_blog/application.js +15 -0
- data/app/assets/stylesheets/bcms_blog/application.css +13 -0
- data/app/controllers/bcms_blog/blog_comments_controller.rb +5 -0
- data/app/controllers/bcms_blog/blog_posts_controller.rb +37 -0
- data/app/controllers/bcms_blog/blogs_controller.rb +13 -0
- data/app/controllers/bcms_blog/feeds_controller.rb +10 -0
- data/app/helpers/bcms_blog/blog_helper.rb +27 -0
- data/app/models/bcms_blog/blog.rb +99 -0
- data/app/models/bcms_blog/blog_comment.rb +36 -0
- data/app/models/bcms_blog/blog_group_membership.rb +6 -0
- data/app/models/bcms_blog/blog_observer.rb +141 -0
- data/app/models/bcms_blog/blog_post.rb +108 -0
- data/app/portlets/blog_post_portlet.rb +6 -6
- data/app/portlets/blog_posts_portlet.rb +4 -4
- data/app/views/bcms_blog/blog_comments/_form.html.erb +5 -0
- data/app/views/bcms_blog/blog_comments/render.html.erb +2 -0
- data/app/views/{cms → bcms_blog}/blog_posts/_form.html.erb +1 -1
- data/app/views/{cms → bcms_blog}/blog_posts/no_access.html.erb +0 -0
- data/app/views/{cms → bcms_blog}/blog_posts/render.html.erb +0 -0
- data/app/views/{cms → bcms_blog}/blogs/_form.html.erb +2 -2
- data/app/views/{cms → bcms_blog}/blogs/admin_only.html.erb +0 -0
- data/app/views/{cms → bcms_blog}/blogs/render.html.erb +0 -0
- data/app/views/{feeds → bcms_blog/feeds}/index.rss.builder +3 -3
- data/app/views/portlets/blog_post/_form.html.erb +1 -1
- data/app/views/portlets/blog_post/render.html.erb +3 -1
- data/app/views/portlets/blog_posts/_form.html.erb +1 -1
- data/config/routes.rb +5 -0
- data/db/bcms_blog.seeds.rb +4 -0
- data/db/migrate/20090415000000_create_blogs.rb +5 -6
- data/db/migrate/20090415000001_create_blog_posts.rb +1 -5
- data/db/migrate/20090415000002_create_blog_comments.rb +0 -2
- data/db/migrate/20120529184028_v130.rb +12 -0
- data/lib/bcms_blog/engine.rb +15 -1
- data/lib/bcms_blog/route_extensions.rb +8 -0
- data/lib/bcms_blog/version.rb +3 -0
- data/lib/bcms_blog.rb +5 -2
- data/lib/generators/bcms_blog/install/install_generator.rb +11 -11
- data/lib/tasks/bcms_blog_tasks.rake +4 -0
- data/test/bcms_blog_test.rb +7 -0
- data/test/functional/cms/blog_posts_controller_test.rb +47 -0
- data/test/functional/cms/blogs_controller_test.rb +27 -0
- data/test/integration/blog_controller_test.rb +63 -0
- data/test/integration/blog_post_test.rb +31 -0
- data/test/support/blog_test_helper.rb +71 -0
- data/test/support/factories.rb +54 -0
- data/test/support/factory_girl_support.rb +2 -0
- data/test/test_helper.rb +15 -0
- data/test/test_logging.rb +64 -0
- data/test/unit/blog_comment_test.rb +34 -0
- data/test/unit/blog_observer_test.rb +84 -0
- data/test/unit/blog_post_test.rb +45 -0
- data/test/unit/blog_test.rb +42 -0
- data/test/unit/helpers/feeds_helper_test.rb +4 -0
- metadata +83 -35
- data/app/controllers/cms/blog_comments_controller.rb +0 -3
- data/app/controllers/cms/blog_posts_controller.rb +0 -35
- data/app/controllers/cms/blogs_controller.rb +0 -11
- data/app/controllers/feeds_controller.rb +0 -8
- data/app/helpers/cms/blog_helper.rb +0 -20
- data/app/models/blog.rb +0 -95
- data/app/models/blog_comment.rb +0 -34
- data/app/models/blog_group_membership.rb +0 -4
- data/app/models/blog_observer.rb +0 -140
- data/app/models/blog_post.rb +0 -113
- data/app/views/cms/blog_comments/_form.html.erb +0 -5
- data/app/views/cms/blog_comments/render.html.erb +0 -2
- data/app/views/layouts/templates/default.html.erb +0 -17
- data/doc/README_FOR_APP +0 -2
- data/doc/migrate_to_20100427.rb +0 -77
- data/doc/release_notes.txt +0 -48
- data/lib/bcms_blog/routes.rb +0 -10
data/app/models/blog_observer.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
class BlogObserver < ActiveRecord::Observer
|
2
|
-
|
3
|
-
def after_create(blog)
|
4
|
-
@blog = blog
|
5
|
-
create_section_pages_and_routes
|
6
|
-
end
|
7
|
-
|
8
|
-
def after_save(blog)
|
9
|
-
if blog.persisted?
|
10
|
-
blog.publish
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
# Can't use before_update since CMS callback stack is altered from normal callbacks.
|
15
|
-
def before_save(blog)
|
16
|
-
if blog.persisted?
|
17
|
-
update_section_pages_and_route(blog)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
# A section, two pages, 6 routes and a portlet are created alongside every blog.
|
24
|
-
# This structure provides sensible defaults so users can pretty much start adding
|
25
|
-
# posts right after creating a blog without having to worry about where to put
|
26
|
-
# their blog and portlets.
|
27
|
-
def create_section_pages_and_routes
|
28
|
-
create_blog_section
|
29
|
-
create_blog_block_page
|
30
|
-
create_post_portlet_page
|
31
|
-
reload_routes
|
32
|
-
end
|
33
|
-
|
34
|
-
# Every blog is created within a section with the same name.
|
35
|
-
# For example, if you create a blog named 'MyBlog', a section 'MyBlog' will be
|
36
|
-
# created. This section will hold two pages: one for the blog ContentBlock that
|
37
|
-
# will render the list of posts and one for the BlogPost portlet (ie the individual
|
38
|
-
# post view)
|
39
|
-
def create_blog_section
|
40
|
-
@section = Section.find_by_name(@blog.name) || (
|
41
|
-
@section = Section.create!(
|
42
|
-
:name => @blog.name,
|
43
|
-
:path => "/#{@blog.name_for_path}",
|
44
|
-
:parent_id => 1
|
45
|
-
)
|
46
|
-
@section.allow_groups = :all
|
47
|
-
@section.save!
|
48
|
-
@section
|
49
|
-
)
|
50
|
-
end
|
51
|
-
|
52
|
-
# Following with the above example, the first page that is created is named 'MyBlog' and
|
53
|
-
# holds the Blog ContentBlock directly, not a portlet. Together with the 5 created routes,
|
54
|
-
# this page and its ContentBlock handle different post listings (all posts, posts in year,
|
55
|
-
# month or day and posts by tag or category).
|
56
|
-
def create_blog_block_page
|
57
|
-
page = Page.find_by_name(@blog.name) || Page.create!(
|
58
|
-
:name => @blog.name,
|
59
|
-
:path => "/#{@blog.name_for_path}",
|
60
|
-
:section => @section,
|
61
|
-
:template_file_name => "default.html.erb",
|
62
|
-
:hidden => true
|
63
|
-
)
|
64
|
-
page.create_connector(@blog, 'main')
|
65
|
-
|
66
|
-
create_route(page, "#{@blog.name}: Posts In Day", "/#{@blog.name_for_path}/:year/:month/:day")
|
67
|
-
create_route(page, "#{@blog.name}: Posts In Month", "/#{@blog.name_for_path}/:year/:month")
|
68
|
-
create_route(page, "#{@blog.name}: Posts In Year", "/#{@blog.name_for_path}/:year")
|
69
|
-
create_route(page, "#{@blog.name}: Posts With Tag", "/#{@blog.name_for_path}/tag/:tag")
|
70
|
-
create_route(page, "#{@blog.name}: Posts In Category", "/#{@blog.name_for_path}/category/:category")
|
71
|
-
end
|
72
|
-
|
73
|
-
# The second page that is created holds the BlogPostPortlet and displays the individual
|
74
|
-
# post view, along with it's comments.
|
75
|
-
def create_post_portlet_page
|
76
|
-
page = Page.find_by_name(portlet_name = "#{@blog.name}: Post") || Page.create!(
|
77
|
-
:name => portlet_name,
|
78
|
-
:path => "/#{@blog.name_for_path}/post",
|
79
|
-
:section => @section,
|
80
|
-
:template_file_name => "default.html.erb",
|
81
|
-
:hidden => true)
|
82
|
-
page.publish
|
83
|
-
create_route(page, portlet_name, "/#{@blog.name_for_path}/:year/:month/:day/:slug")
|
84
|
-
create_portlet(page, portlet_name, BlogPostPortlet)
|
85
|
-
end
|
86
|
-
|
87
|
-
# When the name of a Blog block changes, we need to change the Post page route.
|
88
|
-
# We also change the *names* of the section and pages that hold the blog block and
|
89
|
-
# post portlet because presumably, by changing the name of the blog, the intention
|
90
|
-
# was to reflect this name change in breadcrumbs and menus.
|
91
|
-
#
|
92
|
-
# Note that no other routes or paths are updated. This is intentional to be consistent
|
93
|
-
# with how BrowserCMS behaves when a Section or Page names change: paths are not
|
94
|
-
# updated automatically.
|
95
|
-
def update_section_pages_and_route(blog)
|
96
|
-
if blog.name_changed?
|
97
|
-
old_blog_name = blog.name_was
|
98
|
-
|
99
|
-
Section.find_by_name(old_blog_name).update_attribute(:name, blog.name)
|
100
|
-
PageRoute.find_by_name("#{old_blog_name}: Post").update_attribute(:name, "#{blog.name}: Post")
|
101
|
-
|
102
|
-
page = Page.find_by_name("#{old_blog_name}: Post")
|
103
|
-
page.update_attribute(:name, "#{blog.name}: Post")
|
104
|
-
page.publish
|
105
|
-
|
106
|
-
page = Page.find_by_name(old_blog_name)
|
107
|
-
page.update_attribute(:name, blog.name)
|
108
|
-
page.publish
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def reload_routes
|
113
|
-
PageRoute.reload_routes
|
114
|
-
end
|
115
|
-
|
116
|
-
def create_route(page, name, pattern)
|
117
|
-
route = page.page_routes.build(:name => name, :pattern => pattern, :code => "")
|
118
|
-
route.save!
|
119
|
-
route.add_condition(:method, "get").save
|
120
|
-
route.add_requirement(:year, '\d{4,}') if pattern.include?(":year")
|
121
|
-
route.add_requirement(:month, '\d{2,}') if pattern.include?(":month")
|
122
|
-
route.add_requirement(:day, '\d{2,}') if pattern.include?(":day")
|
123
|
-
route.requirements.each(&:save)
|
124
|
-
end
|
125
|
-
|
126
|
-
def create_portlet(page, name, portlet_class)
|
127
|
-
portlet_class.create!(
|
128
|
-
:name => "#{name} Portlet",
|
129
|
-
:blog_id => @blog.id,
|
130
|
-
:template => portlet_class.default_template,
|
131
|
-
:connect_to_page_id => page.id,
|
132
|
-
:connect_to_container => "main",
|
133
|
-
:publish_on_save => true)
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
data/app/models/blog_post.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
class BlogPost < ActiveRecord::Base
|
2
|
-
acts_as_content_block :taggable => true
|
3
|
-
|
4
|
-
belongs_to_attachment
|
5
|
-
def set_attachment_file_path
|
6
|
-
# The default behavior is use /attachments/file.txt for the attachment path,
|
7
|
-
# assuming file.txt was the name of the file the user uploaded
|
8
|
-
# You should override this with your own strategy for setting the attachment path
|
9
|
-
super
|
10
|
-
end
|
11
|
-
|
12
|
-
def set_attachment_section
|
13
|
-
# The default behavior is to put all attachments in the root section
|
14
|
-
# Override this method if you would like to change that
|
15
|
-
super
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
before_save :set_published_at
|
20
|
-
|
21
|
-
belongs_to :blog
|
22
|
-
belongs_to_category
|
23
|
-
belongs_to :author, :class_name => "User"
|
24
|
-
has_many :comments, :class_name => "BlogComment", :foreign_key => "post_id"
|
25
|
-
|
26
|
-
before_validation :set_slug
|
27
|
-
validates_presence_of :name, :slug, :blog_id, :author_id
|
28
|
-
|
29
|
-
scope :published_between, lambda { |start, finish|
|
30
|
-
{ :conditions => [
|
31
|
-
"blog_posts.published_at >= ? AND blog_posts.published_at < ?",
|
32
|
-
start, finish ] }
|
33
|
-
}
|
34
|
-
|
35
|
-
scope :not_tagged_with, lambda { |tag| {
|
36
|
-
:conditions => [
|
37
|
-
"blog_posts.id not in (
|
38
|
-
SELECT taggings.taggable_id FROM taggings
|
39
|
-
JOIN tags ON tags.id = taggings.tag_id
|
40
|
-
WHERE taggings.taggable_type = 'BlogPost'
|
41
|
-
AND (tags.name = ?)
|
42
|
-
)",
|
43
|
-
tag
|
44
|
-
]
|
45
|
-
} }
|
46
|
-
|
47
|
-
INCORRECT_PARAMETERS = "Incorrect parameters. This is probably because you are trying to view the " +
|
48
|
-
"portlet through the CMS interface, and so we have no way of knowing what " +
|
49
|
-
"post(s) to show"
|
50
|
-
|
51
|
-
delegate :editable_by?, :to => :blog
|
52
|
-
|
53
|
-
def set_published_at
|
54
|
-
if !published_at && publish_on_save
|
55
|
-
self.published_at = Time.now
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
# This is necessary because, oddly, the publish! method in the Publishing behaviour sends an update
|
60
|
-
# query directly to the database, bypassing callbacks, so published_at does not get set by our
|
61
|
-
# set_published_at callback.
|
62
|
-
def after_publish_with_set_published_at
|
63
|
-
if published_at.nil?
|
64
|
-
self.published_at = Time.now
|
65
|
-
self.save!
|
66
|
-
end
|
67
|
-
after_publish_without_set_published_at if respond_to? :after_publish_without_set_published_at
|
68
|
-
end
|
69
|
-
if instance_methods.map(&:to_s).include? 'after_publish'
|
70
|
-
alias_method_chain :after_publish, :set_published_at
|
71
|
-
else
|
72
|
-
alias_method :after_publish, :after_publish_with_set_published_at
|
73
|
-
end
|
74
|
-
|
75
|
-
def self.default_order
|
76
|
-
"created_at desc"
|
77
|
-
end
|
78
|
-
|
79
|
-
def self.columns_for_index
|
80
|
-
[ {:label => "Name", :method => :name, :order => "name" },
|
81
|
-
{:label => "Published At", :method => :published_label, :order => "published_at" } ]
|
82
|
-
end
|
83
|
-
|
84
|
-
def published_label
|
85
|
-
published_at ? published_at.to_s(:date) : nil
|
86
|
-
end
|
87
|
-
|
88
|
-
def set_slug
|
89
|
-
self.slug = name.to_slug
|
90
|
-
end
|
91
|
-
|
92
|
-
def path
|
93
|
-
send("#{blog.name_for_path}_post_path", route_params)
|
94
|
-
end
|
95
|
-
def route_name
|
96
|
-
"#{blog.name_for_path}_post"
|
97
|
-
end
|
98
|
-
def route_params
|
99
|
-
{:year => year, :month => month, :day => day, :slug => slug}
|
100
|
-
end
|
101
|
-
|
102
|
-
def year
|
103
|
-
published_at.strftime("%Y") unless published_at.blank?
|
104
|
-
end
|
105
|
-
|
106
|
-
def month
|
107
|
-
published_at.strftime("%m") unless published_at.blank?
|
108
|
-
end
|
109
|
-
|
110
|
-
def day
|
111
|
-
published_at.strftime("%d") unless published_at.blank?
|
112
|
-
end
|
113
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
|
-
<head>
|
4
|
-
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
5
|
-
<title><%= page_title %></title>
|
6
|
-
<%= yield :html_head %>
|
7
|
-
</head>
|
8
|
-
<body style="margin: 0; padding: 0; text-align: center;">
|
9
|
-
<%= cms_toolbar %>
|
10
|
-
<div id="wrapper" style="width: 700px; margin: 0 auto; text-align: left; padding: 30px">
|
11
|
-
Breadcrumbs: <%= render_breadcrumbs %>
|
12
|
-
Main Menu: <%= render_menu %>
|
13
|
-
<h1><%= page_title %></h1>
|
14
|
-
<%= container :main %>
|
15
|
-
</div>
|
16
|
-
</body>
|
17
|
-
</html>
|
data/doc/README_FOR_APP
DELETED
data/doc/migrate_to_20100427.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
# Ideally, we would create a new migration whenever we wanted to make changes to an existing
|
2
|
-
# migration that is already in circulation, instead of simply editing the existing migrations
|
3
|
-
# and publishing the new version, because doing rake db:migrate:redo VERSION=20090415000000,
|
4
|
-
# etc. on each updated migration is not only a pain but will probably result in more data being
|
5
|
-
# lost than is strictly necessary -- assuming the migrations work correctly at all.
|
6
|
-
#
|
7
|
-
# On the other hand, there's something pretty compelling about "fixing" the migration so that
|
8
|
-
# it doesn't have any useless steps that are just going to get reverted by the next migration.
|
9
|
-
#
|
10
|
-
# There is also the problem of model dependencies: you can't safely remove a model in the same
|
11
|
-
# commit that you use that model in a migration (f.e., Model.destroy_all). Even if you remove it
|
12
|
-
# in the following commit, it's only safe if people check out every intermediate version and run
|
13
|
-
# db:migrate at each version, instead of simply checking out the tip version and then running
|
14
|
-
# db:migrate. And people don't do that.
|
15
|
-
#
|
16
|
-
# Anyway, I guess we assume that there are only a few brave souls out there who are already
|
17
|
-
# using bcms_blog and hope for the best. Here is the "missing migration"; hopefully it will be
|
18
|
-
# helpful to you.
|
19
|
-
#
|
20
|
-
# Run this script instead of re-running the changed migrations with rake db:migrate:redo so that
|
21
|
-
# your blog data is not destroyed.
|
22
|
-
#
|
23
|
-
# Usage: ./script/runner 'require "/path/to/bcms_blog/doc/migrate_to_20100427.rb"'
|
24
|
-
|
25
|
-
require 'pp'
|
26
|
-
|
27
|
-
Page # trigger auto-loading
|
28
|
-
# At the time of this writing, these associations are missing :dependent => :destroy
|
29
|
-
class Page
|
30
|
-
has_many :page_routes, :dependent => :destroy
|
31
|
-
end
|
32
|
-
class PageRoute
|
33
|
-
has_many :requirements, :class_name => "PageRouteRequirement", :dependent => :destroy
|
34
|
-
has_many :conditions, :class_name => "PageRouteCondition", :dependent => :destroy
|
35
|
-
end
|
36
|
-
|
37
|
-
# Added these here because these classes will be removed by the next commit, so if anyone tried to run this script in future versions it would have a missing constant error unless we keep these class definitions around
|
38
|
-
class BlogPostsInCategoryPortlet < Portlet; end
|
39
|
-
class BlogPostsWithTagPortlet < Portlet; end
|
40
|
-
class BlogPostPortlet < Portlet; end
|
41
|
-
class BlogPostsInDayPortlet < Portlet; end
|
42
|
-
class BlogPostsInMonthPortlet < Portlet; end
|
43
|
-
class BlogPostsInYearPortlet < Portlet; end
|
44
|
-
|
45
|
-
class MigrateTo20100427 < ActiveRecord::Migration
|
46
|
-
def self.up
|
47
|
-
drop_table :blog_group_membership_versions
|
48
|
-
|
49
|
-
PageRouteOption.all.each {|a| a.destroy unless a.page_route }
|
50
|
-
|
51
|
-
puts "Destroying portlets, pages, page_routes left over from old version of bcms_blog..."
|
52
|
-
puts "(*Not* destroying any existing Blogs, pages on which Blogs are connected, or BlogPosts)"
|
53
|
-
portlets = [BlogPostPortlet, BlogPostsInCategoryPortlet, BlogPostsWithTagPortlet, BlogPostsInDayPortlet, BlogPostsInMonthPortlet, BlogPostsInYearPortlet]
|
54
|
-
#pp portlets.map(&:all).flatten.map(&:connected_pages).flatten.map(&:page_routes).flatten.each(&:destroy)
|
55
|
-
pp portlets.map(&:all).flatten.map(&:connected_pages).flatten.each(&:destroy)
|
56
|
-
pp portlets.map(&:all).flatten.each(&:destroy)
|
57
|
-
|
58
|
-
# Something like this might not work if they have moved their Blog page to a different section or to no section, so we better let users resolve this manually...
|
59
|
-
#Blog.all.map(&:connected_pages).flatten.each do |page|
|
60
|
-
# page.hidden = true
|
61
|
-
# page.save!
|
62
|
-
# page.section.hidden = false
|
63
|
-
# page.section.save!
|
64
|
-
#end
|
65
|
-
|
66
|
-
puts "Calling after_create on each Blog in the system..."
|
67
|
-
Blog.all.each do |blog|
|
68
|
-
puts "#{blog}..."
|
69
|
-
blog.send :after_create
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def self.down
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
MigrateTo20100427.up
|
data/doc/release_notes.txt
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
v1.2.0
|
2
|
-
- Upgrade to be compatible with BrowserCMS 3.3 (aka Rails 3)
|
3
|
-
|
4
|
-
v1.1.1
|
5
|
-
|
6
|
-
- Blog partials and templates no longer include any css style declarations
|
7
|
-
- Fixed browsing by tags, categories and dates
|
8
|
-
- Fixed bug on page route conditions and requirements when creating a blog
|
9
|
-
- Tests refactoring. Tests now depend on bcms_support gem
|
10
|
-
|
11
|
-
v1.1.0
|
12
|
-
|
13
|
-
This version introduces significant changes and improvements over version 1.0.0
|
14
|
-
and lays the groundwork for a more sophisticated blogging platform for BrowserCMS.
|
15
|
-
|
16
|
-
Notable Features:
|
17
|
-
=================
|
18
|
-
|
19
|
-
1. A Blog and supporting structure (sections, pages, page routes, etc.) and data are no longer
|
20
|
-
created as part of the modules's installation process. When running the module's migrations,
|
21
|
-
only the following items are created:
|
22
|
-
|
23
|
-
* blogs, blog_posts and blog_comment tables (and corresponding tables to hold versioning data)
|
24
|
-
* blog_group_memberships table
|
25
|
-
* Blog, BlogPost and BlogComment content types
|
26
|
-
* Blog Post category type
|
27
|
-
|
28
|
-
2. It is only until a Blog is created when a corresponding section, pages, page routes and portlets are created.
|
29
|
-
Each blog has its own section, pages and page routes, which allows for multiple blogs to be created.
|
30
|
-
|
31
|
-
3. It is now possible to add attachments to blog posts.
|
32
|
-
|
33
|
-
4. Comments are moderated by default using BrowserCMS' default behaviors. However, when creating a Blog,
|
34
|
-
users can specify whether comments should be published automatically.
|
35
|
-
|
36
|
-
5. The module now uses BrowserCMS' permissions framework to specify if a particular user is able to
|
37
|
-
create or edit Blogs and BlogPosts.
|
38
|
-
|
39
|
-
6. Portlets have been improved to match common standard blog publishing templates.
|
40
|
-
|
41
|
-
For a complete rundown and rationale behind the changes introduced, please refer to:
|
42
|
-
https://browsermedia.lighthouseapp.com/projects/28481/tickets/163-review-and-integrate-changes-to-the-blog-module
|
43
|
-
|
44
|
-
Contributors:
|
45
|
-
=============
|
46
|
-
Tyler Rick
|
47
|
-
Jon Leighton
|
48
|
-
Juan Alvarez
|
data/lib/bcms_blog/routes.rb
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
module Cms::Routes
|
2
|
-
def routes_for_bcms_blog
|
3
|
-
match '/blog/feeds', :to=>"feeds#index", :defaults=>{:format => "rss"}, :as=>'blog_feeds'
|
4
|
-
namespace(:cms) do
|
5
|
-
content_blocks :blogs
|
6
|
-
content_blocks :blog_posts
|
7
|
-
content_blocks :blog_comments
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|