Commit 2f6c86d99fbc7593729027f4f1ceb8fdc6b07013

Authored by Rodrigo Souto
1 parent 7eb7d4bf

find_by_contents: pass the responsability of filter to the engines

Since there are plugins that need to receive the scope clean (that is
without filters applied to it) and since the plugin has the power to not
apply the filter when conveys it (also rewriting the interface to keep
its consistency), I decided to pass the reposability of applying any
filter provided by the core to the engines.

Nevertheless, if the plugin returns nil (that's the same that it would
return if it was disabled) the core will deal with the filters through
the default way (that is without any engine).
app/controllers/application_controller.rb
@@ -181,8 +181,9 @@ class ApplicationController < ActionController::Base @@ -181,8 +181,9 @@ class ApplicationController < ActionController::Base
181 private 181 private
182 182
183 def fallback_find_by_contents(asset, scope, query, paginate_options, options) 183 def fallback_find_by_contents(asset, scope, query, paginate_options, options)
184 - return {:results => scope.paginate(paginate_options)} if query.blank?  
185 - {:results => scope.like_search(query).paginate(paginate_options)} 184 + scope = scope.like_search(query) unless query.blank?
  185 + scope = scope.send(options[:filter]) unless options[:filter].blank?
  186 + {:results => scope.paginate(paginate_options)}
186 end 187 end
187 188
188 end 189 end
app/controllers/public/search_controller.rb
@@ -214,13 +214,6 @@ class SearchController < PublicController @@ -214,13 +214,6 @@ class SearchController < PublicController
214 @searches[@asset] = find_by_contents(@asset, @scope, @query, paginate_options, {:category => @category, :filter => @filter}) 214 @searches[@asset] = find_by_contents(@asset, @scope, @query, paginate_options, {:category => @category, :filter => @filter})
215 end 215 end
216 216
217 - def find_by_contents asset, scope, query, paginate_options={:page => 1}, options={}  
218 - # only apply fitlers to empty query, sorting is engine specific  
219 - scope = scope.send(options[:filter]) if options[:filter] and @empty_query  
220 -  
221 - super asset, scope, query, paginate_options, options  
222 - end  
223 -  
224 private 217 private
225 218
226 def visible_profiles(klass, *extra_relations) 219 def visible_profiles(klass, *extra_relations)
plugins/pg_search/lib/pg_search_plugin.rb
@@ -9,8 +9,9 @@ class PgSearchPlugin < Noosfero::Plugin @@ -9,8 +9,9 @@ class PgSearchPlugin < Noosfero::Plugin
9 end 9 end
10 10
11 def find_by_contents(asset, scope, query, paginate_options={}, options={}) 11 def find_by_contents(asset, scope, query, paginate_options={}, options={})
12 - return if query.blank?  
13 - {:results => scope.pg_search_plugin_search(query).paginate(paginate_options)} 12 + scope = scope.pg_search_plugin_search(query) unless query.blank?
  13 + scope = scope.send(options[:filter]) unless options[:filter]
  14 + {:results => scope.paginate(paginate_options)}
14 end 15 end
15 16
16 end 17 end
plugins/solr/lib/solr_plugin.rb
@@ -27,7 +27,9 @@ class SolrPlugin < Noosfero::Plugin @@ -27,7 +27,9 @@ class SolrPlugin < Noosfero::Plugin
27 category = options[:category] 27 category = options[:category]
28 empty_query = empty_query? query, category 28 empty_query = empty_query? query, category
29 29
30 - return unless solr_search? empty_query, klass 30 + unless solr_search? empty_query, klass
  31 + return options[:filter] ? {:results => scope.send(options[:filter]).paginate(paginate_options)} : nil
  32 + end
31 33
32 solr_options = solr_options(class_asset(klass), category) 34 solr_options = solr_options(class_asset(klass), category)
33 solr_options[:filter_queries] ||= [] 35 solr_options[:filter_queries] ||= []