From 6485708444500b34e70de11ea0144af0e5ea1ee7 Mon Sep 17 00:00:00 2001 From: Larissa Reis Date: Fri, 1 Apr 2016 17:47:35 -0300 Subject: [PATCH] display_content plugin: Filter content by locale --- plugins/display_content/lib/display_content_block.rb | 9 ++++++++- plugins/display_content/test/unit/display_content_block_test.rb | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ plugins/display_content/views/box_organizer/_display_content_block.html.erb | 5 ++++- 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/plugins/display_content/lib/display_content_block.rb b/plugins/display_content/lib/display_content_block.rb index 138844c..8fcf1b5 100644 --- a/plugins/display_content/lib/display_content_block.rb +++ b/plugins/display_content/lib/display_content_block.rb @@ -26,9 +26,10 @@ class DisplayContentBlock < Block settings_items :display_folder_children, :type => :boolean, :default => true settings_items :types, :type => Array, :default => ['TextileArticle', 'TinyMceArticle', 'RawHTMLArticle'] settings_items :order_by_recent, :type => :boolean, :default => :true + settings_items :content_with_translations, :type => :boolean, :default => :true settings_items :limit_to_show, :type => :integer, :default => 6 - attr_accessible :sections, :checked_nodes, :display_folder_children, :types, :order_by_recent, :limit_to_show + attr_accessible :sections, :checked_nodes, :display_folder_children, :types, :order_by_recent, :limit_to_show, :content_with_translations def self.description _('Display your contents') @@ -129,8 +130,14 @@ class DisplayContentBlock < Block limit_final = [limit_to_show, 0].max docs = owner.articles.order(order_string).where(["articles.type IN(:types) #{nodes.blank? ? '' : nodes_conditions}", {:nodes => self.nodes, :types => self.types}]).includes(:profile, :image, :tags) + docs = docs.limit(limit_final) if display_folder_children + if content_with_translations + docs = docs.native_translations + docs.replace docs.map{ |p| p.get_translation_to(FastGettext.locale) }.compact + end + proc do block.block_title(block.title) + content_tag('ul', docs.map {|item| diff --git a/plugins/display_content/test/unit/display_content_block_test.rb b/plugins/display_content/test/unit/display_content_block_test.rb index 05f7f78..cf4aa07 100644 --- a/plugins/display_content/test/unit/display_content_block_test.rb +++ b/plugins/display_content/test/unit/display_content_block_test.rb @@ -711,4 +711,59 @@ class DisplayContentBlockTest < ActiveSupport::TestCase assert a1_index.nil? end + should 'show only articles with current locale translation' do + FastGettext.stubs(:locale).returns('pt') + profile = create_user('testuser').person + Article.delete_all + + en_article = fast_create(TextileArticle, :profile_id => profile.id, :name => 'en_article', :language => 'en') + en_article2 = fast_create(TextileArticle, :profile_id => profile.id, :name => 'en_article 2', :language => 'en') + + pt_article = fast_create(TextileArticle, :profile_id => profile.id, :name => 'pt_article', :language => 'pt') + + block = DisplayContentBlock.new + block.sections = [{:value => 'title', :checked => true}] + block.content_with_translations = true + block.limit_to_show = 2 + + box = mock() + block.stubs(:box).returns(box) + box.stubs(:owner).returns(profile) + + assert_nil instance_eval(&block.content).index(en_article.name) + assert_nil instance_eval(&block.content).index(en_article2.name) + assert instance_eval(&block.content).index(pt_article.name).present? + + FastGettext.stubs(:locale).returns('en') + + assert instance_eval(&block.content).index(en_article.name).present? + assert instance_eval(&block.content).index(en_article2.name).present? + assert_nil instance_eval(&block.content).index(pt_article.name) + end + + should 'replace article with its translation' do + FastGettext.stubs(:locale).returns('pt') + profile = create_user('testuser').person + Article.delete_all + + en_article = fast_create(TextileArticle, :profile_id => profile.id, :name => 'en_article', :language => 'en') + pt_article = fast_create(TextileArticle, :profile_id => profile.id, :name => 'pt_article', :language => 'pt', :translation_of_id => en_article) + + block = DisplayContentBlock.new + block.sections = [{:value => 'title', :checked => true}] + block.content_with_translations = true + block.limit_to_show = 2 + + box = mock() + block.stubs(:box).returns(box) + box.stubs(:owner).returns(profile) + + assert_nil instance_eval(&block.content).index(en_article.name) + assert instance_eval(&block.content).index(pt_article.name).present? + + FastGettext.stubs(:locale).returns('en') + + assert instance_eval(&block.content).index(en_article.name).present? + assert_nil instance_eval(&block.content).index(pt_article.name) + end end diff --git a/plugins/display_content/views/box_organizer/_display_content_block.html.erb b/plugins/display_content/views/box_organizer/_display_content_block.html.erb index a125ecc..5a6ec21 100644 --- a/plugins/display_content/views/box_organizer/_display_content_block.html.erb +++ b/plugins/display_content/views/box_organizer/_display_content_block.html.erb @@ -28,5 +28,8 @@

<%= _('Order by:')%>

<%= labelled_radio_button(_("Most recent"), "block[order_by_recent]", true, @block.order_by_recent)%> <%= labelled_radio_button(_("Most oldest"), "block[order_by_recent]", false, !@block.order_by_recent)%> - +

<%= _('Translations:')%>

+<%= labelled_check_box(_('List only translated content'), 'block[content_with_translations]', true) %> + + -- libgit2 0.21.2