Commit e8b77683bbc7199c32dacfe7099e79d540d4c3cd

Authored by Braulio Bhavamitra
1 parent c0d3fa26

Add facets and order by for searches

app/models/article.rb
... ... @@ -125,8 +125,6 @@ class Article < ActiveRecord::Base
125 125  
126 126 acts_as_versioned
127 127  
128   - acts_as_searchable :additional_fields => [ :comment_data ]
129   -
130 128 def comment_data
131 129 comments.map {|item| [item.title, item.body].join(' ') }.join(' ')
132 130 end
... ... @@ -560,6 +558,32 @@ class Article < ActiveRecord::Base
560 558 end
561 559  
562 560 private
  561 + def f_type
  562 + self.class.to_s
  563 + end
  564 + def f_publish_date
  565 + self.published_at
  566 + end
  567 + def f_profile_type
  568 + self.profile.class.to_s
  569 + end
  570 + def f_category
  571 + self.categories.collect(&:name)
  572 + end
  573 + public
  574 +
  575 + acts_as_faceted :fields => {
  576 + :f_type => {:label => _('Type')},
  577 + :f_publish_date => {:label => _('Published')},
  578 + :f_profile_type => {:label => _('Type of profile')},
  579 + :f_category => {:label => _('Categories')}},
  580 + :order => [:f_type, :f_publish_date, :f_profile_type, :f_category]
  581 +
  582 + acts_as_searchable :additional_fields => [ :comment_data, {:name => {:type => :string, :as => :name_sort, :boost => 5.0}} ] + facets.keys.map{|i| {i => :facet}},
  583 + :include => [:profile],
  584 + :facets => facets.keys
  585 +
  586 + private
563 587  
564 588 def sanitize_tag_list
565 589 sanitizer = HTML::FullSanitizer.new
... ...
app/models/category.rb
... ... @@ -64,6 +64,10 @@ class Category < ActiveRecord::Base
64 64 results
65 65 end
66 66  
  67 + def root_parent
  68 + parent_id.nil? ? self : Category.find_by_id(parent_id).root_parent
  69 + end
  70 +
67 71 def is_leaf_displayable_in_menu?
68 72 return false if self.display_in_menu == false
69 73 self.children.find(:all, :conditions => {:display_in_menu => true}).empty?
... ...
app/models/community.rb
... ... @@ -79,4 +79,25 @@ class Community < Organization
79 79 {:title => __('Community Info and settings'), :icon => 'edit-profile-group'}
80 80 end
81 81  
  82 + private
  83 + def f_territory
  84 + categories.find(:all, :conditions => {:parent_id => 5}).collect(&:name)
  85 + end
  86 + def f_topic
  87 + categories.find(:all, :conditions => {:parent_id => 1}).collect(&:name)
  88 + end
  89 + def f_network
  90 + categories.find(:all, :conditions => {:parent_id => 9}).collect(&:name)
  91 + end
  92 + public
  93 +
  94 + acts_as_faceted :fields => {
  95 + :f_territory => {:label => _('Territories')},
  96 + :f_topic => {:label => _('Thematics')},
  97 + :f_network => {:label => _('Networks')}},
  98 + :order => [:f_territory, :f_topic, :f_network]
  99 +
  100 + acts_as_searchable :additional_fields => [ :extra_data_for_index, {:name => {:type => :string, :as => :name_sort, :boost => 5.0}} ] + facets.keys.map{|i| {i => :facet}},
  101 + :facets => facets.keys
  102 +
82 103 end
... ...
app/models/enterprise.rb
... ... @@ -164,6 +164,27 @@ class Enterprise < Organization
164 164  
165 165 settings_items :enable_contact_us, :type => :boolean, :default => true
166 166  
  167 + private
  168 + def f_territory
  169 + categories.find(:all, :conditions => {:parent_id => 5}).collect(&:name)
  170 + end
  171 + def f_topic
  172 + categories.find(:all, :conditions => {:parent_id => 1}).collect(&:name)
  173 + end
  174 + def f_network
  175 + categories.find(:all, :conditions => {:parent_id => 9}).collect(&:name)
  176 + end
  177 + public
  178 +
  179 + acts_as_faceted :fields => {
  180 + :f_territory => {:label => _('Territories')},
  181 + :f_topic => {:label => _('Thematics')},
  182 + :f_network => {:label => _('Networks')}},
  183 + :order => [:f_territory, :f_topic, :f_network]
  184 +
  185 + acts_as_searchable :additional_fields => [ :extra_data_for_index, {:name => {:type => :string, :as => :name_sort, :boost => 5.0}} ] + facets.keys.map{|i| {i => :facet}},
  186 + :facets => facets.keys
  187 +
