]> source.dussan.org Git - redmine.git/commitdiff
Makes author column sortable and groupable on the issue list (#1567).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 19 Nov 2011 12:47:56 +0000 (12:47 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 19 Nov 2011 12:47:56 +0000 (12:47 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7843 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/query.rb
test/functional/issues_controller_test.rb

index c25b75f2c1712bda9bf10b9621973af87c808cd1..1ac18c7f597a72fd89d3f90f64f5ec63e563e6ed 100644 (file)
@@ -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
index 0b73c255dc6592bd58e19355be4f01cfbc8b0db8..b350512afda07dca48d5e9639b0f3dd948a3a91d 100644 (file)
@@ -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']