From 22d3d9d34034136b344cd6b58270a6b49bf61dbd Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Wed, 12 Mar 2014 12:57:11 -0300 Subject: [PATCH] Added a filter to display blocks depending on user --- app/helpers/boxes_helper.rb | 13 ++++++++++++- app/views/box_organizer/index.rhtml | 8 ++++++++ public/stylesheets/application.css | 8 ++++++++ test/functional/environment_design_controller_test.rb | 12 ++++++++++++ test/functional/profile_design_controller_test.rb | 5 +++++ test/unit/boxes_helper_test.rb | 37 +++++++++++++++++++++++++++++++++++-- 6 files changed, 80 insertions(+), 3 deletions(-) diff --git a/app/helpers/boxes_helper.rb b/app/helpers/boxes_helper.rb index 7741bbe..a769059 100644 --- a/app/helpers/boxes_helper.rb +++ b/app/helpers/boxes_helper.rb @@ -70,7 +70,18 @@ module BoxesHelper end def select_blocks(arr, context) - arr + filter = (context && context[:params] && context[:params][:filter]) || {} + user_filter(arr, filter) + end + + def user_filter(arr, filter) + if filter[:display_user]=='not_logged' + arr.select { |block| block.display_to_user?(nil) } + elsif filter[:display_user]=='logged' + arr.select { |block| block.display_to_user?(user) } + else + arr + end end def display_block(block, main_content = nil) diff --git a/app/views/box_organizer/index.rhtml b/app/views/box_organizer/index.rhtml index d66e1e1..bee2eeb 100644 --- a/app/views/box_organizer/index.rhtml +++ b/app/views/box_organizer/index.rhtml @@ -4,3 +4,11 @@ <%= colorbox_button('add', _('Add a block'), { :action => 'add_block' }) %> <%= button(:back, _('Back to control panel'), :controller => (profile.nil? ? 'admin_panel': 'profile_editor')) %> <% end %> + +<% form_tag({:action => :index}) do %> +
+ <%= _('Display blocks to:') %> + <%= select_tag('filter[display_user]', options_from_collection_for_select(Block.new.display_user_options, :first, :last, params[:filter] ? params[:filter][:display_user] : 'all'), :onchange => "this.form.submit();") %> +
+
+<% end %> diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index e5bfffd..14afb58 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -6488,3 +6488,11 @@ ul.article-versions li { font-size: 13px; padding: 3px 0px; } + +.user-filter { + float: right; +} + +.design-menu { + float: left; +} diff --git a/test/functional/environment_design_controller_test.rb b/test/functional/environment_design_controller_test.rb index 1c473fe..c88409e 100644 --- a/test/functional/environment_design_controller_test.rb +++ b/test/functional/environment_design_controller_test.rb @@ -366,4 +366,16 @@ class EnvironmentDesignControllerTest < ActionController::TestCase assert @controller.instance_variable_get('@side_block_types').include?(CustomBlock8) end + should 'display user filter for blocks' do + login_as(create_admin_user(Environment.default)) + get :index + assert_tag 'div', :attributes => {:class => 'user-filter'} + end + + should 'display user filter for blocks with selected value' do + login_as(create_admin_user(Environment.default)) + get :index, :filter => {:display_user => 'logged'} + assert_tag 'select', :attributes => {:name => 'filter[display_user]'}, :descendant => {:tag => 'option', :attributes => {:value => 'logged', :selected => true}} + end + end diff --git a/test/functional/profile_design_controller_test.rb b/test/functional/profile_design_controller_test.rb index a658bee..9b395ff 100644 --- a/test/functional/profile_design_controller_test.rb +++ b/test/functional/profile_design_controller_test.rb @@ -744,4 +744,9 @@ class ProfileDesignControllerTest < ActionController::TestCase end end + should 'display user filter for blocks' do + get :index, :profile => 'designtestuser' + assert_tag 'div', :attributes => {:class => 'user-filter'} + end + end diff --git a/test/unit/boxes_helper_test.rb b/test/unit/boxes_helper_test.rb index e4d1101..301e43a 100644 --- a/test/unit/boxes_helper_test.rb +++ b/test/unit/boxes_helper_test.rb @@ -54,6 +54,7 @@ class BoxesHelperTest < ActiveSupport::TestCase expects(:display_block).with(b, '') stubs(:request).returns(request) stubs(:block_target).returns('') + stubs(:user).returns(nil) expects(:locale).returns('en') with_box_decorator self do display_box_content(box, '') @@ -73,6 +74,7 @@ class BoxesHelperTest < ActiveSupport::TestCase box.save! expects(:display_block).with(b, '').never stubs(:request).returns(request) + stubs(:user).returns(nil) stubs(:block_target).returns('') expects(:locale).returns('en') display_box_content(box, '') @@ -105,16 +107,47 @@ class BoxesHelperTest < ActiveSupport::TestCase assert block_css_classes(Block.new(:display => 'never')).split.any? { |item| item == 'invisible-block'} end - should 'fill context with the article, request_path and locale' do + should 'fill context with the article, request_path, user and locale' do request = mock() box = Box.create!(:owner => fast_create(Profile)) request.expects(:path).returns('/') request.expects(:params).returns({}) stubs(:request).returns(request) + stubs(:user).returns(nil) expects(:locale).returns('en') - box_decorator.expects(:select_blocks).with([], {:article => nil, :request_path => '/', :locale => 'en', :params => {}}).returns([]) + box_decorator.expects(:select_blocks).with([], {:article => nil, :request_path => '/', :locale => 'en', :params => {}, :user => nil}).returns([]) display_box_content(box, '') end + should 'filter blocks by user' do + b1 = Block.new + b2 = Block.new + arr = user_filter([b1, b2], {:display_user => 'all'}) + assert_equivalent [b1, b2], arr + end + + should 'filter blocks by logged user' do + b1 = Block.new(:display_user => 'logged') + b2 = Block.new(:display_user => 'not_logged') + stubs(:user).returns(User.new) + arr = user_filter([b1, b2], {:display_user => 'logged'}) + assert_equivalent [b1], arr + end + + should 'filter blocks by not logged user' do + b1 = Block.new(:display_user => 'logged') + b2 = Block.new(:display_user => 'not_logged') + stubs(:user).returns(User.new) + arr = user_filter([b1, b2], {:display_user => 'not_logged'}) + assert_equivalent [b2], arr + end + + should 'select blocks by user filter' do + b = Block.new + expects(:user_filter).once.returns([b]) + arr = select_blocks([], {:psarams => {}}) + assert_equal [b], arr + end + end -- libgit2 0.21.2