refinerycms-blog 2.0.4 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +6 -1
  5. data/.travis.yml +10 -14
  6. data/Gemfile +30 -50
  7. data/Rakefile +2 -1
  8. data/app/assets/javascripts/refinery/blog/backend.js +18 -59
  9. data/app/assets/stylesheets/refinery/blog/backend.css.scss +10 -61
  10. data/app/assets/stylesheets/refinery/blog/frontend.css.scss +87 -76
  11. data/app/controllers/refinery/blog/admin/categories_controller.rb +7 -1
  12. data/app/controllers/refinery/blog/admin/comments_controller.rb +19 -21
  13. data/app/controllers/refinery/blog/admin/posts_controller.rb +43 -15
  14. data/app/controllers/refinery/blog/blog_controller.rb +31 -5
  15. data/app/controllers/refinery/blog/categories_controller.rb +10 -3
  16. data/app/controllers/refinery/blog/posts_controller.rb +40 -26
  17. data/app/helpers/refinery/blog/controller_helper.rb +1 -22
  18. data/app/helpers/refinery/blog/posts_helper.rb +9 -4
  19. data/app/models/refinery/blog/categorization.rb +11 -0
  20. data/app/models/refinery/blog/category.rb +15 -5
  21. data/app/models/refinery/blog/comment.rb +17 -28
  22. data/app/models/refinery/blog/post.rb +100 -30
  23. data/app/views/refinery/blog/admin/_submenu.html.erb +1 -6
  24. data/app/views/refinery/blog/admin/categories/_category.html.erb +23 -10
  25. data/app/views/refinery/blog/admin/categories/_form.html.erb +10 -11
  26. data/app/views/refinery/blog/admin/categories/_sortable_list.html.erb +2 -4
  27. data/app/views/refinery/blog/admin/categories/edit.html.erb +1 -1
  28. data/app/views/refinery/blog/admin/categories/index.html.erb +9 -15
  29. data/app/views/refinery/blog/admin/categories/new.html.erb +1 -1
  30. data/app/views/refinery/blog/admin/comments/_comment.html.erb +4 -12
  31. data/app/views/refinery/blog/admin/comments/_sortable_list.html.erb +2 -4
  32. data/app/views/refinery/blog/admin/comments/index.html.erb +14 -23
  33. data/app/views/refinery/blog/admin/comments/show.html.erb +6 -4
  34. data/app/views/refinery/blog/admin/posts/_form.html.erb +31 -28
  35. data/app/views/refinery/blog/admin/posts/_form_part.html.erb +1 -1
  36. data/app/views/refinery/blog/admin/posts/_post.html.erb +28 -11
  37. data/app/views/refinery/blog/admin/posts/_sortable_list.html.erb +2 -4
  38. data/app/views/refinery/blog/admin/posts/_teaser_part.html.erb +1 -1
  39. data/app/views/refinery/blog/admin/posts/edit.html.erb +1 -1
  40. data/app/views/refinery/blog/admin/posts/index.html.erb +9 -15
  41. data/app/views/refinery/blog/admin/posts/new.html.erb +1 -1
  42. data/app/views/refinery/blog/admin/posts/uncategorized.html.erb +2 -2
  43. data/app/views/refinery/blog/admin/settings/notification_recipients.html.erb +5 -7
  44. data/app/views/refinery/blog/categories/show.html.erb +4 -4
  45. data/app/views/refinery/blog/comment_mailer/notification.html.erb +5 -0
  46. data/app/views/refinery/blog/posts/_comment.html.erb +4 -4
  47. data/app/views/refinery/blog/posts/_comments.html.erb +28 -31
  48. data/app/views/refinery/blog/posts/_nav.html.erb +6 -6
  49. data/app/views/refinery/blog/posts/_post.html.erb +9 -9
  50. data/app/views/refinery/blog/posts/archive.html.erb +7 -6
  51. data/app/views/refinery/blog/posts/index.html.erb +6 -6
  52. data/app/views/refinery/blog/posts/index.rss.builder +8 -2
  53. data/app/views/refinery/blog/posts/show.html.erb +5 -7
  54. data/app/views/refinery/blog/posts/tagged.html.erb +5 -5
  55. data/app/views/refinery/blog/shared/_body_content_right.html.erb +7 -7
  56. data/app/views/refinery/blog/shared/_categories.html.erb +4 -4
  57. data/app/views/refinery/blog/shared/_post.html.erb +18 -18
  58. data/app/views/refinery/blog/shared/_posts.html.erb +1 -1
  59. data/app/views/refinery/blog/shared/_rss_feed.html.erb +2 -0
  60. data/app/views/refinery/blog/shared/_tags.html.erb +1 -1
  61. data/app/views/refinery/shared/admin/_autocomplete.html.erb +44 -3
  62. data/bin/rails +11 -0
  63. data/bin/refinerycms +62 -0
  64. data/certs/parndt.pem +25 -0
  65. data/changelog.md +4 -1
  66. data/config/initializers/url_validator.rb +15 -11
  67. data/config/locales/bg.yml +8 -10
  68. data/config/locales/cs.yml +7 -9
  69. data/config/locales/de.yml +27 -8
  70. data/config/locales/en.yml +18 -12
  71. data/config/locales/es.yml +2 -4
  72. data/config/locales/fr.yml +34 -16
  73. data/config/locales/it.yml +8 -10
  74. data/config/locales/ja.yml +22 -11
  75. data/config/locales/nb.yml +154 -16
  76. data/config/locales/nl.yml +42 -7
  77. data/config/locales/pl.yml +6 -8
  78. data/config/locales/pt-BR.yml +39 -8
  79. data/config/locales/ru.yml +49 -5
  80. data/config/locales/sk.yml +59 -20
  81. data/config/locales/sv.yml +165 -0
  82. data/config/locales/uk.yml +172 -0
  83. data/config/locales/zh-CN.yml +34 -5
  84. data/config/locales/zh-TW.yml +160 -0
  85. data/config/routes.rb +11 -8
  86. data/db/migrate/20110803223522_create_blog_structure.rb +16 -15
  87. data/db/migrate/20110803223523_add_user_id_to_blog_posts.rb +3 -3
  88. data/db/migrate/20110803223524_acts_as_taggable_on_migration.rb +1 -1
  89. data/db/migrate/20110803223526_add_cached_slugs.rb +3 -3
  90. data/db/migrate/20110803223527_add_custom_url_field_to_blog_posts.rb +2 -2
  91. data/db/migrate/20110803223528_add_custom_teaser_field_to_blog_posts.rb +2 -2
  92. data/db/migrate/20110803223529_add_primary_key_to_categorizations.rb +5 -5
  93. data/db/migrate/20120103055909_add_source_url_to_blog_posts.rb +2 -2
  94. data/db/migrate/20120223022021_add_access_count_to_posts.rb +4 -4
  95. data/db/migrate/20120227022021_add_slug_to_posts_and_categories.rb +2 -2
  96. data/db/migrate/20120530102901_create_blog_translations.rb +17 -0
  97. data/db/migrate/20120531113632_delete_cached_slugs.rb +6 -0
  98. data/db/migrate/20120601151114_create_category_translations.rb +14 -0
  99. data/db/migrate/20140622132537_add_missing_unique_indices.acts_as_taggable_on_engine.rb +20 -0
  100. data/db/migrate/20140622132538_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +15 -0
  101. data/db/migrate/20160602042848_add_username_to_blog_posts.rb +5 -0
  102. data/db/migrate/20161223024527_create_multi_user_model.rb +13 -0
  103. data/db/migrate/20180420132008_remove_translated_columns_to_refinery_blog_categories.rb +5 -0
  104. data/db/seeds.rb +5 -5
  105. data/lib/generators/refinery/blog/templates/config/initializers/refinery/blog.rb.erb +6 -0
  106. data/lib/refinery/blog.rb +4 -1
  107. data/lib/refinery/blog/configuration.rb +25 -1
  108. data/lib/refinery/blog/engine.rb +9 -3
  109. data/readme.md +31 -5
  110. data/refinerycms-blog.gemspec +19 -15
  111. data/script/rails +1 -3
  112. data/spec/controllers/refinery/blog/admin/comments_controller_spec.rb +84 -0
  113. data/spec/controllers/refinery/blog/admin/posts_controller_spec.rb +35 -0
  114. data/spec/controllers/refinery/blog/posts_controller_spec.rb +24 -0
  115. data/spec/factories/blog_categories.rb +1 -1
  116. data/spec/factories/blog_comments.rb +1 -1
  117. data/spec/factories/blog_posts.rb +7 -3
  118. data/spec/factories/blog_test_users.rb +6 -0
  119. data/spec/features/refinery/blog/admin/categories_spec.rb +121 -0
  120. data/spec/{requests → features}/refinery/blog/admin/comments_spec.rb +30 -30
  121. data/spec/features/refinery/blog/admin/menu_spec.rb +19 -0
  122. data/spec/features/refinery/blog/admin/posts_spec.rb +365 -0
  123. data/spec/features/refinery/blog/categories_spec.rb +29 -0
  124. data/spec/features/refinery/blog/posts_spec.rb +171 -0
  125. data/spec/helpers/refinery/blog/posts_helper_spec.rb +23 -11
  126. data/spec/lib/refinery/blog/engine_spec.rb +1 -11
  127. data/spec/models/refinery/blog/category_spec.rb +18 -11
  128. data/spec/models/refinery/blog/comment_spec.rb +4 -4
  129. data/spec/models/refinery/blog/post_spec.rb +97 -60
  130. data/spec/spec_helper.rb +20 -46
  131. data/spec/support/refinery_blog_test_user.rb +2 -0
  132. metadata +168 -95
  133. metadata.gz.sig +0 -0
  134. data/Guardfile +0 -20
  135. data/app/assets/images/refinery/blog/icons/cog.png +0 -0
  136. data/app/assets/images/refinery/blog/icons/comment.png +0 -0
  137. data/app/assets/images/refinery/blog/icons/comment_cross.png +0 -0
  138. data/app/assets/images/refinery/blog/icons/comment_tick.png +0 -0
  139. data/app/assets/images/refinery/blog/icons/comments.png +0 -0
  140. data/app/assets/images/refinery/blog/icons/down.gif +0 -0
  141. data/app/assets/images/refinery/blog/icons/folder.png +0 -0
  142. data/app/assets/images/refinery/blog/icons/folder_add.png +0 -0
  143. data/app/assets/images/refinery/blog/icons/folder_edit.png +0 -0
  144. data/app/assets/images/refinery/blog/icons/page.png +0 -0
  145. data/app/assets/images/refinery/blog/icons/page_add.png +0 -0
  146. data/app/assets/images/refinery/blog/icons/page_copy.png +0 -0
  147. data/app/assets/images/refinery/blog/icons/up.gif +0 -0
  148. data/app/assets/images/refinerycms-blog/.gitkeep +0 -0
  149. data/app/assets/javascripts/refinerycms-blog/.gitkeep +0 -0
  150. data/app/assets/stylesheets/refinerycms-blog/.gitkeep +0 -0
  151. data/app/models/refinery/blog/comment_mailer.rb +0 -1
  152. data/app/models/refinery/categorization.rb +0 -10
  153. data/app/sweepers/refinery/blog_sweeper.rb +0 -26
  154. data/lib/refinery/blog/version.rb +0 -17
  155. data/spec/requests/refinery/blog/admin/categories_spec.rb +0 -20
  156. data/spec/requests/refinery/blog/admin/menu_spec.rb +0 -13
  157. data/spec/requests/refinery/blog/admin/posts_spec.rb +0 -175
  158. data/spec/requests/refinery/blog/categories_spec.rb +0 -24
  159. data/spec/requests/refinery/blog/posts_spec.rb +0 -160
  160. data/todo.md +0 -5
