From 8ec1231dbc56a69608abd53cf1372ba5b0cda2a4 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 19 Nov 2011 12:47:56 +0000 Subject: [PATCH] Makes author column sortable and groupable on the issue list (#1567). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7843 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/query.rb | 5 ++++- test/functional/issues_controller_test.rb | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/models/query.rb b/app/models/query.rb index c25b75f2c..1ac18c7f5 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -136,7 +136,7 @@ class Query < ActiveRecord::Base QueryColumn.new(:status, :sortable => "#{IssueStatus.table_name}.position", :groupable => true), QueryColumn.new(:priority, :sortable => "#{IssuePriority.table_name}.position", :default_order => 'desc', :groupable => true), QueryColumn.new(:subject, :sortable => "#{Issue.table_name}.subject"), - QueryColumn.new(:author), + QueryColumn.new(:author, :sortable => ["authors.lastname", "authors.firstname", "authors.id"], :groupable => true), QueryColumn.new(:assigned_to, :sortable => ["#{User.table_name}.lastname", "#{User.table_name}.firstname", "#{User.table_name}.id"], :groupable => true), QueryColumn.new(:updated_on, :sortable => "#{Issue.table_name}.updated_on", :default_order => 'desc'), QueryColumn.new(:category, :sortable => "#{IssueCategory.table_name}.name", :groupable => true), @@ -554,10 +554,13 @@ class Query < ActiveRecord::Base def issues(options={}) order_option = [group_by_sort_order, options[:order]].reject {|s| s.blank?}.join(',') order_option = nil if order_option.blank? + + joins = (order_option && order_option.include?('authors')) ? "LEFT OUTER JOIN users authors ON authors.id = #{Issue.table_name}.author_id" : nil Issue.visible.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq, :conditions => Query.merge_conditions(statement, options[:conditions]), :order => order_option, + :joins => joins, :limit => options[:limit], :offset => options[:offset] rescue ::ActiveRecord::StatementInvalid => e diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 0b73c255d..b350512af 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -397,6 +397,16 @@ class IssuesControllerTest < ActionController::TestCase assert !issues.empty? assert_equal issues.sort {|a,b| a.tracker == b.tracker ? b.id <=> a.id : a.tracker <=> b.tracker }.collect(&:id), issues.collect(&:id) end + + def test_index_sort_by_author + get :index, :sort => 'author' + assert_response :success + end + + def test_index_group_by_author + get :index, :group_by => 'author', :sort => 'priority' + assert_response :success + end def test_index_with_columns columns = ['tracker', 'subject', 'assigned_to'] -- 2.39.5