167 188 def enable_contact?
168 189 enable_contact_us
169 190 end
... ...
app/models/environment.rb
... ... @@ -353,11 +353,11 @@ class Environment < ActiveRecord::Base
353 353 end
354 354  
355 355 def terminology
356   - if self.settings[:terminology]
357   - self.settings[:terminology].constantize.instance
358   - else
  356 + #if self.settings[:terminology]
  357 + #self.settings[:terminology].constantize.instance
  358 + #else
359 359 Noosfero.terminology
360   - end
  360 + #end
361 361 end
362 362  
363 363 def terminology=(value)
... ...
app/models/person.rb
... ... @@ -414,6 +414,27 @@ class Person < Profile
414 414 user.save!
415 415 end
416 416  
  417 + private
  418 + def f_territory
  419 + categories.find(:all, :conditions => {:parent_id => 5}).collect(&:name)
  420 + end
  421 + def f_topic
  422 + categories.find(:all, :conditions => {:parent_id => 1}).collect(&:name)
  423 + end
  424 + def f_network
  425 + categories.find(:all, :conditions => {:parent_id => 9}).collect(&:name)
  426 + end
  427 + public
  428 +
  429 + acts_as_faceted :fields => {
  430 + :f_territory => {:label => _('Territories')},
  431 + :f_topic => {:label => _('Thematics')},
  432 + :f_network => {:label => _('Networks')}},
  433 + :order => [:f_territory, :f_topic, :f_network]
  434 +
  435 + acts_as_searchable :additional_fields => [ :extra_data_for_index, {:name => {:type => :string, :as => :name_sort, :boost => 5.0}} ] + facets.keys.map{|i| {i => :facet}},
  436 + :facets => facets.keys
  437 +
417 438 protected
418 439  
419 440 def followed_by?(profile)
... ...
app/models/profile.rb
... ... @@ -70,8 +70,6 @@ class Profile < ActiveRecord::Base
70 70  
71 71 acts_as_having_boxes
72 72  
73   - acts_as_searchable :additional_fields => [ :extra_data_for_index ]
74   -
75 73 acts_as_taggable
76 74  
77 75 def self.qualified_column_names
... ... @@ -177,6 +175,15 @@ class Profile < ActiveRecord::Base
177 175  
178 176 has_many :abuse_complaints, :foreign_key => 'requestor_id'
179 177  
  178 + def top_level_categorization
  179 + ret = {}
  180 + self.profile_categorizations.each do |c|
  181 + p = c.category.root_parent
  182 + ret[p] = (ret[p] || []) + [c.category]
  183 + end
  184 + ret
  185 + end
  186 +
180 187 def interests
181 188 categories.select {|item| !item.is_a?(Region)}
182 189 end
... ...
app/views/search/_article.rhtml
1   -<li class="<%= icon_for_article(article) %>">
2   - <strong><%= link_to(article.title, article.view_url) %></strong>
3   - <div class="item_meta">
  1 +<li class="article-item <%= icon_for_article(article) %>">
  2 + <strong><%= link_to(article.title, article.url) %></strong>
  3 + <div class="article-item-meta">
  4 + <% if article.body %>
  5 + <% body_stripped = strip_tags(article.body.to_s) %>
  6 + <br /><span class="article-item-body"><%= excerpt(body_stripped, body_stripped.first(3), 300) %></span><br />
  7 + <% end %>
  8 +
  9 + <br /><span><%= _('Tags: ') + article.tags.join(', ') if !article.tags.empty? %></span>
  10 +
  11 + <br /><span><%=_('Author: ') %><%= link_to(article.profile.name, profile_path(:profile => article.profile)) %></span>
  12 +
  13 + <br />