@@ -4,8 +4,14 @@ module Refinery
4
4
  class CategoriesController < ::Refinery::AdminController
5
5
 
6
6
  crudify :'refinery/blog/category',
7
- :order => 'title ASC'
7
+ include: [:translations],
8
+ order: 'refinery_blog_category_translations.title ASC'
8
9
 
10
+ private
11
+
12
+ def category_params
13
+ params.require(:category).permit(:title)
14
+ end
9
15
  end
10
16
  end
11
17
  end
@@ -3,8 +3,6 @@ module Refinery
3
3
  module Admin
4
4
  class CommentsController < ::Refinery::AdminController
5
5
 
6
- cache_sweeper Refinery::BlogSweeper
7
-
8
6
  crudify :'refinery/blog/comment',
9
7
  :title_attribute => :name,
10
8
  :order => 'published_at DESC'
@@ -12,35 +10,35 @@ module Refinery
12
10
  def index
13
11
  @comments = Refinery::Blog::Comment.unmoderated.page(params[:page])
14
12
 
15
- render :action => 'index'
13
+ render :index
16
14
  end
17
15
 
18
16
  def approved
19
- unless params[:id].present?
20
- @comments = Refinery::Blog::Comment.approved.page(params[:page])
17
+ @comments = Refinery::Blog::Comment.approved.page(params[:page])
18
+
19
+ render :index
20
+ end
21
21
 
