Commit 11142e99f55d9b6fd23dee8f553bd0a7d9018d68

Authored by AntonioTerceiro
1 parent 09f41a83

ActionItem323: better layout for category index


git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1725 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/public/search_controller.rb
@@ -29,19 +29,6 @@ class SearchController < ApplicationController @@ -29,19 +29,6 @@ class SearchController < ApplicationController
29 end 29 end
30 end 30 end
31 31
32 - def action_product_category  
33 - @products = category.products  
34 - @enterprises = category.products.map{|p| p.enterprise}.flatten.uniq  
35 - @users = category.consumers  
36 - end  
37 -  
38 - def action_category  
39 - @recent_articles = @finder.recent('articles')  
40 - @recent_comments = @finder.recent('comments')  
41 - @most_commented_articles = @finder.most_commented_articles  
42 - end  
43 - alias :action_region :action_category  
44 -  
45 public 32 public
46 33
47 include SearchHelper 34 include SearchHelper
@@ -58,7 +45,7 @@ class SearchController < ApplicationController @@ -58,7 +45,7 @@ class SearchController < ApplicationController
58 ] 45 ]
59 46
60 # TODO don't hardcode like this >:-( 47 # TODO don't hardcode like this >:-(
61 - LIST_LIMIT = 10 48 + LIST_LIMIT = 20
62 49
63 def index 50 def index
64 @query = params[:query] || '' 51 @query = params[:query] || ''
@@ -76,7 +63,18 @@ class SearchController < ApplicationController @@ -76,7 +63,18 @@ class SearchController < ApplicationController
76 63
77 # view the summary of one category 64 # view the summary of one category
78 def category_index 65 def category_index
79 - send('action_' + category.class.name.underscore) 66 + @results = {}
  67 + @names = {}
  68 + [
  69 + [ :recent_people, _('Recently registered people'), @finder.recent('people') ],
  70 + [ :recent_communities, _('Recently created communities'), @finder.recent('communities') ],
  71 + [ :recent_articles, _('Recent articles'), @finder.recent('articles') ],
  72 + [ :recent_comments, _('Recent comments'), @finder.recent('comments') ],
  73 + [ :most_commented_articles, _('Most commented articles'), @finder.most_commented_articles ]
  74 + ].each do |key, name, list|
  75 + @results[key] = list
  76 + @names[key] = name
  77 + end
