Commit e8b77683bbc7199c32dacfe7099e79d540d4c3cd
1 parent
c0d3fa26
Exists in
master
and in
29 other branches
Add facets and order by for searches
Showing
13 changed files
with
163 additions
and
15 deletions
Show diff stats
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> | ... | ... |
| ... | ... | @@ -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 | ... | ... |