22
- render :action => 'index'
23
- else
24
- @comment = Refinery::Blog::Comment.find(params[:id])
25
- @comment.approve!
26
- flash[:notice] = t('approved', :scope => 'refinery.blog.admin.comments', :author => @comment.name)
22
+ def approve
23
+ @comment = Refinery::Blog::Comment.find(params[:id])
24
+ @comment.approve!
25
+ flash[:notice] = t('approved', :scope => 'refinery.blog.admin.comments', :author => @comment.name)
27
26
 
28
- redirect_to refinery.url_for(:action => params[:return_to] || 'index', :id => nil)
29
- end
27
+ redirect_to refinery.blog_admin_comments_path
30
28
  end
31
29
 
32
30
  def rejected
33
- unless params[:id].present?
34
- @comments = Refinery::Blog::Comment.rejected.page(params[:page])
31
+ @comments = Refinery::Blog::Comment.rejected.page(params[:page])
32
+
33
+ render :index
34
+ end
35
35
 
36
- render :action => 'index'
37
- else
38
- @comment = Refinery::Blog::Comment.find(params[:id])
39
- @comment.reject!
40
- flash[:notice] = t('rejected', :scope => 'refinery.blog.admin.comments', :author => @comment.name)
36
+ def reject
37
+ @comment = Refinery::Blog::Comment.find(params[:id])
38
+ @comment.reject!
39
+ flash[:notice] = t('rejected', :scope => 'refinery.blog.admin.comments', :author => @comment.name)
41
40
 