80 end 78 end
81 attr_reader :category 79 attr_reader :category
82 80
app/views/search/_category.rhtml
@@ -1,34 +0,0 @@ @@ -1,34 +0,0 @@
1 -  
2 -<div id="category-recent-articles">  
3 - <h2><%= _('Recent articles') %></h2>  
4 - <div class="category-innerbox">  
5 - <ul class="recent_on_cat recent_articles">  
6 - <%= render :partial => 'article', :collection => @recent_articles %>  
7 - </ul>  
8 - </div><!-- end class="category-innerbox" -->  
9 -</div><!-- end id="category-recent-articles" -->  
10 -  
11 -<div id="category-comments">  
12 -  
13 -<div id="category-recent-comments">  
14 - <h2><%= _('Recent Comments') %></h2>  
15 - <div class="category-innerbox">  
16 - <ul class="recent_on_cat recent_comments">  
17 - <% @recent_comments.each do |comment| %>  
18 - <%= render :partial => 'comment', :object => comment %>  
19 - <% end %>  
20 - </ul>  
21 - </div><!-- end class="category-innerbox" -->  
22 -</div><!-- end id="category-recent-articles" -->  
23 -  
24 -<div id="most-commented">  
25 - <h2><%= _('Most commented articles') %></h2>  
26 - <div class="category-innerbox">  
27 - <ul class="most_commented">  
28 - <%= render :partial => 'article', :collection => @most_commented_articles %>  
29 - </ul>  
30 - </div><!-- end class="category-innerbox" -->  
31 -</div><!-- end id="most-commented" -->  
32 -  
33 -</div><!-- end id="category-comments" -->  
34 -  
app/views/search/_display_results.rhtml
1 <div id="search-results" class="<%= 'only-one-result-box' if @results.size == 1 %>"> 1 <div id="search-results" class="<%= 'only-one-result-box' if @results.size == 1 %>">
2 2
3 -<% if @category %> 3 +<% if @category && !@query.blank? %>
4 <div id="search-whole-site"> 4 <div id="search-whole-site">
5 <%= link_to _('Search for "%s" in the whole site') % @query, 5 <%= link_to _('Search for "%s" in the whole site') % @query,
6 :controller => 'search', :action => 'index', :category_path => [], :query => @query %> 6 :controller => 'search', :action => 'index', :category_path => [], :query => @query %>
app/views/search/_product_category.rhtml
@@ -1,29 +0,0 @@ @@ -1,29 +0,0 @@
1 -<%= link_to(_('I consume this'), {:profile => current_user.login, :controller => 'consumed_products', :action => 'new', 'consumption[product_category_id]' => @category.id }, :method => :post) if logged_in? %>  
2 -<ul>  
3 - <li><%= n_("One product in this category.", "%{num} products in this category.", @products.size) % { :num => @products.size } %></li>  
4 - <li><%= n_("One enterprise sells products in this category.", "%{num} enterprises sells products in this category.", @enterprises.size) % { :num => @enterprises.size} %></li>  
5 - <li><%= n_("One user consumes this product.", "%{num} users consumes this product", @users.size) % {:num => @users.size} %></li>  
6 -</ul>  
7 -  
8 -<h3> <%= _('Products under this category:') %> </h3>  
9 -<ul>  
10 - <% @products.each do |p| %>  
11 - <li>  
12 - <%= image_tag p.image.public_filename(:thumb) if p.image%>  
13 - <%= link_to_product(p) %> <br/>  
14 - <% if p.price %>  
15 - <%= _('Price: %d') % p.price %> <br/>  
16 - <% end %>  
17 - <%= _('Enterprise:') %> <%= link_to_homepage p.enterprise.name, p.enterprise.identifier %> <br/><br/>  
18 - </li>  
19 - <% end %>  
20 -</ul>  
21 -  
22 -<h3><%= _('Users that consumes products in this category:') %></h3>  
23 -  
24 -<% @users.each do |u| %>  
25 - <p>  
26 - <%= image_tag u.image.public_filename(:thumb) if u.image %> <br>  
27 - <%= link_to_homepage(u.name, u.identifier) %>  
28 - </p>  
29 -<% end %>  
app/views/search/_region.rhtml
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -_category.rhtml  
2 \ No newline at end of file 0 \ No newline at end of file
app/views/search/assets.rhtml
1 -<h2><%= @category ? (_('%{asset_name} in %{category}') % { :asset_name => @asset_name, :category => @category.full_name}) : @asset_name %></h2> 1 +<h1><%= @category ? (_('%{asset_name} in %{category}') % { :asset_name => @asset_name, :category => @category.name}) : @asset_name %></h1>
2 2
3 <%= render :partial => 'display_results' %> 3 <%= render :partial => 'display_results' %>
app/views/search/category_index.rhtml
@@ -6,10 +6,8 @@ @@ -6,10 +6,8 @@
6 6
7 <h1 id="category-name"><%= _('Category: %s') % @category.name %></h1> 7 <h1 id="category-name"><%= _('Category: %s') % @category.name %></h1>
8 8
9 - <div class="category_itens">  
10 - <%= render :partial => @category.class.name.underscore %>  
11 - </div><!-- end class="category_itens" -->  
12 - 9 + <%= render :partial => 'display_results' %>
  10 +
13 <div id="category-childs"> 11 <div id="category-childs">
14 <h2> <%= _('Sub-categories') %> </h2> 12 <h2> <%= _('Sub-categories') %> </h2>
15 <% if @category.children.empty? %> 13 <% if @category.children.empty? %>
test/functional/search_controller_test.rb
@@ -433,46 +433,62 @@ class SearchControllerTest &lt; Test::Unit::TestCase @@ -433,46 +433,62 @@ class SearchControllerTest &lt; Test::Unit::TestCase
433 end 433 end
434 434
435 should 'list recent articles in the category' do 435 should 'list recent articles in the category' do
436 - @controller.expects(:category).returns(@category).at_least_once  
437 recent = [] 436 recent = []
438 - finder = CategoryFinder.new(@category)  
439 - finder.expects(:recent).with('comments').returns(recent)  
440 - finder.expects(:recent).with('articles').returns(recent)  
441 - CategoryFinder.expects(:new).with(@category).returns(finder) 437 + finger = CategoryFinder.new(@category)
  438 + finger.expects(:recent).with(anything).at_least_once
  439 + finger.expects(:recent).with('articles').returns(recent)
  440 + CategoryFinder.expects(:new).with(@category).returns(finger)
