Commit 22d3d9d34034136b344cd6b58270a6b49bf61dbd
1 parent
bce11413
Exists in
master
and in
29 other branches
Added a filter to display blocks depending on user
Showing
6 changed files
with
80 additions
and
3 deletions
Show diff stats
app/helpers/boxes_helper.rb
@@ -70,7 +70,18 @@ module BoxesHelper | @@ -70,7 +70,18 @@ module BoxesHelper | ||
70 | end | 70 | end |
71 | 71 | ||
72 | def select_blocks(arr, context) | 72 | def select_blocks(arr, context) |
73 | - arr | 73 | + filter = (context && context[:params] && context[:params][:filter]) || {} |
74 | + user_filter(arr, filter) | ||
75 | + end | ||
76 | + | ||
77 | + def user_filter(arr, filter) | ||
78 | + if filter[:display_user]=='not_logged' | ||
79 | + arr.select { |block| block.display_to_user?(nil) } | ||
80 | + elsif filter[:display_user]=='logged' | ||
81 | + arr.select { |block| block.display_to_user?(user) } | ||
82 | + else | ||
83 | + arr | ||
84 | + end | ||
74 | end | 85 | end |
75 | 86 | ||
76 | def display_block(block, main_content = nil) | 87 | def display_block(block, main_content = nil) |
app/views/box_organizer/index.rhtml
@@ -4,3 +4,11 @@ | @@ -4,3 +4,11 @@ | ||
4 | <%= colorbox_button('add', _('Add a block'), { :action => 'add_block' }) %> | 4 | <%= colorbox_button('add', _('Add a block'), { :action => 'add_block' }) %> |
5 | <%= button(:back, _('Back to control panel'), :controller => (profile.nil? ? 'admin_panel': 'profile_editor')) %> | 5 | <%= button(:back, _('Back to control panel'), :controller => (profile.nil? ? 'admin_panel': 'profile_editor')) %> |
6 | <% end %> | 6 | <% end %> |
7 | + | ||
8 | +<% form_tag({:action => :index}) do %> | ||
9 | + <div class="user-filter"> | ||
10 | + <span class="label"><%= _('Display blocks to:') %> </span> | ||
11 | + <%= 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();") %> | ||
12 | + </div> | ||
13 | + <div style="clear: both"></div> | ||
14 | +<% end %> |
public/stylesheets/application.css
@@ -6488,3 +6488,11 @@ ul.article-versions li { | @@ -6488,3 +6488,11 @@ ul.article-versions li { | ||
6488 | font-size: 13px; | 6488 | font-size: 13px; |
6489 | padding: 3px 0px; | 6489 | padding: 3px 0px; |
6490 | } | 6490 | } |
6491 | + | ||
6492 | +.user-filter { | ||
6493 | + float: right; | ||
6494 | +} | ||
6495 | + | ||
6496 | +.design-menu { | ||
6497 | + float: left; | ||
6498 | +} |
test/functional/environment_design_controller_test.rb
@@ -366,4 +366,16 @@ class EnvironmentDesignControllerTest < ActionController::TestCase | @@ -366,4 +366,16 @@ class EnvironmentDesignControllerTest < ActionController::TestCase | ||
366 | assert @controller.instance_variable_get('@side_block_types').include?(CustomBlock8) | 366 | assert @controller.instance_variable_get('@side_block_types').include?(CustomBlock8) |
367 | end | 367 | end |
368 | 368 | ||
369 | + should 'display user filter for blocks' do | ||
370 | + login_as(create_admin_user(Environment.default)) | ||
371 | + get :index | ||
372 | + assert_tag 'div', :attributes => {:class => 'user-filter'} | ||
373 | + end | ||
374 | + | ||
375 | + should 'display user filter for blocks with selected value' do | ||
376 | + login_as(create_admin_user(Environment.default)) | ||
377 | + get :index, :filter => {:display_user => 'logged'} | ||
378 | + assert_tag 'select', :attributes => {:name => 'filter[display_user]'}, :descendant => {:tag => 'option', :attributes => {:value => 'logged', :selected => true}} | ||
379 | + end | ||
380 | + | ||
369 | end | 381 | end |
test/functional/profile_design_controller_test.rb
@@ -744,4 +744,9 @@ class ProfileDesignControllerTest < ActionController::TestCase | @@ -744,4 +744,9 @@ class ProfileDesignControllerTest < ActionController::TestCase | ||
744 | end | 744 | end |
745 | end | 745 | end |
746 | 746 | ||
747 | + should 'display user filter for blocks' do | ||
748 | + get :index, :profile => 'designtestuser' | ||
749 | + assert_tag 'div', :attributes => {:class => 'user-filter'} | ||
750 | + end | ||
751 | + | ||
747 | end | 752 | end |
test/unit/boxes_helper_test.rb
@@ -54,6 +54,7 @@ class BoxesHelperTest < ActiveSupport::TestCase | @@ -54,6 +54,7 @@ class BoxesHelperTest < ActiveSupport::TestCase | ||
54 | expects(:display_block).with(b, '') | 54 | expects(:display_block).with(b, '') |
55 | stubs(:request).returns(request) | 55 | stubs(:request).returns(request) |
56 | stubs(:block_target).returns('') | 56 | stubs(:block_target).returns('') |
57 | + stubs(:user).returns(nil) | ||
57 | expects(:locale).returns('en') | 58 | expects(:locale).returns('en') |
58 | with_box_decorator self do | 59 | with_box_decorator self do |
59 | display_box_content(box, '') | 60 | display_box_content(box, '') |
@@ -73,6 +74,7 @@ class BoxesHelperTest < ActiveSupport::TestCase | @@ -73,6 +74,7 @@ class BoxesHelperTest < ActiveSupport::TestCase | ||
73 | box.save! | 74 | box.save! |
74 | expects(:display_block).with(b, '').never | 75 | expects(:display_block).with(b, '').never |
75 | stubs(:request).returns(request) | 76 | stubs(:request).returns(request) |
77 | + stubs(:user).returns(nil) | ||
76 | stubs(:block_target).returns('') | 78 | stubs(:block_target).returns('') |
77 | expects(:locale).returns('en') | 79 | expects(:locale).returns('en') |
78 | display_box_content(box, '') | 80 | display_box_content(box, '') |
@@ -105,16 +107,47 @@ class BoxesHelperTest < ActiveSupport::TestCase | @@ -105,16 +107,47 @@ class BoxesHelperTest < ActiveSupport::TestCase | ||
105 | assert block_css_classes(Block.new(:display => 'never')).split.any? { |item| item == 'invisible-block'} | 107 | assert block_css_classes(Block.new(:display => 'never')).split.any? { |item| item == 'invisible-block'} |
106 | end | 108 | end |
107 | 109 | ||
108 | - should 'fill context with the article, request_path and locale' do | 110 | + should 'fill context with the article, request_path, user and locale' do |
109 | request = mock() | 111 | request = mock() |
110 | box = Box.create!(:owner => fast_create(Profile)) | 112 | box = Box.create!(:owner => fast_create(Profile)) |
111 | request.expects(:path).returns('/') | 113 | request.expects(:path).returns('/') |
112 | request.expects(:params).returns({}) | 114 | request.expects(:params).returns({}) |
113 | stubs(:request).returns(request) | 115 | stubs(:request).returns(request) |
116 | + stubs(:user).returns(nil) | ||
114 | expects(:locale).returns('en') | 117 | expects(:locale).returns('en') |
115 | - box_decorator.expects(:select_blocks).with([], {:article => nil, :request_path => '/', :locale => 'en', :params => {}}).returns([]) | 118 | + box_decorator.expects(:select_blocks).with([], {:article => nil, :request_path => '/', :locale => 'en', :params => {}, :user => nil}).returns([]) |
116 | 119 | ||
117 | display_box_content(box, '') | 120 | display_box_content(box, '') |
118 | end | 121 | end |
119 | 122 | ||
123 | + should 'filter blocks by user' do | ||
124 | + b1 = Block.new | ||
125 | + b2 = Block.new | ||
126 | + arr = user_filter([b1, b2], {:display_user => 'all'}) | ||
127 | + assert_equivalent [b1, b2], arr | ||
128 | + end | ||
129 | + | ||
130 | + should 'filter blocks by logged user' do | ||
131 | + b1 = Block.new(:display_user => 'logged') | ||
132 | + b2 = Block.new(:display_user => 'not_logged') | ||
133 | + stubs(:user).returns(User.new) | ||
134 | + arr = user_filter([b1, b2], {:display_user => 'logged'}) | ||
135 | + assert_equivalent [b1], arr | ||
136 | + end | ||
137 | + | ||
138 | + should 'filter blocks by not logged user' do | ||
139 | + b1 = Block.new(:display_user => 'logged') | ||
140 | + b2 = Block.new(:display_user => 'not_logged') | ||
141 | + stubs(:user).returns(User.new) | ||
142 | + arr = user_filter([b1, b2], {:display_user => 'not_logged'}) | ||
143 | + assert_equivalent [b2], arr | ||
144 | + end | ||
145 | + | ||
146 | + should 'select blocks by user filter' do | ||
147 | + b = Block.new | ||
148 | + expects(:user_filter).once.returns([b]) | ||
149 | + arr = select_blocks([], {:psarams => {}}) | ||
150 | + assert_equal [b], arr | ||
151 | + end | ||
152 | + | ||
120 | end | 153 | end |