42
- redirect_to refinery.url_for(:action => params[:return_to] || 'index', :id => nil)
43
- end
41
+ redirect_to refinery.blog_admin_comments_path
44
42
  end
45
43
 
46
44
  end
@@ -3,15 +3,17 @@ module Refinery
3
3
  module Admin
4
4
  class PostsController < ::Refinery::AdminController
5
5
 
6
- cache_sweeper Refinery::BlogSweeper
7
-
8
6
  crudify :'refinery/blog/post',
9
- :order => 'published_at DESC'
7
+ order: 'published_at DESC',
8
+ include: [:translations, :author]
9
+
10
+ before_action :find_all_categories,
11
+ only: [:new, :edit, :create, :update]
10
12
 
11
- before_filter :find_all_categories,
12
- :only => [:new, :edit, :create, :update]
13
+ before_action :find_all_authors,
14
+ only: [:new, :edit, :create, :update]
13
15
 
14
- before_filter :check_category_ids, :only => :update
16
+ before_action :check_category_ids, only: :update
15
17
 
16
18
  def uncategorized
17
19
  @posts = Refinery::Blog::Post.uncategorized.page(params[:page])
@@ -32,19 +34,15 @@ module Refinery
32
34
  render :json => @tags.flatten
33
35
  end
34
36
 
35
- def new
36
- @post = ::Refinery::Blog::Post.new(:author => current_refinery_user)
37
- end
38
-
39
37
  def create
40
38
  # if the position field exists, set this object as last object, given the conditions of this class.
41
39
  if Refinery::Blog::Post.column_names.include?("position")
