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