refinerycms-whatson 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. data/.gitignore +48 -0
  2. data/.tork.rb +2 -0
  3. data/.travis.yml +2 -0
  4. data/Gemfile +7 -0
  5. data/Rakefile +3 -0
  6. data/app/controllers/admin/whatson/categories_controller.rb +11 -0
  7. data/app/controllers/admin/whatson/comments_controller.rb +40 -0
  8. data/app/controllers/admin/whatson/posts_controller.rb +97 -0
  9. data/app/controllers/admin/whatson/settings_controller.rb +53 -0
  10. data/app/controllers/whatson/categories_controller.rb +13 -0
  11. data/app/controllers/whatson/posts_controller.rb +109 -0
  12. data/app/controllers/whatson_controller.rb +16 -0
  13. data/app/helpers/whatson_posts_helper.rb +56 -0
  14. data/app/mailers/whatson/comment_mailer.rb +13 -0
  15. data/app/models/categorization.rb +7 -0
  16. data/app/models/whatson/comment_mailer.rb +1 -0
  17. data/app/models/whatson_category.rb +19 -0
  18. data/app/models/whatson_comment.rb +137 -0
  19. data/app/models/whatson_post.rb +114 -0
  20. data/app/views/admin/whatson/_submenu.html.erb +96 -0
  21. data/app/views/admin/whatson/categories/_category.html.erb +16 -0
  22. data/app/views/admin/whatson/categories/_form.html.erb +19 -0
  23. data/app/views/admin/whatson/categories/_sortable_list.html.erb +7 -0
  24. data/app/views/admin/whatson/categories/edit.html.erb +1 -0
  25. data/app/views/admin/whatson/categories/index.html.erb +26 -0
  26. data/app/views/admin/whatson/categories/new.html.erb +1 -0
  27. data/app/views/admin/whatson/comments/_comment.html.erb +20 -0
  28. data/app/views/admin/whatson/comments/_sortable_list.html.erb +7 -0
  29. data/app/views/admin/whatson/comments/index.html.erb +35 -0
  30. data/app/views/admin/whatson/comments/show.html.erb +63 -0
  31. data/app/views/admin/whatson/posts/_form.css.erb +20 -0
  32. data/app/views/admin/whatson/posts/_form.html.erb +110 -0
  33. data/app/views/admin/whatson/posts/_form.js.erb +23 -0
  34. data/app/views/admin/whatson/posts/_form_part.html.erb +3 -0
  35. data/app/views/admin/whatson/posts/_post.html.erb +24 -0
  36. data/app/views/admin/whatson/posts/_sortable_list.html.erb +7 -0
  37. data/app/views/admin/whatson/posts/_teaser_part.html.erb +11 -0
  38. data/app/views/admin/whatson/posts/edit.html.erb +1 -0
  39. data/app/views/admin/whatson/posts/index.html.erb +28 -0
  40. data/app/views/admin/whatson/posts/new.html.erb +1 -0
  41. data/app/views/admin/whatson/posts/uncategorized.html.erb +26 -0
  42. data/app/views/admin/whatson/settings/notification_recipients.html.erb +24 -0
  43. data/app/views/shared/admin/_autocomplete.html.erb +55 -0
  44. data/app/views/whatson/categories/show.html.erb +21 -0
  45. data/app/views/whatson/comment_mailer/notification.html.erb +17 -0
  46. data/app/views/whatson/posts/_comment.html.erb +10 -0
  47. data/app/views/whatson/posts/_nav.html.erb +11 -0
  48. data/app/views/whatson/posts/archive.html.erb +20 -0
  49. data/app/views/whatson/posts/index.html.erb +24 -0
  50. data/app/views/whatson/posts/index.rss.builder +17 -0
  51. data/app/views/whatson/posts/show.html.erb +98 -0
  52. data/app/views/whatson/posts/tagged.html.erb +22 -0
  53. data/app/views/whatson/shared/_archive_list.html.erb +9 -0
  54. data/app/views/whatson/shared/_categories.html.erb +10 -0
  55. data/app/views/whatson/shared/_post.html.erb +46 -0
  56. data/app/views/whatson/shared/_related_posts.html.erb +10 -0
  57. data/app/views/whatson/shared/_rss_feed.html.erb +2 -0
  58. data/app/views/whatson/shared/_tags.html.erb +8 -0
  59. data/config/locales/bg.yml +158 -0
  60. data/config/locales/cs.yml +128 -0
  61. data/config/locales/de.yml +130 -0
  62. data/config/locales/en.yml +159 -0
  63. data/config/locales/es.yml +159 -0
  64. data/config/locales/fr.yml +154 -0
  65. data/config/locales/it.yml +156 -0
  66. data/config/locales/ja.yml +159 -0
  67. data/config/locales/nb.yml +30 -0
  68. data/config/locales/nl.yml +134 -0
  69. data/config/locales/pl.yml +134 -0
  70. data/config/locales/pt-BR.yml +143 -0
  71. data/config/locales/ru.yml +135 -0
  72. data/config/locales/sk.yml +128 -0
  73. data/config/locales/zh-CN.yml +128 -0
  74. data/config/routes.rb +47 -0
  75. data/db/migrate/1_create_whatson_structure.rb +54 -0
  76. data/db/migrate/2_add_user_id_to_whatson_posts.rb +11 -0
  77. data/db/migrate/3_acts_as_taggable_on_migration.rb +28 -0
  78. data/db/migrate/4_create_seo_meta_for_whatson.rb +25 -0
  79. data/db/migrate/5_add_cached_slugs.rb +11 -0
  80. data/db/migrate/6_add_custom_url_field_to_whatson_posts.rb +9 -0
  81. data/db/migrate/7_add_custom_teaser_field_to_whatson_posts.rb +10 -0
  82. data/db/migrate/8_add_primary_key_to_categorizations.rb +12 -0
  83. data/db/seeds/refinerycms_whatson.rb +20 -0
  84. data/features/authors.feature +15 -0
  85. data/features/category.feature +23 -0
  86. data/features/support/factories/whatson_categories.rb +5 -0
  87. data/features/support/factories/whatson_comments.rb +8 -0
  88. data/features/support/factories/whatson_posts.rb +9 -0
  89. data/features/support/paths.rb +24 -0
  90. data/features/support/step_definitions/authors_steps.rb +7 -0
  91. data/features/support/step_definitions/category_steps.rb +11 -0
  92. data/features/support/step_definitions/tags_steps.rb +13 -0
  93. data/features/tags.feature +26 -0
  94. data/lib/gemspec.rb +37 -0
  95. data/lib/generators/refinerycms_whatson_generator.rb +8 -0
  96. data/lib/refinery/whatson/tabs.rb +28 -0
  97. data/lib/refinery/whatson/version.rb +17 -0
  98. data/lib/refinerycms-whatson.rb +41 -0
  99. data/public/images/refinerycms-whatson/icons/cog.png +0 -0
  100. data/public/images/refinerycms-whatson/icons/comment.png +0 -0
  101. data/public/images/refinerycms-whatson/icons/comment_cross.png +0 -0
  102. data/public/images/refinerycms-whatson/icons/comment_tick.png +0 -0
  103. data/public/images/refinerycms-whatson/icons/comments.png +0 -0
  104. data/public/images/refinerycms-whatson/icons/down.gif +0 -0
  105. data/public/images/refinerycms-whatson/icons/folder.png +0 -0
  106. data/public/images/refinerycms-whatson/icons/folder_add.png +0 -0
  107. data/public/images/refinerycms-whatson/icons/folder_edit.png +0 -0
  108. data/public/images/refinerycms-whatson/icons/page.png +0 -0
  109. data/public/images/refinerycms-whatson/icons/page_add.png +0 -0
  110. data/public/images/refinerycms-whatson/icons/page_copy.png +0 -0
  111. data/public/images/refinerycms-whatson/icons/up.gif +0 -0
  112. data/public/images/refinerycms-whatson/rss-feed.png +0 -0
  113. data/public/javascripts/refinery/refinerycms-whatson.js +50 -0
  114. data/public/javascripts/refinerycms-whatson.js +25 -0
  115. data/public/stylesheets/refinery/refinerycms-whatson.css +57 -0
  116. data/public/stylesheets/refinerycms-whatson.css +93 -0
  117. data/public/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  118. data/public/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  119. data/public/stylesheets/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  120. data/public/stylesheets/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  121. data/public/stylesheets/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  122. data/public/stylesheets/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  123. data/public/stylesheets/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  124. data/public/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  125. data/public/stylesheets/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  126. data/public/stylesheets/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  127. data/public/stylesheets/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  128. data/public/stylesheets/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  129. data/public/stylesheets/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  130. data/public/stylesheets/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  131. data/public/stylesheets/ui-lightness/jquery-ui-1.8.13.custom.css +330 -0
  132. data/readme.md +41 -0
  133. data/refinerycms-whatson.gemspec +18 -0
  134. data/spec/models/whatson_category_spec.rb +41 -0
  135. data/spec/models/whatson_comment_spec.rb +21 -0
  136. data/spec/models/whatson_post_spec.rb +217 -0
  137. metadata +235 -0
