[Git][noosfero/noosfero][master] 2 commits: display_content plugin: Filter content by locale

Bráulio Bhavamitra gitlab at mg.gitlab.com
Fri Apr 1 20:31:36 BRT 2016


Bráulio Bhavamitra pushed to branch master at Noosfero / noosfero


Commits:
64857084 by Larissa Reis at 2016-04-01T17:47:35-03:00
display_content plugin: Filter content by locale

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

- - - - -
251e6e43 by Bráulio Bhavamitra at 2016-04-01T23:31:01+00:00
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
- - - - -


3 changed files:

- plugins/display_content/lib/display_content_block.rb
- plugins/display_content/test/unit/display_content_block_test.rb
- plugins/display_content/views/box_organizer/_display_content_block.html.erb


Changes:

=====================================
plugins/display_content/lib/display_content_block.rb
=====================================
--- 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|


=====================================
plugins/display_content/test/unit/display_content_block_test.rb
=====================================
--- 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


=====================================
plugins/display_content/views/box_organizer/_display_content_block.html.erb
=====================================
--- 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 @@
 <h3> <%= _('Order by:')%> </h3>
 <%= 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)%>
-</div>
 
+<h3> <%= _('Translations:')%> </h3>
+<%= labelled_check_box(_('List only translated content'), 'block[content_with_translations]', true) %>
+
+</div>



View it on GitLab: https://gitlab.com/noosfero/noosfero/compare/10ca96273e76289c4516ae8a4d8f24879524395f...251e6e4367119941bcec2eb845ae99809b6c8b45
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-dev/attachments/20160401/687644e0/attachment-0001.html>


More information about the Noosfero-dev mailing list