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