data/.gitignore ADDED
@@ -0,0 +1,48 @@
1
+ .bundle
2
+ *.gem
3
+ *.DS_Store
4
+
5
+ # Documentation
6
+ doc/api
7
+ doc/app
8
+ doc/*
9
+ .yardoc
10
+ .yardopts
11
+
12
+ # Refinery Specific
13
+ *.tmproj
14
+ *.autobackupbyrefinery.*
15
+ /refinerycms-whatson*.gem
16
+ .autotest
17
+
18
+ # Mac
19
+ .DS_Store
20
+
21
+ # NetBeans
22
+ nbproject
23
+
24
+ # Eclipse
25
+ .project
26
+
27
+ # Redcar
28
+ .redcar
29
+
30
+ # Rubinius
31
+ *.rbc
32
+
33
+ # Vim
34
+ *.swp
35
+ *.swo
36
+
37
+ # RubyMine
38
+ .idea
39
+
40
+ # Backup
41
+ *~
42
+
43
+ # Capybara Bug
44
+ capybara-*html
45
+
46
+ # Future stuff
47
+ Gemfile.lock
48
+ spec/dummy
data/.tork.rb ADDED
@@ -0,0 +1,2 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'tork/config/logdir'
data/.travis.yml ADDED
@@ -0,0 +1,2 @@
1
+ rvm:
2
+ - 1.9.2
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development, :test do
4
+ gem 'sqlite3'
5
+ gem 'mysql2'
6
+ gem 'pg'
7
+ end
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'bundler/gem_tasks'
@@ -0,0 +1,11 @@
1
+ module Admin
2
+ module Whatson
3
+ class CategoriesController < Admin::BaseController
4
+
5
+ crudify :whatson_category,
6
+ :title_attribute => :title,
7
+ :order => 'title ASC'
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,40 @@
1
+ module Admin
2
+ module Whatson
3
+ class CommentsController < Admin::BaseController
4
+
5
+ crudify :whatson_comment,
6
+ :title_attribute => :name,
7
+ :order => 'published_at DESC'
8
+
9
+ def index
10
+ @whatson_comments = WhatsonComment.unmoderated
11
+ render :action => 'index'
12
+ end
13
+
14
+ def approved
15
+ unless params[:id].present?
16
+ @whatson_comments = WhatsonComment.approved
17
+ render :action => 'index'
18
+ else
19
+ @whatson_comment = WhatsonComment.find(params[:id])
20
+ @whatson_comment.approve!
21
+ flash[:notice] = t('approved', :scope => 'admin.whatson.comments', :author => @whatson_comment.name)
22
+ redirect_to :action => params[:return_to] || 'index'
23
+ end
24
+ end
25
+
26
+ def rejected
27
+ unless params[:id].present?
28
+ @whatson_comments = WhatsonComment.rejected
29
+ render :action => 'index'
30
+ else
31
+ @whatson_comment = WhatsonComment.find(params[:id])
32
+ @whatson_comment.reject!
33
+ flash[:notice] = t('rejected', :scope => 'admin.whatson.comments', :author => @whatson_comment.name)
34
+ redirect_to :action => params[:return_to] || 'index'
35
+ end
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,97 @@
1
+ module Admin
2
+ module Whatson
3
+ class PostsController < Admin::BaseController
4
+ require 'will_paginate/array'
5
+
6
+ crudify :whatson_post,
7
+ :title_attribute => :title,
8
+ :order => 'published_at DESC'
9
+
10
+ def uncategorized
11
+ @whatson_posts = WhatsonPost.uncategorized.paginate({
12
+ :page => params[:page],
13
+ :per_page => WhatsonPost.per_page
14
+ })
15
+ end
16
+
17
+ def tags
18
+ op = case ActiveRecord::Base.connection.adapter_name.downcase
19
+ when 'postgresql'
20
+ '~*'
21
+ else
22
+ 'LIKE'
23
+ end
24
+ wildcard = case ActiveRecord::Base.connection.adapter_name.downcase
25
+ when 'postgresql'
26
+ '.*'
27
+ else
28
+ '%'
29
+ end
30
+ @tags = WhatsonPost.tag_counts_on(:tags).where(
31
+ ["tags.name #{op} ?", "#{wildcard}#{params[:term].to_s.downcase}#{wildcard}"]
32
+ ).map { |tag| {:id => tag.id, :value => tag.name}}
33
+ render :json => @tags.flatten
34
+ end
35
+
36
+ def create
37
+ # if the position field exists, set this object as last object, given the conditions of this class.
38
+ if WhatsonPost.column_names.include?("position")
39
+ params[:whatson_post].merge!({
40
+ :position => ((WhatsonPost.maximum(:position, :conditions => "")||-1) + 1)
41
+ })
42
+ end
43
+
44
+ if WhatsonPost.column_names.include?("user_id")
45
+ params[:whatson_post].merge!({
46
+ :user_id => current_user.id
47
+ })
48
+ end
49
+
50
+ if (@whatson_post = WhatsonPost.create(params[:whatson_post])).valid?
51
+ (request.xhr? ? flash.now : flash).notice = t(
52
+ 'refinery.crudify.created',
53
+ :what => "'#{@whatson_post.title}'"
54
+ )
55
+
56
+ unless from_dialog?
57
+ unless params[:continue_editing] =~ /true|on|1/
58
+ redirect_back_or_default(admin_whatson_posts_url)
59
+ else
60
+ unless request.xhr?
61
+ redirect_to :back
62
+ else
63
+ render :partial => "/shared/message"
64
+ end
65
+ end
66
+ else
67
+ render :text => "<script>parent.window.location = '#{admin_whatson_posts_url}';</script>"
68
+ end
69
+ else
70
+ unless request.xhr?
71
+ render :action => 'new'
72
+ else
73
+ render :partial => "/shared/admin/error_messages",
74
+ :locals => {
75
+ :object => @whatson_post,
76
+ :include_object_name => true
77
+ }
78
+ end
79
+ end
80
+ end
81
+
82
+ before_filter :find_all_categories,
83
+ :only => [:new, :edit, :create, :update]
84
+
85
+ before_filter :check_category_ids, :only => :update
86
+
87
+ protected
88
+ def find_all_categories
89
+ @whatson_categories = WhatsonCategory.find(:all)
90
+ end
91
+
92
+ def check_category_ids
93
+ params[:whatson_post][:category_ids] ||= []
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,53 @@
1
+ module Admin
2
+ module Whatson
3
+ class SettingsController < Admin::BaseController
4
+
5
+ def notification_recipients
6
+ @recipients = WhatsonComment::Notification.recipients
7
+
8
+ if request.post?
9
+ WhatsonComment::Notification.recipients = params[:recipients]
10
+ flash[:notice] = t('updated', :scope => 'admin.whatson.settings.notification_recipients',
11
+ :recipients => WhatsonComment::Notification.recipients)
12
+ unless request.xhr? or from_dialog?
13
+ redirect_back_or_default(admin_whatson_posts_path)
14
+ else
15
+ render :text => "<script type='text/javascript'>parent.window.location = '#{admin_whatson_posts_path}';</script>",
16
+ :layout => false
17
+ end
18
+ end
19
+ end
20
+
21
+ def moderation
22
+ enabled = WhatsonComment::Moderation.toggle!
23
+ unless request.xhr?
24
+ redirect_back_or_default(admin_whatson_posts_path)
25
+ else
26
+ render :json => {:enabled => enabled},
27
+ :layout => false
28
+ end
29
+ end
30
+
31
+ def comments
32
+ enabled = WhatsonComment.toggle!
33
+ unless request.xhr?
34
+ redirect_back_or_default(admin_whatson_posts_path)
35
+ else
36
+ render :json => {:enabled => enabled},
37
+ :layout => false
38
+ end
39
+ end
40
+
41
+ def teasers
42
+ enabled = WhatsonPost.teaser_enabled_toggle!
43
+ unless request.xhr?
44
+ redirect_back_or_default(admin_whatson_posts_path)
45
+ else
46
+ render :json => {:enabled => enabled},
47
+ :layout => false
48
+ end
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,13 @@
1
+ module Whatson
2
+ class CategoriesController < WhatsonController
3
+
4
+ def show
5
+ @category = WhatsonCategory.find(params[:id])
6
+ @whatson_posts = @category.posts.live.includes(:comments, :categories).paginate({
7
+ :page => params[:page],
8
+ :per_page => RefinerySetting.find_or_set(:whatson_posts_per_page, 10)
9
+ })
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,109 @@
1
+ module Whatson
2
+ class PostsController < WhatsonController
3
+
4
+ before_filter :find_all_whatson_posts, :except => [:archive]
5
+ before_filter :find_whatson_post, :only => [:show, :comment, :update_nav]
6
+ before_filter :find_tags
7
+
8
+ respond_to :html, :js, :rss
9
+
10
+ def index
11
+ # Rss feeders are greedy. Let's give them every whatson post instead of paginating.
12
+ (@whatson_posts = WhatsonPost.live.includes(:comments, :categories).all) if request.format.rss?
13
+ respond_with (@whatson_posts) do |format|
14
+ format.html
15
+ format.rss
16
+ end
17
+ end
18
+
19
+ def show
20
+ @whatson_comment = WhatsonComment.new
21
+ @canonical = url_for(:locale => ::Refinery::I18n.default_frontend_locale) if canonical?
22
+
23
+ respond_with (@whatson_post) do |format|
24
+ format.html { present(@whatson_post) }
25
+ format.js { render :partial => 'post', :layout => false }
26
+ end
27
+ end
28
+
29
+ def comment
30
+ if (@whatson_comment = @whatson_post.comments.create(params[:whatson_comment])).valid?
31
+ if WhatsonComment::Moderation.enabled? or @whatson_comment.ham?
32
+ begin
33
+ Whatson::CommentMailer.notification(@whatson_comment, request).deliver
34
+ rescue
35
+ logger.warn "There was an error delivering a whatson comment notification.\n#{$!}\n"
36
+ end
37
+ end
38
+
39
+ if WhatsonComment::Moderation.enabled?
40
+ flash[:notice] = t('thank_you_moderated', :scope => 'whatson.posts.comments')
41
+ redirect_to whatson_post_url(params[:id])
42
+ else
43
+ flash[:notice] = t('thank_you', :scope => 'whatson.posts.comments')
44
+ redirect_to whatson_post_url(params[:id],
45
+ :anchor => "comment-#{@whatson_comment.to_param}")
46
+ end
47
+ else
48
+ render :action => 'show'
49
+ end
50
+ end
51
+
52
+ def archive
53
+ if params[:month].present?
54
+ date = "#{params[:month]}/#{params[:year]}"
55
+ @archive_date = Time.parse(date)
56
+ @date_title = @archive_date.strftime('%B %Y')
57
+ @whatson_posts = WhatsonPost.live.by_archive(@archive_date).paginate({
58
+ :page => params[:page],
59
+ :per_page => RefinerySetting.find_or_set(:whatson_posts_per_page, 10)
60
+ })
61
+ else
62
+ date = "01/#{params[:year]}"
63
+ @archive_date = Time.parse(date)
64
+ @date_title = @archive_date.strftime('%Y')
65
+ @whatson_posts = WhatsonPost.live.by_year(@archive_date).paginate({
66
+ :page => params[:page],
67
+ :per_page => RefinerySetting.find_or_set(:whatson_posts_per_page, 10)
68
+ })
69
+ end
70
+ respond_with (@whatson_posts)
71
+ end
72
+
73
+ def tagged
74
+ @tag = ActsAsTaggableOn::Tag.find(params[:tag_id])
75
+ @tag_name = @tag.name
76
+ @whatson_posts = WhatsonPost.tagged_with(@tag_name).paginate({
77
+ :page => params[:page],
78
+ :per_page => RefinerySetting.find_or_set(:whatson_posts_per_page, 10)
79
+ })
80
+ end
81
+
82
+ protected
83
+
84
+ def find_whatson_post
85
+ unless (@whatson_post = WhatsonPost.find(params[:id])).try(:live?)
86
+ if refinery_user? and current_user.authorized_plugins.include?("refinerycms_whatson")
87
+ @whatson_post = WhatsonPost.find(params[:id])
88
+ else
89
+ error_404
90
+ end
91
+ end
92
+ end
93
+
94
+ def find_all_whatson_posts
95
+ @whatson_posts = WhatsonPost.live.includes(:comments, :categories).paginate({
96
+ :page => params[:page],
97
+ :per_page => RefinerySetting.find_or_set(:whatson_posts_per_page, 10)
98
+ })
99
+ end
100
+
101
+ def find_tags
102
+ @tags = WhatsonPost.tag_counts_on(:tags)
103
+ end
104
+
105
+ def canonical?
106
+ ::Refinery.i18n_enabled? && ::Refinery::I18n.default_frontend_locale != ::Refinery::I18n.current_frontend_locale
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,16 @@
1
+ class WhatsonController < ApplicationController
2
+
3
+ helper :whatson_posts
4
+ before_filter :find_page, :find_all_whatson_categories
5
+
6
+ protected
7
+
8
+ def find_page
9
+ @page = Page.find_by_link_url("/whatson")
10
+ end
11
+
12
+ def find_all_whatson_categories
13
+ @whatson_categories = WhatsonCategory.all
14
+ end
15
+
16
+ end
@@ -0,0 +1,56 @@
1
+ module WhatsonPostsHelper
2
+ def whatson_archive_list
3
+ posts = WhatsonPost.live.select('published_at').all_previous
4
+ return nil if posts.blank?
5
+ html = ''
6
+ links = []
7
+ super_old_links = []
8
+
9
+ posts.each do |e|
10
+ if e.published_at >= Time.now.end_of_year.advance(:years => -3)
11
+ links << e.published_at.strftime('%m/%Y')
12
+ else
13
+ super_old_links << e.published_at.strftime('01/%Y')
14
+ end
15
+ end
16
+ links.uniq!
17
+ super_old_links.uniq!
18
+ links.each do |l|
19
+ year = l.split('/')[1]
20
+ month = l.split('/')[0]
21
+ count = WhatsonPost.live.by_archive(Time.parse(l)).size
22
+ text = t("date.month_names")[month.to_i] + " #{year} (#{count})"
23
+ html << "<li>"
24
+ html << link_to(text, archive_whatson_posts_path(:year => year, :month => month))
25
+ html << "</li>"
26
+ end
27
+ super_old_links.each do |l|
28
+ year = l.split('/')[1]
29
+ count = WhatsonPost.live.by_year(Time.parse(l)).size
30
+ text = "#{year} (#{count})"
31
+ html << "<li>"
32
+ html << link_to(text, archive_whatson_posts_path(:year => year))
33
+ html << "</li>"
34
+ end
35
+ html.html_safe
36
+ end
37
+
38
+ def next_or_previous?(post)
39
+ post.next.present? or post.prev.present?
40
+ end
41
+
42
+ def whatson_post_teaser_enabled?
43
+ WhatsonPost.teasers_enabled?
44
+ end
45
+
46
+ def whatson_post_teaser(post)
47
+ if post.respond_to?(:custom_teaser) && post.custom_teaser.present?
48
+ post.custom_teaser.html_safe
49
+ else
50
+ truncate(post.body, {
51
+ :length => RefinerySetting.find_or_set(:whatson_post_teaser_length, 250),
52
+ :preserve_html_tags => true
53
+ }).html_safe
54
+ end
55
+ end
56
+ end