4 14 <% if article.last_changed_by %>
5   - <span class="cat_item_by">
6   - <%= _('by %s') % link_to(article.last_changed_by.name, article.last_changed_by.url) %>
7   - </span>
  15 + <span class="cat_item_by"><%= _('by %s') % link_to(article.last_changed_by.name, article.last_changed_by.url) %></span>
8 16 <% end %>
9 17 <span class="cat_item_update"><%= _('Last update: %s.') % show_date(article.updated_at) %></span>
  18 +
  19 + <br />
10 20 </div>
11 21 </li>
... ...
app/views/search/_enterprise.rhtml 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +<% if params[:query].blank? %>
  2 + <%= profile_image_link enterprise, :portrait %>
  3 +<% else %>
  4 + <div class="enterprise-result">
  5 + <%= profile_image_link enterprise, :portrait %>
  6 + <span><%= enterprise.name %></span>
  7 + <span><%= _("Region: ") + enterprise.region.name if enterprise.region %></span>
  8 + <span><%= enterprise.description %></span>
  9 +
  10 + <div class="enterprise-categorization">
  11 + <% enterprise.top_level_categorization.each do |parent, children| %>
  12 + <span class="enterprise-categorization-parent"><%= parent.name + ':' %></span>
  13 + <span class="enterprise-categorization-children"><%= children.collect(&:name).join(', ') %></span>
  14 + <% end %>
  15 + </div>
  16 + </div>
  17 +<% end %>
... ...
app/views/search/articles.rhtml
... ... @@ -9,6 +9,12 @@
9 9  
10 10 <%= render :partial => 'search_form', :locals => { :form_title => @query.blank? ? _('Search') : _("Refine your search"), :simple_search => true } %>
11 11  
  12 +<% if !@query.blank? %>
  13 + <%= facets_menu(:articles, @facets[:articles]) %>
  14 +<% end %>
  15 +
  16 +<%= render :partial => 'results_header', :locals => { :asset => :articles, :results => @results[:articles] } %>
  17 +
12 18 <%# FIXME ARMENGUE %>
13 19 <%= display_results(false) %>
14 20  
... ...
app/views/search/communities.rhtml
... ... @@ -15,6 +15,11 @@
15 15 <% end %>
16 16 <% end %>
17 17  
  18 +<% if !@query.blank? %>
  19 + <%= facets_menu(:communities, @facets[:communities]) %>
  20 +<% end %>
  21 +<%= render :partial => 'results_header', :locals => { :asset => :communities, :results => @results[:communities] } %>
  22 +
18 23 <div id='search-results-and-pages'>
19 24 <%# FIXME ARMENGUE %>
20 25 <%= display_results(false) %>
... ...
app/views/search/enterprises.rhtml
... ... @@ -26,9 +26,15 @@
26 26 <% end %>
27 27  
28 28 <% cache(:action => 'assets', :asset => 'enterprises', :category_path => params[:category_path], :query => @query, :product_category => @product_category, :region => @region, :radius => params[:radius]) do %>
29   - <%= product_categories_menu(:enterprises, @product_category, @result_ids) %>
  29 + <% if @query.blank? %>
  30 + <%= product_categories_menu(:enterprises, @product_category, @result_ids) %>
  31 + <% else %>
  32 + <%= facets_menu(:enterprises, @facets[:enterprises]) %>
  33 + <% end %>
30 34 <% end %>
31 35  
  36 +<%= render :partial => 'results_header', :locals => { :asset => :enterprises, :results => @results[:enterprises] } %>
  37 +
32 38 <%= display_results %>
33 39  
34 40 <% if @categories_menu %>
... ...
app/views/search/people.rhtml
... ... @@ -9,6 +9,12 @@
9 9  
10 10 <%= render :partial => 'search_form', :locals => { :form_title => @query.blank? ? _('Search') : _("Refine your search"), :simple_search => true } %>
11 11  
  12 +<% if !@query.blank? %>
  13 + <%= facets_menu(:people, @facets[:people]) %>
  14 +<% end %>
  15 +
  16 +<%= render :partial => 'results_header', :locals => { :asset => :people, :results => @results[:people] } %>
  17 +
12 18 <%# FIXME ARMENGUE %>
13 19 <%= display_results(false) %>
14 20  
... ...