From 5190c1160a3ad9735a025c3d7dde76164a02d6ac Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 16 Jul 2013 14:43:56 +0800 Subject: [PATCH] Fix get_sorted_and_filtered, accepts 3 arguments and works for category --- app/controllers/application_controller.rb | 24 +++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7c02f1df7..053a2ec6a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -229,7 +229,7 @@ class ApplicationController < ActionController::Base redirect_to ret end - def get_sorted_and_filtered(object_class, query=nil) + def get_sorted_and_filtered(object_class, query = nil, objects = nil) if params[:filter] || params[:sort] || params[:new_filter] @filter = params[:filter] new_filter = params[:new_filter] @@ -248,11 +248,11 @@ class ApplicationController < ActionController::Base @filter = {new_filter[:type] => [new_filter[:id].to_s]} end - objects = get_objects(object_class, query) object_class = object_class.classify.constantize - if !params[:sort].blank? + objects ||= get_objects(object_class, query) + unless params[:sort].blank? options = params[:sort_options] - options = [options] if !options.class.eql?(Array) + options = [options] unless options.is_a?(Array) options.each do |option| if object_class.fields.include?(option) if object_class.fields[option].type.to_s.eql?('Object') && !object_class.relations[option].nil? @@ -272,6 +272,19 @@ class ApplicationController < ActionController::Base when :referenced_in objects = get_objects_from_referenced_objects(object_class.relations[option].class_name.constantize, objects, "#{option}_id") end + elsif option.eql?('category') + category_array = @module_app.categories.inject([]){ |result, value| + result << [value.title, value] + } + params[:direction].eql?('asc') ? category_array.sort! : category_array.sort!.reverse! + sorted_objects = Array.new + category_array.each do |x| + buffer_categories = x[1].buffer_categories + buffer_categories.each {|buffer_category| sorted_objects << buffer_category.categorizable } + end + sorted_objects.flatten! + sorted_objects.uniq! + objects = get_with_nil(objects, option, sorted_objects) elsif option.eql?('tags') tag_array = @module_app.tags.inject([]){ |result, value| result << [value.name, value] @@ -285,7 +298,7 @@ class ApplicationController < ActionController::Base sorted_objects.flatten! sorted_objects.uniq! objects = get_with_nil(objects, option, sorted_objects) - end + end end end if @filter @@ -381,7 +394,6 @@ class ApplicationController < ActionController::Base end def get_objects(object_class, query=nil) - object_class = object_class.classify.constantize if query objects = object_class.where(query) else