Commit 251e6e4367119941bcec2eb845ae99809b6c8b45

Authored by Braulio Bhavamitra
2 parents 10ca9627 64857084

Merge branch 'display-content-translation' into 'master'

display_content plugin: Filter content by locale

Show posts and content based on locale and replaces post with its translation.

See merge request !835
plugins/display_content/lib/display_content_block.rb
... ... @@ -26,9 +26,10 @@ class DisplayContentBlock < Block
26 26 settings_items :display_folder_children, :type => :boolean, :default => true
27 27 settings_items :types, :type => Array, :default => ['TextileArticle', 'TinyMceArticle', 'RawHTMLArticle']
28 28 settings_items :order_by_recent, :type => :boolean, :default => :true
  29 + settings_items :content_with_translations, :type => :boolean, :default => :true
29 30 settings_items :limit_to_show, :type => :integer, :default => 6
30 31  
31   - attr_accessible :sections, :checked_nodes, :display_folder_children, :types, :order_by_recent, :limit_to_show
  32 + attr_accessible :sections, :checked_nodes, :display_folder_children, :types, :order_by_recent, :limit_to_show, :content_with_translations
32 33  
33 34 def self.description
34 35 _('Display your contents')
... ... @@ -129,8 +130,14 @@ class DisplayContentBlock < Block
129 130 limit_final = [limit_to_show, 0].max
130 131  
131 132 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)
  133 +
132 134 docs = docs.limit(limit_final) if display_folder_children
133 135  
  136 + if content_with_translations
  137 + docs = docs.native_translations
  138 + docs.replace docs.map{ |p| p.get_translation_to(FastGettext.locale) }.compact
  139 + end
  140 +
134 141 proc do
135 142 block.block_title(block.title) +
136 143 content_tag('ul', docs.map {|item|
... ...
plugins/display_content/test/unit/display_content_block_test.rb
... ... @@ -711,4 +711,59 @@ class DisplayContentBlockTest < ActiveSupport::TestCase
711 711 assert a1_index.nil?
712 712 end
713 713  
  714 + should 'show only articles with current locale translation' do
  715 + FastGettext.stubs(:locale).returns('pt')
  716 + profile = create_user('testuser').person
  717 + Article.delete_all
  718 +
  719 + en_article = fast_create(TextileArticle, :profile_id => profile.id, :name => 'en_article', :language => 'en')
  720 + en_article2 = fast_create(TextileArticle, :profile_id => profile.id, :name => 'en_article 2', :language => 'en')
  721 +
  722 + pt_article = fast_create(TextileArticle, :profile_id => profile.id, :name => 'pt_article', :language => 'pt')
  723 +
  724 + block = DisplayContentBlock.new
  725 + block.sections = [{:value => 'title', :checked => true}]
  726 + block.content_with_translations = true
  727 + block.limit_to_show = 2
  728 +
  729 + box = mock()
  730 + block.stubs(:box).returns(box)
  731 + box.stubs(:owner).returns(profile)
  732 +
  733 + assert_nil instance_eval(&block.content).index(en_article.name)
  734 + assert_nil instance_eval(&block.content).index(en_article2.name)
  735 + assert instance_eval(&block.content).index(pt_article.name).present?
  736 +
  737 + FastGettext.stubs(:locale).returns('en')
  738 +
  739 + assert instance_eval(&block.content).index(en_article.name).present?
  740 + assert instance_eval(&block.content).index(en_article2.name).present?
  741 + assert_nil instance_eval(&block.content).index(pt_article.name)
  742 + end
  743 +
  744 + should 'replace article with its translation' do
  745 + FastGettext.stubs(:locale).returns('pt')
  746 + profile = create_user('testuser').person
  747 + Article.delete_all
  748 +
  749 + en_article = fast_create(TextileArticle, :profile_id => profile.id, :name => 'en_article', :language => 'en')
  750 + pt_article = fast_create(TextileArticle, :profile_id => profile.id, :name => 'pt_article', :language => 'pt', :translation_of_id => en_article)
  751 +
  752 + block = DisplayContentBlock.new
  753 + block.sections = [{:value => 'title', :checked => true}]
  754 + block.content_with_translations = true
  755 + block.limit_to_show = 2
  756 +
  757 + box = mock()
  758 + block.stubs(:box).returns(box)
  759 + box.stubs(:owner).returns(profile)
  760 +
  761 + assert_nil instance_eval(&block.content).index(en_article.name)
  762 + assert instance_eval(&block.content).index(pt_article.name).present?
  763 +
  764 + FastGettext.stubs(:locale).returns('en')
  765 +
  766 + assert instance_eval(&block.content).index(en_article.name).present?
  767 + assert_nil instance_eval(&block.content).index(pt_article.name)
  768 + end
714 769 end
... ...
plugins/display_content/views/box_organizer/_display_content_block.html.erb
... ... @@ -28,5 +28,8 @@
28 28 <h3> <%= _('Order by:')%> </h3>
29 29 <%= labelled_radio_button(_("Most recent"), "block[order_by_recent]", true, @block.order_by_recent)%>
30 30 <%= labelled_radio_button(_("Most oldest"), "block[order_by_recent]", false, !@block.order_by_recent)%>
31   -</div>
32 31  
  32 +<h3> <%= _('Translations:')%> </h3>
  33 +<%= labelled_check_box(_('List only translated content'), 'block[content_with_translations]', true) %>
  34 +
  35 +</div>
... ...