442 441
443 get :category_index, :category_path => [ 'my-category' ] 442 get :category_index, :category_path => [ 'my-category' ]
444 - assert_same recent, assigns(:recent_articles) 443 + assert_same recent, assigns(:results)[:recent_articles]
445 end 444 end
446 445
447 should 'list recent comments in the category' do 446 should 'list recent comments in the category' do
448 - @controller.expects(:category).returns(@category).at_least_once  
449 recent = [] 447 recent = []
450 - finder = CategoryFinder.new(@category)  
451 - finder.expects(:recent).with('comments').returns(recent)  
452 - finder.expects(:recent).with('articles').returns(recent)  
453 - CategoryFinder.expects(:new).with(@category).returns(finder) 448 + finger = CategoryFinder.new(@category)
  449 + finger.expects(:recent).with(anything).at_least_once
  450 + finger.expects(:recent).with('comments').returns(recent)
  451 + CategoryFinder.expects(:new).with(@category).returns(finger)
454 452
455 get :category_index, :category_path => [ 'my-category' ] 453 get :category_index, :category_path => [ 'my-category' ]
456 - assert_same recent, assigns(:recent_comments) 454 + assert_same recent, assigns(:results)[:recent_comments]
457 end 455 end
458 456
459 should 'list most commented articles in the category' do 457 should 'list most commented articles in the category' do
460 - @controller.expects(:category).returns(@category).at_least_once  
461 most_commented = [] 458 most_commented = []
462 - finder = CategoryFinder.new(@category)  
463 - finder.expects(:most_commented_articles).returns(most_commented)  
464 - CategoryFinder.expects(:new).with(@category).returns(finder) 459 + finger = CategoryFinder.new(@category)
  460 + finger.expects(:most_commented_articles).returns(most_commented)
  461 + CategoryFinder.expects(:new).with(@category).returns(finger)
465 462
466 get :category_index, :category_path => [ 'my-category' ] 463 get :category_index, :category_path => [ 'my-category' ]
467 - assert_same most_commented, assigns(:most_commented_articles) 464 + assert_same most_commented, assigns(:results)[:most_commented_articles]
468 end 465 end
469 466
470 - should 'display category of products' do  
471 - cat = ProductCategory.create!(:name => 'Food', :environment => Environment.default)  
472 - ent = Enterprise.create!(:name => 'Enterprise test', :identifier => 'enterprise_test')  
473 - p = cat.products.create!(:name => 'product test', :enterprise => ent)  
474 - get :category_index, :category_path => cat.path.split('/')  
475 - assert_includes assigns(:products), p 467 + should 'list recently registered people in the category' do
  468 + recent_people = []
  469 + finger = CategoryFinder.new(@category)
  470 + finger.expects(:recent).with(anything).at_least_once
  471 + finger.expects(:recent).with('people').returns(recent_people)
  472 + CategoryFinder.expects(:new).with(@category).returns(finger)
  473 +
  474 + get :category_index, :category_path => [ 'my-category' ]
  475 + assert_same recent_people, assigns(:results)[:recent_people]
  476 + end
  477 +
  478 + should 'list recently registered communities in the category' do
  479 + recent_communities = []
  480 + finger = CategoryFinder.new(@category)
  481 + finger.expects(:recent).with(anything).at_least_once
  482 + finger.expects(:recent).with('communities').returns(recent_communities)
  483 + CategoryFinder.expects(:new).with(@category).returns(finger)
  484 +
  485 + get :category_index, :category_path => [ 'my-category' ]
  486 + assert_same recent_communities, assigns(:results)[:recent_communities]
  487 + end
  488 +
  489 + should 'not list "Search for ..." in category_index' do
  490 + get :category_index, :category_path => [ 'my-category' ]
  491 + assert_no_tag :content => /Search for ".*" in the whole site/
476 end 492 end
477 493
478 # SECURITY 494 # SECURITY