Commit 301ce771cc271c7fd9bbd147f17e1cfcfda48e72
1 parent
9e88d499
Exists in
master
and in
29 other branches
Revert "Blog paginate only with the available post for the user"
This reverts commit 64e4639c91da8a2beadf7639f95357b1db1f3e97. (ActionItem1557, ActionItem1617)
Showing
11 changed files
with
104 additions
and
93 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
@@ -78,13 +78,7 @@ class ContentViewerController < ApplicationController | @@ -78,13 +78,7 @@ class ContentViewerController < ApplicationController | ||
78 | end | 78 | end |
79 | 79 | ||
80 | if @page.blog? | 80 | if @page.blog? |
81 | - posts = if params[:year] and params[:month] | ||
82 | - filter_date = DateTime.parse("#{params[:year]}-#{params[:month]}-01") | ||
83 | - @page.posts.by_range(filter_date..Article.last_day_of_month(filter_date)) | ||
84 | - else | ||
85 | - @page.posts | ||
86 | - end | ||
87 | - @posts = available_articles(posts, user).paginate :page => params[:npage], :per_page => @page.posts_per_page | 81 | + @page.filter = {:year => params[:year], :month => params[:month]} |
88 | end | 82 | end |
89 | 83 | ||
90 | if @page.folder? && @page.view_as == 'image_gallery' | 84 | if @page.folder? && @page.view_as == 'image_gallery' |
app/helpers/blog_helper.rb
@@ -14,7 +14,7 @@ module BlogHelper | @@ -14,7 +14,7 @@ module BlogHelper | ||
14 | _('Edit blog') | 14 | _('Edit blog') |
15 | end | 15 | end |
16 | 16 | ||
17 | - def list_posts(articles, format = 'full') | 17 | + def list_posts(user, articles, format = 'full') |
18 | pagination = will_paginate(articles, { | 18 | pagination = will_paginate(articles, { |
19 | :param_name => 'npage', | 19 | :param_name => 'npage', |
20 | :prev_label => _('« Newer posts'), | 20 | :prev_label => _('« Newer posts'), |
@@ -25,16 +25,18 @@ module BlogHelper | @@ -25,16 +25,18 @@ module BlogHelper | ||
25 | articles.each_with_index{ |art,i| | 25 | articles.each_with_index{ |art,i| |
26 | css_add = [ 'position-'+(i+1).to_s() ] | 26 | css_add = [ 'position-'+(i+1).to_s() ] |
27 | position = (i%2 == 0) ? 'odd-post' : 'even-post' | 27 | position = (i%2 == 0) ? 'odd-post' : 'even-post' |
28 | - css_add << 'first' if i == 0 | ||
29 | - css_add << 'last' if i == (artic_len-1) | ||
30 | - css_add << 'not-published' if !art.published? | ||
31 | - css_add << position + '-inner' | ||
32 | - content << content_tag('div', | ||
33 | - content_tag('div', | ||
34 | - display_post(art, format) + '<br style="clear:both"/>', | ||
35 | - :class => 'blog-post ' + css_add.join(' '), | ||
36 | - :id => "post-#{art.id}"), :class => position | ||
37 | - ) | 28 | + if art.published? || (user==art.profile) |
29 | + css_add << 'first' if i == 0 | ||
30 | + css_add << 'last' if i == (artic_len-1) | ||
31 | + css_add << 'not-published' if !art.published? | ||
32 | + css_add << position + '-inner' | ||
33 | + content << content_tag('div', | ||
34 | + content_tag('div', | ||
35 | + display_post(art, format) + '<br style="clear:both"/>', | ||
36 | + :class => 'blog-post ' + css_add.join(' '), | ||
37 | + :id => "post-#{art.id}"), :class => position | ||
38 | + ) | ||
39 | + end | ||
38 | } | 40 | } |
39 | content.join("\n<hr class='sep-posts'/>\n") + (pagination or '') | 41 | content.join("\n<hr class='sep-posts'/>\n") + (pagination or '') |
40 | end | 42 | end |
app/models/article.rb
@@ -32,23 +32,6 @@ class Article < ActiveRecord::Base | @@ -32,23 +32,6 @@ class Article < ActiveRecord::Base | ||
32 | {:include => 'categories', :conditions => { 'categories.id' => category.id }} | 32 | {:include => 'categories', :conditions => { 'categories.id' => category.id }} |
33 | } | 33 | } |
34 | 34 | ||
35 | - named_scope :by_range, lambda { |range| { | ||
36 | - :conditions => [ | ||
37 | - 'published_at BETWEEN :start_date AND :end_date', { :start_date => range.first, :end_date => range.last } | ||
38 | - ] | ||
39 | - }} | ||
40 | - | ||
41 | - def self.first_day_of_month(date) | ||
42 | - date ||= Date.today | ||
43 | - Date.new(date.year, date.month, 1) | ||
44 | - end | ||
45 | - | ||
46 | - def self.last_day_of_month(date) | ||
47 | - date ||= Date.today | ||
48 | - date >>= 1 | ||
49 | - Date.new(date.year, date.month, 1) - 1.day | ||
50 | - end | ||
51 | - | ||
52 | URL_FORMAT = /\A(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?\Z/ix | 35 | URL_FORMAT = /\A(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?\Z/ix |
53 | 36 | ||
54 | validates_format_of :external_link, :with => URL_FORMAT, :if => lambda { |article| !article.external_link.blank? } | 37 | validates_format_of :external_link, :with => URL_FORMAT, :if => lambda { |article| !article.external_link.blank? } |
app/models/blog.rb
@@ -3,6 +3,7 @@ class Blog < Folder | @@ -3,6 +3,7 @@ class Blog < Folder | ||
3 | has_many :posts, :class_name => 'Article', :foreign_key => 'parent_id', :source => :children, :conditions => [ 'type != ?', 'RssFeed' ], :order => 'published_at DESC, id DESC' | 3 | has_many :posts, :class_name => 'Article', :foreign_key => 'parent_id', :source => :children, :conditions => [ 'type != ?', 'RssFeed' ], :order => 'published_at DESC, id DESC' |
4 | 4 | ||
5 | attr_accessor :feed_attrs | 5 | attr_accessor :feed_attrs |
6 | + attr_accessor :filter | ||
6 | 7 | ||
7 | after_create do |blog| | 8 | after_create do |blog| |
8 | blog.children << RssFeed.new(:name => 'feed', :profile => blog.profile) | 9 | blog.children << RssFeed.new(:name => 'feed', :profile => blog.profile) |
@@ -22,9 +23,7 @@ class Blog < Folder | @@ -22,9 +23,7 @@ class Blog < Folder | ||
22 | # FIXME isn't this too much including just to be able to generate some HTML? | 23 | # FIXME isn't this too much including just to be able to generate some HTML? |
23 | include ActionView::Helpers::TagHelper | 24 | include ActionView::Helpers::TagHelper |
24 | def to_html(options = {}) | 25 | def to_html(options = {}) |
25 | - lambda do | ||
26 | - render :file => 'content_viewer/blog_page' | ||
27 | - end | 26 | + posts_list(options[:page]) |
28 | end | 27 | end |
29 | 28 | ||
30 | def folder? | 29 | def folder? |
@@ -50,6 +49,19 @@ class Blog < Folder | @@ -50,6 +49,19 @@ class Blog < Folder | ||
50 | self.feed | 49 | self.feed |
51 | end | 50 | end |
52 | 51 | ||
52 | + def posts_list(npage) | ||
53 | + article = self | ||
54 | + children = if filter and filter[:year] and filter[:month] | ||
55 | + filter_date = DateTime.parse("#{filter[:year]}-#{filter[:month]}-01") | ||
56 | + posts.paginate :page => npage, :per_page => posts_per_page, :conditions => [ 'published_at between ? and ?', filter_date, filter_date + 1.month - 1.day ] | ||
57 | + else | ||
58 | + posts.paginate :page => npage, :per_page => posts_per_page | ||
59 | + end | ||
60 | + lambda do | ||
61 | + render :file => 'content_viewer/blog_page', :locals => {:article => article, :children => children} | ||
62 | + end | ||
63 | + end | ||
64 | + | ||
53 | has_one :external_feed, :foreign_key => 'blog_id', :dependent => :destroy | 65 | has_one :external_feed, :foreign_key => 'blog_id', :dependent => :destroy |
54 | 66 | ||
55 | attr_accessor :external_feed_data | 67 | attr_accessor :external_feed_data |
app/models/event.rb
@@ -56,6 +56,17 @@ class Event < Article | @@ -56,6 +56,17 @@ class Event < Article | ||
56 | first_day..last_day | 56 | first_day..last_day |
57 | end | 57 | end |
58 | 58 | ||
59 | + def self.first_day_of_month(date) | ||
60 | + date ||= Date.today | ||
61 | + Date.new(date.year, date.month, 1) | ||
62 | + end | ||
63 | + | ||
64 | + def self.last_day_of_month(date) | ||
65 | + date ||= Date.today | ||
66 | + date >>= 1 | ||
67 | + Date.new(date.year, date.month, 1) - 1.day | ||
68 | + end | ||
69 | + | ||
59 | def date_range | 70 | def date_range |
60 | start_date..(end_date||start_date) | 71 | start_date..(end_date||start_date) |
61 | end | 72 | end |
app/views/content_viewer/blog_page.rhtml
1 | -<% add_rss_feed_to_head(@page.name, @page.feed.url) if @page.blog? && @page.feed %> | 1 | +<% add_rss_feed_to_head(article.name, article.feed.url) if article.blog? && article.feed %> |
2 | 2 | ||
3 | -<%= content_tag('em', _('(external feed was not loaded yet)'), :id => 'external-feed-info', :class => 'metadata') if @page.blog? && @page.external_feed && @page.external_feed.enabled && @page.external_feed.fetched_at.nil? %> | 3 | +<%= content_tag('em', _('(external feed was not loaded yet)'), :id => 'external-feed-info', :class => 'metadata') if article.blog? && article.external_feed && article.external_feed.enabled && article.external_feed.fetched_at.nil? %> |
4 | 4 | ||
5 | <div> | 5 | <div> |
6 | - <%= link_to(image_tag('icons-mime/rss-feed.png'), @page.feed.url, :class => 'blog-feed-link') if @page.blog? && @page.feed %> | 6 | + <%= link_to(image_tag('icons-mime/rss-feed.png'), article.feed.url, :class => 'blog-feed-link') if article.blog? && article.feed %> |
7 | <div class='blog-description'> | 7 | <div class='blog-description'> |
8 | - <%= @page.body %> | 8 | + <%= article.body %> |
9 | </div> | 9 | </div> |
10 | </div> | 10 | </div> |
11 | <hr class="pre-posts"/> | 11 | <hr class="pre-posts"/> |
12 | <div class="blog-posts"> | 12 | <div class="blog-posts"> |
13 | - <%= (@posts.compact.empty? ? content_tag('em', _('(no posts)')) : list_posts(@posts, @page.visualization_format)) %> | 13 | + <%= (children.compact.empty? ? content_tag('em', _('(no posts)')) : list_posts(user, children, article.visualization_format)) %> |
14 | </div> | 14 | </div> |
test/functional/content_viewer_controller_test.rb
@@ -603,27 +603,10 @@ class ContentViewerControllerTest < Test::Unit::TestCase | @@ -603,27 +603,10 @@ class ContentViewerControllerTest < Test::Unit::TestCase | ||
603 | assert_response :missing | 603 | assert_response :missing |
604 | end | 604 | end |
605 | 605 | ||
606 | - should 'list unpublished posts to owner with a different class' do | ||
607 | - login_as('testinguser') | ||
608 | - blog = Blog.create!(:name => 'A blog test', :profile => profile) | ||
609 | - blog.posts << TextileArticle.create!(:name => 'Post', :profile => profile, :parent => blog, :published => false) | ||
610 | - | ||
611 | - get :view_page, :profile => profile.identifier, :page => [blog.path] | ||
612 | - assert_tag :tag => 'div', :attributes => {:class => /not-published/} | ||
613 | - end | ||
614 | - | ||
615 | - should 'not list unpublished posts to a not logged person' do | ||
616 | - blog = Blog.create!(:name => 'A blog test', :profile => profile) | ||
617 | - blog.posts << TextileArticle.create!(:name => 'Post', :profile => profile, :parent => blog, :published => false) | ||
618 | - | ||
619 | - get :view_page, :profile => profile.identifier, :page => [blog.path] | ||
620 | - assert_no_tag :tag => 'a', :content => "Post" | ||
621 | - end | ||
622 | - | ||
623 | should 'display pagination links of blog' do | 606 | should 'display pagination links of blog' do |
624 | blog = Blog.create!(:name => 'A blog test', :profile => profile, :posts_per_page => 5) | 607 | blog = Blog.create!(:name => 'A blog test', :profile => profile, :posts_per_page => 5) |
625 | for n in 1..10 | 608 | for n in 1..10 |
626 | - blog.posts << TextileArticle.create!(:name => "Post #{n}", :profile => profile, :parent => blog) | 609 | + blog.children << TextileArticle.create!(:name => "Post #{n}", :profile => profile, :parent => blog) |
627 | end | 610 | end |
628 | assert_equal 10, blog.posts.size | 611 | assert_equal 10, blog.posts.size |
629 | 612 | ||
@@ -631,17 +614,11 @@ class ContentViewerControllerTest < Test::Unit::TestCase | @@ -631,17 +614,11 @@ class ContentViewerControllerTest < Test::Unit::TestCase | ||
631 | assert_tag :tag => 'a', :attributes => { :href => "/#{profile.identifier}/#{blog.path}?npage=2", :rel => 'next' } | 614 | assert_tag :tag => 'a', :attributes => { :href => "/#{profile.identifier}/#{blog.path}?npage=2", :rel => 'next' } |
632 | end | 615 | end |
633 | 616 | ||
634 | - should 'display filtered posts' do | ||
635 | - blog = Blog.create!(:name => 'A blog test', :profile => profile) | ||
636 | - not_display_post = TextileArticle.new(:name => "Post 1", :profile => profile, :parent => blog) | ||
637 | - display_post = TextileArticle.new(:name => "Post 2", :profile => profile, :parent => blog) | ||
638 | - | ||
639 | - not_display_post.update_attribute(:published_at, DateTime.parse('2009-09-10')) | ||
640 | - display_post.update_attribute(:published_at, DateTime.parse('2010-09-10')) | ||
641 | - | ||
642 | - get :view_page, :profile => profile.identifier, :page => [blog.path], :year => 2010, :month => 9 | ||
643 | - assert_no_tag :tag => 'a', :content => "Post 1" | ||
644 | - assert_tag :tag => 'a', :content => "Post 2" | 617 | + should 'set year and month filter from URL params' do |
618 | + profile.articles << Blog.new(:name => 'A blog test', :profile => profile) | ||
619 | + year, month = profile.blog.created_at.year.to_s, '%02d' % profile.blog.created_at.month | ||
620 | + get :view_page, :profile => profile.identifier, :page => [profile.blog.path], :year => year, :month => month | ||
621 | + assert_equal({ :year => year.to_s, :month => month.to_s }, assigns(:page).filter) | ||
645 | end | 622 | end |
646 | 623 | ||
647 | should 'give link to create new article inside folder when view child of folder' do | 624 | should 'give link to create new article inside folder when view child of folder' do |
test/unit/article_test.rb
@@ -873,22 +873,4 @@ class ArticleTest < Test::Unit::TestCase | @@ -873,22 +873,4 @@ class ArticleTest < Test::Unit::TestCase | ||
873 | assert_no_match /[<>]/, article.name | 873 | assert_no_match /[<>]/, article.name |
874 | end | 874 | end |
875 | 875 | ||
876 | - should 'found articles with published date between a range' do | ||
877 | - start_date = DateTime.parse('2010-07-06') | ||
878 | - end_date = DateTime.parse('2010-08-02') | ||
879 | - | ||
880 | - article_found1 = fast_create(Article, :published_at => start_date) | ||
881 | - article_found2 = fast_create(Article, :published_at => end_date) | ||
882 | - article_not_found = fast_create(Article, :published_at => end_date + 1.month) | ||
883 | - | ||
884 | - assert_includes Article.by_range(start_date..end_date), article_found1 | ||
885 | - assert_includes Article.by_range(start_date..end_date), article_found2 | ||
886 | - assert_not_includes Article.by_range(start_date..end_date), article_not_found | ||
887 | - end | ||
888 | - | ||
889 | - should 'calculate first/end day of a month' do | ||
890 | - assert_equal 1, Article.first_day_of_month(DateTime.parse('2010-07-06')).day | ||
891 | - assert_equal 31, Article.last_day_of_month(DateTime.parse('2010-07-06')).day | ||
892 | - end | ||
893 | - | ||
894 | end | 876 | end |
test/unit/blog_helper_test.rb
@@ -27,7 +27,28 @@ class BlogHelperTest < Test::Unit::TestCase | @@ -27,7 +27,28 @@ class BlogHelperTest < Test::Unit::TestCase | ||
27 | expects(:content_tag).with('div', "POST<br style=\"clear:both\"/>", :class => 'blog-post position-1 first last odd-post-inner', :id => "post-#{published_post.id}").returns('POST') | 27 | expects(:content_tag).with('div', "POST<br style=\"clear:both\"/>", :class => 'blog-post position-1 first last odd-post-inner', :id => "post-#{published_post.id}").returns('POST') |
28 | expects(:content_tag).with('div', 'POST', {:class => 'odd-post'}).returns('RESULT') | 28 | expects(:content_tag).with('div', 'POST', {:class => 'odd-post'}).returns('RESULT') |
29 | 29 | ||
30 | - assert_equal 'RESULT', list_posts(blog.posts) | 30 | + assert_equal 'RESULT', list_posts(profile, blog.posts) |
31 | + end | ||
32 | + | ||
33 | + should 'list unpublished posts to owner with a different class' do | ||
34 | + blog.children << unpublished_post = TextileArticle.create!(:name => 'Post', :profile => profile, :parent => blog, :published => false) | ||
35 | + | ||
36 | + expects(:display_post).with(anything, anything).returns('POST') | ||
37 | + expects(:content_tag).with('div', "POST<br style=\"clear:both\"/>", :class => 'blog-post position-1 first last not-published odd-post-inner', :id => "post-#{unpublished_post.id}").returns('POST') | ||
38 | + expects(:content_tag).with('div', 'POST', {:class => 'odd-post'}).returns('RESULT') | ||
39 | + assert_equal 'RESULT', list_posts(profile, blog.posts) | ||
40 | + end | ||
41 | + | ||
42 | + should 'not list unpublished posts to not owner' do | ||
43 | + blog.children << unpublished_post = TextileArticle.create!(:name => 'First post', :profile => profile, :parent => blog, :published => false) | ||
44 | + | ||
45 | + blog.children << published_post = TextileArticle.create!(:name => 'Second post', :profile => profile, :parent => blog, :published => true) | ||
46 | + | ||
47 | + expects(:display_post).with(anything, anything).returns('POST') | ||
48 | + expects(:content_tag).with('div', "POST<br style=\"clear:both\"/>", has_entries(:id => "post-#{unpublished_post.id}")).never | ||
49 | + expects(:content_tag).with('div', "POST<br style=\"clear:both\"/>", has_entries(:id => "post-#{published_post.id}")).returns('POST') | ||
50 | + expects(:content_tag).with('div', 'POST', {:class => 'odd-post'}).returns('RESULT') | ||
51 | + assert_equal 'RESULT', list_posts(nil, blog.posts) | ||
31 | end | 52 | end |
32 | 53 | ||
33 | should 'list even/odd posts with a different class' do | 54 | should 'list even/odd posts with a different class' do |
@@ -43,7 +64,7 @@ class BlogHelperTest < Test::Unit::TestCase | @@ -43,7 +64,7 @@ class BlogHelperTest < Test::Unit::TestCase | ||
43 | expects(:content_tag).with('div', "POST<br style=\"clear:both\"/>", :class => 'blog-post position-2 last even-post-inner', :id => "post-#{older_post.id}").returns('POST 2') | 64 | expects(:content_tag).with('div', "POST<br style=\"clear:both\"/>", :class => 'blog-post position-2 last even-post-inner', :id => "post-#{older_post.id}").returns('POST 2') |
44 | expects(:content_tag).with('div', "POST 2", :class => 'even-post').returns('EVEN-POST') | 65 | expects(:content_tag).with('div', "POST 2", :class => 'even-post').returns('EVEN-POST') |
45 | 66 | ||
46 | - assert_equal "ODD-POST\n<hr class='sep-posts'/>\nEVEN-POST", list_posts(blog.posts) | 67 | + assert_equal "ODD-POST\n<hr class='sep-posts'/>\nEVEN-POST", list_posts(nil, blog.posts) |
47 | end | 68 | end |
48 | 69 | ||
49 | 70 |
test/unit/blog_test.rb
@@ -82,6 +82,13 @@ class BlogTest < ActiveSupport::TestCase | @@ -82,6 +82,13 @@ class BlogTest < ActiveSupport::TestCase | ||
82 | assert_equal [newer, older], blog.posts | 82 | assert_equal [newer, older], blog.posts |
83 | end | 83 | end |
84 | 84 | ||
85 | + should 'has filter' do | ||
86 | + p = create_user('testuser').person | ||
87 | + blog = Blog.create!(:profile => p, :name => 'Blog test') | ||
88 | + blog.filter = {:param => 'value'} | ||
89 | + assert_equal 'value', blog.filter[:param] | ||
90 | + end | ||
91 | + | ||
85 | should 'has one external feed' do | 92 | should 'has one external feed' do |
86 | p = create_user('testuser').person | 93 | p = create_user('testuser').person |
87 | blog = fast_create(Blog, :profile_id => p.id, :name => 'Blog test') | 94 | blog = fast_create(Blog, :profile_id => p.id, :name => 'Blog test') |
test/unit/content_viewer_helper_test.rb
@@ -57,10 +57,32 @@ class ContentViewerHelperTest < Test::Unit::TestCase | @@ -57,10 +57,32 @@ class ContentViewerHelperTest < Test::Unit::TestCase | ||
57 | should 'not list feed article' do | 57 | should 'not list feed article' do |
58 | profile.articles << Blog.new(:name => 'Blog test', :profile => profile) | 58 | profile.articles << Blog.new(:name => 'Blog test', :profile => profile) |
59 | assert_includes profile.blog.children.map{|i| i.class}, RssFeed | 59 | assert_includes profile.blog.children.map{|i| i.class}, RssFeed |
60 | - result = list_posts(profile.blog.posts) | 60 | + result = list_posts(nil, profile.blog.posts) |
61 | assert_no_match /feed/, result | 61 | assert_no_match /feed/, result |
62 | end | 62 | end |
63 | 63 | ||
64 | + should 'filter blog posts by date' do | ||
65 | + blog = Blog.create!(:name => 'Blog test', :profile => profile) | ||
66 | + | ||
67 | + nov = TextileArticle.create!(:name => 'November post', :parent => blog, :profile => profile) | ||
68 | + nov.update_attributes!(:published_at => DateTime.parse('2008-11-15')) | ||
69 | + | ||
70 | + sep = TextileArticle.create!(:name => 'September post', :parent => blog, :profile => profile) | ||
71 | + sep.update_attribute(:published_at, DateTime.parse('2008-09-10')) | ||
72 | + | ||
73 | + blog.reload | ||
74 | + blog.filter = {:year => 2008, :month => 11} | ||
75 | + assert blog.save! | ||
76 | + | ||
77 | + self.stubs(:params).returns({:npage => nil}) | ||
78 | + | ||
79 | + expects(:render).with(:file => 'content_viewer/blog_page', :locals => {:article => blog, :children => [nov]}).returns("BLI") | ||
80 | + | ||
81 | + result = article_to_html(blog) | ||
82 | + | ||
83 | + assert_equal 'BLI', result | ||
84 | + end | ||
85 | + | ||
64 | end | 86 | end |
65 | 87 | ||
66 | def show_date(date) | 88 | def show_date(date) |