From d6de9190770c486013d5aa42578ad6550d553d3b Mon Sep 17 00:00:00 2001 From: Braulio Bhavamitra Date: Mon, 30 May 2011 18:10:18 +0000 Subject: [PATCH] Add order_by helper and parameter --- app/controllers/public/search_controller.rb | 8 +++++--- app/helpers/search_helper.rb | 7 +++++++ app/models/category_finder.rb | 5 ++++- app/models/environment_finder.rb | 4 +++- public/stylesheets/application.css | 4 ++++ 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/controllers/public/search_controller.rb b/app/controllers/public/search_controller.rb index baff96f..7b8c9b5 100644 --- a/app/controllers/public/search_controller.rb +++ b/app/controllers/public/search_controller.rb @@ -89,13 +89,13 @@ class SearchController < PublicController # REFACTOR DUPLICATED CODE inner loop doing the same thing that outter loop if !@query.blank? || @region && !params[:radius].blank? - ret = @noosfero_finder.find(asset, @query, calculate_find_options(asset, nil, params[:page], @product_category, @region, params[:radius], params[:year], params[:month]).merge({:limit => :all})) + ret = @noosfero_finder.find(asset, @query, calculate_find_options(asset, nil, params[:page], @product_category, @region, params[:radius], params[:year], params[:month], params[:order_by]).merge({:limit => :all})) @result_ids = ret.is_a?(Hash) ? ret[:results] : ret end end - def calculate_find_options(asset, limit, page, product_category, region, radius, year, month) + def calculate_find_options(asset, limit, page, product_category, region, radius, year, month, solr_order) result = { :product_category => product_category, :per_page => limit, :page => page } if [:enterprises, :people, :products].include?(asset) && region result.merge!(:within => radius, :region => region.id) @@ -111,6 +111,8 @@ class SearchController < PublicController :browse => params[:facet] ? params[:facet].map{ |k,v| k.to_s+':'+v.to_s} : ''}) end + result[:order_by] = solr_order + result end @@ -169,7 +171,7 @@ class SearchController < PublicController where_to_search.select { |key,description| @searching[key] }.each do |key, description| @order << key - find_options = calculate_find_options(key, limit, params[:page], @product_category, @region, params[:radius], params[:year], params[:month]); + find_options = calculate_find_options(key, limit, params[:page], @product_category, @region, params[:radius], params[:year], params[:month], params[:order_by]); ret = @noosfero_finder.find(key, @query, find_options) @results[key] = ret.is_a?(Hash) ? ret[:results] : ret @facets[key] = ret.is_a?(Hash) ? ret[:facets] : {} diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index 292ac46..5c11853 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -134,4 +134,11 @@ module SearchHelper asset_class(asset).table_name end + def order_by(asset, options) + content_tag('div', _('Order by ') + + select_tag(asset.to_s + '[order]', options_for_select(options, params[:order_by]), + {:onchange => "window.location=jQuery.param.querystring(window.location.href, { 'order_by' : this.options[this.selectedIndex].value})"}), + :class => "search-ordering") + end + end diff --git a/app/models/category_finder.rb b/app/models/category_finder.rb index 2907ce8..eefc1c2 100644 --- a/app/models/category_finder.rb +++ b/app/models/category_finder.rb @@ -29,10 +29,13 @@ class CategoryFinder if query.blank? options.delete(:facets) + options.delete(:order_by) + asset_class(asset).send(finder_method, :all, options_for_find(asset_class(asset), {:order => "#{asset_table(asset)}.name"}.merge(options), date_range)) else pg_options = {:page => options.delete(:page), :per_page => options.delete(:per_page)} - solr_options = {:facets => options.delete(:facets)} + solr_options = {:facets => options.delete(:facets), :order => options.delete(:order_by)} + asset_class(asset).find_by_contents(query, pg_options, solr_options, options_for_find(asset_class(asset), options, date_range))[:results] end end diff --git a/app/models/environment_finder.rb b/app/models/environment_finder.rb index f046969..92ff518 100644 --- a/app/models/environment_finder.rb +++ b/app/models/environment_finder.rb @@ -23,6 +23,7 @@ class EnvironmentFinder if query.blank? options.delete(:facets) + options.delete(:order_by) # FIXME this test is in more than one place if finder_method == 'paginate' @@ -51,7 +52,8 @@ class EnvironmentFinder end else pg_options = {:page => options.delete(:page), :per_page => options.delete(:per_page)} - solr_options = {:facets => options.delete(:facets)} + solr_options = {:facets => options.delete(:facets), :order => options.delete(:order_by)} + if product_category && asset == :products # SECURITY no risk of SQL injection, since product_category_ids comes from trusted source ret = @environment.send(asset).find_by_contents(query, pg_options, solr_options, options.merge({:include => 'product_categorizations', :conditions => 'product_categorizations.category_id = (%s)' % product_category.id })) diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 78e2f6f..d86e4cb 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -1775,6 +1775,10 @@ input.disabled { filter-opacity: 50%; } +.search-ordering { + float: right; +} + .search-relevance { font-size: smaller; font-style: italic; -- libgit2 0.21.2