diff --git a/app/models/block.rb b/app/models/block.rb
index effa633..ca5e19b 100644
--- a/app/models/block.rb
+++ b/app/models/block.rb
@@ -34,6 +34,12 @@ class Block < ActiveRecord::Base
else
return context[:request_path] == '/'
end
+ elsif display == 'except_home_page'
+ if context[:article]
+ return context[:article] != owner.home_page
+ else
+ return context[:request_path] != '/' + owner.identifier
+ end
end
end
true
@@ -45,6 +51,8 @@ class Block < ActiveRecord::Base
# * 'never': the block is hidden (it does not appear for visitors)
# * 'home_page_only' the block is displayed only when viewing the
# homepage of its owner.
+ # * 'except_home_page' the block is displayed only when viewing
+ # the homepage of its owner.
settings_items :display, :type => :string, :default => 'always'
# The block can be configured to be displayed in all languages or in just one language. It can assume any locale of the environment:
diff --git a/app/views/box_organizer/edit.rhtml b/app/views/box_organizer/edit.rhtml
index 3bc3b20..6aa54f5 100644
--- a/app/views/box_organizer/edit.rhtml
+++ b/app/views/box_organizer/edit.rhtml
@@ -14,6 +14,9 @@
<%= radio_button(:block, :display, 'home_page_only') %>
<%= label_tag('block_display_home_page_only', _('Only in the homepage')) %>
+ <%= radio_button(:block, :display, 'except_home_page') %>
+ <%= label_tag('block_display_except_home_page', _('In all pages, except in the homepage')) %>
+
<%= radio_button(:block, :display, 'never') %>
<%= label_tag('block_display_never', _("Don't display")) %>
diff --git a/test/functional/profile_design_controller_test.rb b/test/functional/profile_design_controller_test.rb
index d9605e5..d119980 100644
--- a/test/functional/profile_design_controller_test.rb
+++ b/test/functional/profile_design_controller_test.rb
@@ -171,6 +171,13 @@ class ProfileDesignControllerTest < Test::Unit::TestCase
end
end
+ should 'have options to display blocks' do
+ get :edit, :profile => 'designtestuser', :id => @b1.id
+ %w[always home_page_only except_home_page never].each do |option|
+ assert_tag :input, :attributes => { :type => 'radio', :value => option}
+ end
+ end
+
######################################################
# END - tests for BoxOrganizerController features
######################################################
diff --git a/test/unit/block_test.rb b/test/unit/block_test.rb
index e667c63..2524ed6 100644
--- a/test/unit/block_test.rb
+++ b/test/unit/block_test.rb
@@ -85,6 +85,26 @@ class BlockTest < Test::Unit::TestCase
assert_equal false, block.visible?(:article => nil)
end
+ should 'be able to be displayed everywhere except in the homepage' do
+ profile = Profile.new
+ home_page = Article.new
+ profile.home_page = home_page
+ block = Block.new(:display => 'except_home_page')
+ block.stubs(:owner).returns(profile)
+
+ assert_equal false, block.visible?(:article => home_page)
+ assert_equal true, block.visible?(:article => Article.new)
+ end
+
+ should 'be able to be displayed everywhere except on profile index' do
+ profile = Profile.new(:identifier => 'testinguser')
+ block = Block.new(:display => 'except_home_page')
+ block.stubs(:owner).returns(profile)
+
+ assert_equal false, block.visible?(:article => nil, :request_path => '/testinguser')
+ assert_equal true, block.visible?(:article => nil)
+ end
+
should 'be able to save display setting' do
user = create_user('testinguser').person
box = fast_create(Box, :owner_id => user.id)
--
libgit2 0.21.2