Commit 31849db7f8d8b4cb72aa6b6b28bd5d75c35523d6

Authored by JoenioCosta
1 parent 7046d391

ActionItem252: only categories with more than X entries should show up in the top menu

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1827 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/models/category.rb
@@ -47,7 +47,13 @@ class Category < ActiveRecord::Base @@ -47,7 +47,13 @@ class Category < ActiveRecord::Base
47 end 47 end
48 48
49 def total_items 49 def total_items
  50 + # FIXME this can be SLOW (??)
50 articles.count + comments.count + enterprises.count + people.count + communities.count + products.count 51 articles.count + comments.count + enterprises.count + people.count + communities.count + products.count
51 end 52 end
52 53
  54 + def display_in_menu?
  55 + # FIXME don't hardcode like this. Should be a setting of the environment, maybe
  56 + total_items >= 10
  57 + end
  58 +
53 end 59 end
app/views/profile_editor/index.rhtml
@@ -14,8 +14,6 @@ @@ -14,8 +14,6 @@
14 14
15 <%= file_manager_button(_('Manage Content'), 'icons-app/cms.png', :controller => 'cms') %> 15 <%= file_manager_button(_('Manage Content'), 'icons-app/cms.png', :controller => 'cms') %>
16 16
17 - <%= file_manager_button(_('My Interests'), 'icons-app/categories.png', :controller => 'profile_editor', :action => 'edit_categories') %>  
18 -  
19 <%= file_manager_button(_('Change Password'), 'icons-app/change-password.png', :controller => 'account', :action => 'change_password') if profile.person? %> 17 <%= file_manager_button(_('Change Password'), 'icons-app/change-password.png', :controller => 'account', :action => 'change_password') if profile.person? %>
20 18
21 <%= file_manager_button(_('Manage friends'), 'icons-app/friends.png', :controller => 'friends', :action => 'index') if profile.person? %> 19 <%= file_manager_button(_('Manage friends'), 'icons-app/friends.png', :controller => 'friends', :action => 'index') if profile.person? %>
app/views/shared/categories_menu.rhtml
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <li id="category<%= item.display_color %>"<%= ' class="active"' if (@category && (@category.top_ancestor == item)) %>> 4 <li id="category<%= item.display_color %>"<%= ' class="active"' if (@category && (@category.top_ancestor == item)) %>>
5 <%= item.name %> 5 <%= item.name %>
6 <ul> 6 <ul>
7 - <% item.all_children.each do |child| %> 7 + <% item.all_children.select{|i| i.display_in_menu?}.each do |child| %>
8 <% if (@controller.controller_name == 'search') && (@controller.action_name == 'assets') %> 8 <% if (@controller.controller_name == 'search') && (@controller.action_name == 'assets') %>
9 <li><%= link_to(content_tag('span', child.name), :controller => 'search', :action => 'assets', :asset => params[:asset], :category_path => child.explode_path) %></li> 9 <li><%= link_to(content_tag('span', child.name), :controller => 'search', :action => 'assets', :asset => params[:asset], :category_path => child.explode_path) %></li>
10 <% else %> 10 <% else %>
test/functional/application_controller_test.rb
@@ -127,4 +127,16 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase @@ -127,4 +127,16 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase
127 assert_no_tag :tag => 'div', :attributes => { :id => 'boxes', :class => 'boxes' } 127 assert_no_tag :tag => 'div', :attributes => { :id => 'boxes', :class => 'boxes' }
128 end 128 end
129 129
  130 + # FIXME why this not work???
  131 + should 'display categories in menu' do
  132 + c1 = Category.create!(:name => 'category 1', :environment => Environment.default)
  133 + c2 = Category.create!(:name => 'category 2', :environment => Environment.default, :parent => c1)
  134 + c3 = Category.create!(:name => 'category 3', :environment => Environment.default, :parent => c1)
  135 + c2.expects(:display_in_menu?).returns(true)
  136 + c3.expects(:display_in_menu?).returns(false)
  137 + get :index
  138 + assert_tag :tag => 'a', :attributes => { :content => /category 2/ }
  139 + assert_no_tag :tag => 'a', :attributes => { :content => /category 3/ }
  140 + end
  141 +
130 end 142 end
test/unit/category_test.rb
@@ -385,4 +385,16 @@ class CategoryTest &lt; Test::Unit::TestCase @@ -385,4 +385,16 @@ class CategoryTest &lt; Test::Unit::TestCase
385 end 385 end
386 end 386 end
387 387
  388 + should 'display in menu' do
  389 + c = Category.create!(:name => 'test category1', :environment => Environment.default)
  390 + c.expects(:total_items).returns(10)
  391 + assert c.display_in_menu?
  392 + end
  393 +
  394 + should 'not display in menu' do
  395 + c = Category.create!(:name => 'test category1', :environment => Environment.default)
  396 + c.expects(:total_items).returns(1)
  397 + assert !c.display_in_menu?
  398 + end
  399 +
388 end 400 end