Commit bf6b600731222473cd2013b8ec3735ee3dbc5ebb

Authored by AntonioTerceiro
1 parent 86f4b04a

ActionItem502: making it possible to hide stuff from the assets menu

and from the search.

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2290 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/public/search_controller.rb
... ... @@ -13,7 +13,7 @@ class SearchController < ApplicationController
13 13 protected
14 14  
15 15 def load_search_assets
16   - @search_in = SEARCH_IN
  16 + @search_in = where_to_search
17 17 @searching = {}
18 18 @search_in.each do |key, name|
19 19 @searching[key] = (params[:asset].blank? && (params[:find_in].nil? || params[:find_in].empty? || params[:find_in].include?(key.to_s))) || (params[:asset] == key.to_s)
... ... @@ -36,7 +36,7 @@ class SearchController < ApplicationController
36 36  
37 37 def check_valid_assets
38 38 @asset = params[:asset].to_sym
39   - if !SEARCH_IN.map(&:first).include?(@asset)
  39 + if !where_to_search.map(&:first).include?(@asset)
40 40 render :text => 'go away', :status => 403
41 41 return
42 42 end
... ... @@ -129,14 +129,16 @@ class SearchController < ApplicationController
129 129  
130 130 ######################################################
131 131  
132   - SEARCH_IN = [
133   - [ :articles, N_('Articles') ],
134   - [ :enterprises, N_('Enterprises') ],
135   - [ :people, N_('People') ],
136   - [ :communities, N_('Communities') ],
137   - [ :products, N_('Products') ],
138   - [ :events, N_('Events') ]
139   - ]
  132 + def where_to_search
  133 + [
  134 + [ :articles, N_('Articles') ],
  135 + [ :enterprises, N_('Enterprises') ],
  136 + [ :people, N_('People') ],
  137 + [ :communities, N_('Communities') ],
  138 + [ :products, N_('Products') ],
  139 + [ :events, N_('Events') ]
  140 + ].select {|key, name| !environment.enabled?('disable_asset_' + key.to_s) }
  141 + end
140 142  
141 143 def cities
142 144 @cities = City.find(:all, :order => 'name', :conditions => ['parent_id = ? and lat is not null and lng is not null', params[:state_id]])
... ... @@ -163,7 +165,7 @@ class SearchController < ApplicationController
163 165 @order = []
164 166 @names = {}
165 167  
166   - SEARCH_IN.select { |key,description| @searching[key] }.each do |key, description|
  168 + where_to_search.select { |key,description| @searching[key] }.each do |key, description|
167 169 @order << key
168 170 @results[key] = @finder.find(key, @filtered_query, calculate_find_options(key, limit, params[:page], @product_category, @region, params[:radius], params[:year], params[:month]))
169 171 @names[key] = gettext(description)
... ...
app/helpers/assets_helper.rb
... ... @@ -11,7 +11,9 @@ module AssetsHelper
11 11 [ options.merge(:asset => 'communities'), "icon-menu-community", _('Communities') ],
12 12 [ options.merge(:asset => 'events'), "icon-menu-events", _('Events') ],
13 13  
14   - ].map do |target,css_class,name|
  14 + ].select do |target, css_class, name|
  15 + !environment.enabled?('disable_asset_' + target[:asset])
  16 + end.map do |target,css_class,name|
15 17 content_tag('li',
16 18 link_to(
17 19 content_tag('span', '', :class => css_class) +
... ...
app/models/environment.rb
... ... @@ -22,8 +22,12 @@ class Environment &lt; ActiveRecord::Base
22 22 # hash, with pairs in the form <tt>'feature_name' => 'Feature name'</tt>.
23 23 def self.available_features
24 24 {
25   - 'some_feature' => _('Some feature'),
26   - 'other_feature' => _('Other feature'),
  25 + 'disable_asset_articles' => _('Disable search for articles '),
  26 + 'disable_asset_enterprises' => _('Disable search for enterprises'),
  27 + 'disable_asset_people' => _('Disable search for people'),
  28 + 'disable_asset_communities' => _('Disable search for communities'),
  29 + 'disable_asset_products' => _('Disable search for products'),
  30 + 'disable_asset_events' => _('Disable search for events'),
27 31 }
28 32 end
29 33  
... ...
test/functional/search_controller_test.rb
... ... @@ -899,6 +899,20 @@ class SearchControllerTest &lt; Test::Unit::TestCase
899 899 assert_includes assigns(:results)[:articles], art
900 900 end
901 901  
  902 + should 'know about disabled assets' do
  903 + env = mock
  904 + %w[ articles enterprises people communities events].each do |item|
  905 + env.expects(:enabled?).with('disable_asset_' + item).returns(false).at_least_once
  906 + end
  907 + env.expects(:enabled?).with('disable_asset_products').returns(true).at_least_once
  908 + @controller.stubs(:environment).returns(env)
  909 +
  910 + %w[ articles enterprises people communities events].each do |item|
  911 + assert_includes @controller.where_to_search.map(&:first), item.to_sym
  912 + end
  913 + assert_not_includes @controller.where_to_search.map(&:first), :products
  914 + end
  915 +
902 916 ##################################################################
903 917 ##################################################################
904 918  
... ...
test/unit/assets_helper_test.rb
... ... @@ -5,6 +5,9 @@ class AssetsHelperTest &lt; Test::Unit::TestCase
5 5 include AssetsHelper
6 6  
7 7 should 'generate link to assets' do
  8 + env = mock; env.stubs(:enabled?).with(anything).returns(false)
  9 + stubs(:environment).returns(env)
  10 +
8 11 %w[ articles
9 12 people
10 13 products
... ... @@ -21,6 +24,9 @@ class AssetsHelperTest &lt; Test::Unit::TestCase
21 24 end
22 25  
23 26 should 'generate link to assets with current category' do
  27 + env = mock; env.stubs(:enabled?).with(anything).returns(false)
  28 + stubs(:environment).returns(env)
  29 +
24 30 %w[ articles
25 31 people
26 32 products
... ... @@ -38,4 +44,32 @@ class AssetsHelperTest &lt; Test::Unit::TestCase
38 44 generate_assets_menu
39 45 end
40 46  
  47 + should 'generate link only to non-disabled assets' do
  48 + env = mock
  49 + env.expects(:enabled?).with('disable_asset_articles').returns(false)
  50 + env.expects(:enabled?).with('disable_asset_enterprises').returns(true)
  51 + env.expects(:enabled?).with('disable_asset_people').returns(false)
  52 + env.expects(:enabled?).with('disable_asset_communities').returns(false)
  53 + env.expects(:enabled?).with('disable_asset_products').returns(true)
  54 + env.expects(:enabled?).with('disable_asset_events').returns(false)
  55 + stubs(:environment).returns(env)
  56 +
  57 + %w[ articles
  58 + people
  59 + communities
  60 + events
  61 + ].each do |asset|
  62 + expects(:link_to).with(anything, { :controller => 'search', :action => 'assets', :asset => asset, :category_path => [ 'my-category' ]})
  63 + end
  64 + expects(:link_to).with(anything, { :controller => 'search', :action => 'assets', :asset => 'products', :category_path => [ 'my-category' ]}).never
  65 + expects(:link_to).with(anything, { :controller => 'search', :action => 'assets', :asset => 'enterprises', :category_path => [ 'my-category' ]}).never
  66 +
  67 + stubs(:_).returns('')
  68 + stubs(:content_tag).returns('')
  69 + @category = mock
  70 + @category.expects(:explode_path).returns(['my-category']).at_least_once
  71 +
  72 + generate_assets_menu
  73 + end
  74 +
41 75 end
... ...