42
- params[:post].merge!({
40
+ post_params.merge!({
43
41
  :position => ((Refinery::Blog::Post.maximum(:position, :conditions => "")||-1) + 1)
44
42
  })
45
43
  end
46
44
 
47
- if (@post = Refinery::Blog::Post.create(params[:post])).valid?
45
+ if (@post = Refinery::Blog::Post.create(post_params)).valid?
48
46
  (request.xhr? ? flash.now : flash).notice = t(
49
47
  'refinery.crudify.created',
50
48
  :what => "'#{@post.title}'"
@@ -57,7 +55,7 @@ module Refinery
57
55
  unless request.xhr?
58
56
  redirect_to :back
59
57
  else
60
- render :partial => "/shared/message"
58
+ render "/shared/message"
61
59
  end
62
60
  end
63
61
  else
@@ -65,7 +63,7 @@ module Refinery
65
63
  end
66
64
  else
67
65
  unless request.xhr?
68
- render :action => 'new'
66
+ render :new
69
67
  else
70
68
  render :partial => "/refinery/admin/error_messages",
71
69
  :locals => {
@@ -76,9 +74,39 @@ module Refinery
76
74
  end
77
75
  end
78
76
 
77
+ def delete_translation
78
+ find_post
79
+ @post.translations.find_by_locale(params[:locale_to_delete]).destroy
80
+ flash[:notice] = ::I18n.t('delete_translation_success', :scope => 'refinery.blog.admin.posts.post')
81
+ redirect_to refinery.blog_admin_posts_path
82
+ end
83
+
84
+ private
85
+
86
+ def post_params
87
+ params.require(:post).permit(permitted_post_params)
88
+ end
89
+
90
+ def permitted_post_params
91
+ [
92
+ :title, :body, :custom_teaser, :tag_list,
93
+ :draft, :published_at, :custom_url, :user_id, :username, :browser_title,
94
+ :meta_description, :source_url, :source_url_title, :category_ids => []
95
+ ]
96
+ end
97
+
79
98
  protected
99
+
100
+ def find_post
101
+ @post = Refinery::Blog::Post.friendly.joins(:translations).find(params[:id])
102
+ end
103
+
80
104
  def find_all_categories
81
- @categories = Refinery::Blog::Category.find(:all)
105
+ @categories = Refinery::Blog::Category.all
106
+ end
107
+
108
+ def find_all_authors
109
+ @authors = Refinery::Blog.user_class.all if (!Refinery::Blog.user_class.nil? && Refinery::Blog.user_class.column_names.include?('username'))
82
110
  end
83
111
 
84
112
  def check_category_ids
@@ -2,16 +2,42 @@ module Refinery
2
2
  module Blog
3
3
  class BlogController < ::ApplicationController
4
4
 
5
- include ControllerHelper
6
-
7
5
  helper :'refinery/blog/posts'
8
- before_filter :find_page, :find_all_blog_categories
6
+ before_action :find_page, :find_all_blog_categories
9
7
 
10
8
  protected
11
9
 
12
- def find_page
13
- @page = Refinery::Page.find_by_link_url("/blog")
10
+ def find_all_blog_categories
11
+ @categories = Refinery::Blog::Category.translated
12
+ end
13
+
14
+ def find_blog_post
15
+ unless (@post = post_finder_scope.with_globalize.friendly.find(params[:id])).try(:live?)
16
+ if current_refinery_user && current_refinery_user.has_plugin?("refinerycms_blog")
17
+ @post = post_finder_scope.friendly.find(params[:id])
18
+ else
19
+ error_404
20
+ end
14
21
  end
22
+ end
23
+
24
+ def find_all_blog_posts
25
+ @posts = post_finder_scope.live.includes(
26
+ :comments, :categories, :translations
27
+ ).with_globalize.newest_first.page(params[:page])
28
+ end
29
+
30
+ def find_page
31
+ @page = Refinery::Page.find_by(link_url: Refinery::Blog.page_url)
32
+ end
33
+
34
+ def find_tags
35
+ @tags = post_finder_scope.live.tag_counts_on(:tags)
36
+ end
37
+
38
+ def post_finder_scope
39
+ Refinery::Blog::Post
40
+ end
15
41
  end
16
42
  end
17
43
  end
@@ -2,9 +2,16 @@ module Refinery
2
2
  module Blog
3
3
  class CategoriesController < BlogController
4
4
 
5
- def show
6
- @category = Refinery::Blog::Category.find(params[:id])
7
- @posts = @category.posts.live.includes(:comments, :categories).page(params[:page])
5
+ before_action :find_category, :find_all_blog_posts, only: :show
6
+
7
+ private
8
+
9
+ def find_category
10
+ @category = Refinery::Blog::Category.friendly.find(params[:id])
11
+ end
12
+
13
+ def post_finder_scope
14
+ @category.posts
8
15
  end
9
16
 
10
17
  end
@@ -1,71 +1,78 @@
1
+ require 'responders'
2
+
1
3
  module Refinery
2
4
  module Blog
3
5
  class PostsController < BlogController
4
6
 
5
- caches_page :index, :unless => proc {|c| c.refinery_user_signed_in? || c.flash.any? || params[:page].present? }
6
-
7
- before_filter :find_all_blog_posts, :except => [:archive]
8
- before_filter :find_blog_post, :only => [:show, :comment, :update_nav]
9
- before_filter :find_tags
7
+ before_action :find_all_blog_posts, except: [:archive]
8
+ before_action :find_blog_post, only: [:show, :comment, :update_nav]
9
+ before_action :find_tags
10
10
 
11
11
  respond_to :html, :js, :rss
12
12
 
13
13
  def index
14
- # Rss feeders are greedy. Let's give them every blog post instead of paginating.
15
- (@posts = Post.live.includes(:comments, :categories).all) if request.format.rss?
14
+ if request.format.rss?
15
+ @posts = if params["max_results"].present?
16
+ # limit rss feed for services (like feedburner) who have max size
17
+ Post.recent(params["max_results"])
18
+ else
19
+ Post.newest_first.live.includes(:comments, :categories)
20
+ end
21
+ end
16
22
  respond_with (@posts) do |format|
17
23
  format.html
18
- format.rss
24
+ format.rss { render layout: false }
19
25
  end
20
26
  end
21
27
 
22
28
  def show
23
29
  @comment = Comment.new
24
30
 
25
- @canonical = url_for(:locale => ::Refinery::I18n.default_frontend_locale) if canonical?
26
-
27
- @post.increment!(:access_count, 1)
31
+ @canonical = refinery.url_for(locale: Refinery::I18n.current_frontend_locale) if canonical?
32
+
33
+ Post.increment_counter(:access_count, @post.id)
28
34
 
29
35
  respond_with (@post) do |format|
30
36
  format.html { present(@post) }
31
- format.js { render :partial => 'post', :layout => false }
37
+ format.js { render partial: 'post', layout: false }
32
38
  end
33
39
  end
34
40
 
35
41
  def comment
36
- if (@comment = @post.comments.create(params[:comment])).valid?
42
+ @comment = @post.comments.create(comment_params)
43
+ if @comment.valid?
37
44
  if Comment::Moderation.enabled? or @comment.ham?
38
45
  begin
39
- CommentMailer.notification(@comment, request).deliver
46
+ CommentMailer.notification(@comment, request).deliver_now
40
47
  rescue
41
48
  logger.warn "There was an error delivering a blog comment notification.\n#{$!}\n"
42
49
  end
43
50
  end
44
51
 
45
52
  if Comment::Moderation.enabled?
46
- flash[:notice] = t('thank_you_moderated', :scope => 'refinery.blog.posts.comments')
53
+ flash[:notice] = t('thank_you_moderated', scope: 'refinery.blog.posts.comments')
47
54
  redirect_to refinery.blog_post_url(params[:id])
48
55
  else
49
- flash[:notice] = t('thank_you', :scope => 'refinery.blog.posts.comments')
56
+ flash[:notice] = t('thank_you', scope: 'refinery.blog.posts.comments')
50
57
  redirect_to refinery.blog_post_url(params[:id],
51
- :anchor => "comment-#{@comment.to_param}")
58
+ anchor: "comment-#{@comment.to_param}")
52
59
  end
53
60
  else
54
- render :action => 'show'
61
+ render :show
55
62
  end
56
63
  end
57
64
 
58
65
  def archive
59
66
  if params[:month].present?
60
67
  date = "#{params[:month]}/#{params[:year]}"
61
- @archive_date = Time.parse(date)
62
- @date_title = @archive_date.strftime('%B %Y')
63
- @posts = Post.live.by_archive(@archive_date).page(params[:page])
68
+ archive_date = Time.parse(date)
69
+ @date_title = ::I18n.l(archive_date, format: '%B %Y')
70
+ @posts = Post.live.by_month(archive_date).page(params[:page])
64
71
  else
65
72
  date = "01/#{params[:year]}"
66
- @archive_date = Time.parse(date)
67
- @date_title = @archive_date.strftime('%Y')
68
- @posts = Post.live.by_year(@archive_date).page(params[:page])
73
+ archive_date = Time.parse(date)
74
+ @date_title = ::I18n.l(archive_date, format: '%Y')
75
+ @posts = Post.live.by_year(archive_date).page(params[:page])
69
76
  end
70
77
  respond_with (@posts)
71
78
  end
@@ -73,11 +80,18 @@ module Refinery
73
80
  def tagged
74
81
  @tag = ActsAsTaggableOn::Tag.find(params[:tag_id])
75
82
  @tag_name = @tag.name
76
- @posts = Post.tagged_with(@tag_name).page(params[:page])
83
+ @posts = Post.live.newest_first.distinct.tagged_with(@tag_name).page(params[:page])
84
+ end
85
+
86
+ private
87
+
88
+ def comment_params
89
+ params.require(:comment).permit(:name, :email, :message)
77
90
  end
78
91
 
92
+ protected
79
93
  def canonical?
80
- ::Refinery.i18n_enabled? && ::Refinery::I18n.default_frontend_locale != ::Refinery::I18n.current_frontend_locale
94
+ Refinery::I18n.default_frontend_locale != Refinery::I18n.current_frontend_locale
81
95
  end
82
96
  end
83
97
  end
@@ -1,29 +1,8 @@
1
1
  module Refinery
2
2
  module Blog
3
3
  module ControllerHelper
4
-
5
- protected
6
-
7
- def find_blog_post
8
- unless (@post = Refinery::Blog::Post.find(params[:id])).try(:live?)
9
- if refinery_user? and current_refinery_user.authorized_plugins.include?("refinerycms_blog")
10
- @post = Refinery::Blog::Post.find(params[:id])
11
- else
12
- error_404
13
- end
14
- end
15
- end
16
-
17
- def find_all_blog_posts
18
- @posts = Refinery::Blog::Post.live.includes(:comments, :categories).page(params[:page])
19
- end
20
4
 
21
- def find_tags
22
- @tags = Refinery::Blog::Post.tag_counts_on(:tags)
23
- end
24
- def find_all_blog_categories
25
- @categories = Refinery::Blog::Category.all
26
- end
5
+
27
6
  end
28
7
  end
29
8
  end
@@ -11,11 +11,11 @@ module Refinery
11
11
 
12
12
  def blog_post_teaser(post)
13
13
  if post.respond_to?(:custom_teaser) && post.custom_teaser.present?
14
- post.custom_teaser.html_safe
14
+ post.custom_teaser.html_safe
15
15
  else
16
- truncate(post.body, {
17
- :length => Refinery::Blog.post_teaser_length,
18
- :preserve_html_tags => true
16
+ truncate(post.body, {
17
+ :length => Refinery::Blog.post_teaser_length,
18
+ :preserve_html_tags => true
19
19
  }).html_safe
20
20
  end
21
21
  end
@@ -28,6 +28,11 @@ module Refinery
28
28
  Refinery::Blog::Post.published_dates_older_than(cutoff)
29
29
  end
30
30
 
31
+ def avatar_url(email, options = {:size => 60})
32
+ require 'digest/md5'
33
+ "http://gravatar.com/avatar/#{Digest::MD5.hexdigest(email.to_s.strip.downcase)}?s=#{options[:size]}.jpg"
34
+ end
35
+
31
36
  class ArchiveWidget
32
37
  delegate :t, :link_to, :refinery, :render, :to => :view_context
33
38
  attr_reader :view_context
@@ -0,0 +1,11 @@
1
+ module Refinery
2
+ module Blog
3
+ class Categorization < ActiveRecord::Base
4
+
5
+ self.table_name = 'refinery_blog_categories_blog_posts'
6
+ belongs_to :blog_post, :class_name => 'Refinery::Blog::Post', :foreign_key => :blog_post_id
7
+ belongs_to :blog_category, :class_name => 'Refinery::Blog::Category', :foreign_key => :blog_category_id
8
+
9
+ end
10
+ end
11
+ end