summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2012-10-29 18:32:41 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2012-10-29 18:32:41 +0000
commit9f148e098b07e95e2d7088844b111bb8c1280d87 (patch)
treeffe2d6ff1f819c95f1ac2491508e451b39d9d199 /app
parent1fc324b74c089e2d74d0ba189aee80316f7cad68 (diff)
downloadredmine-9f148e098b07e95e2d7088844b111bb8c1280d87.tar.gz
redmine-9f148e098b07e95e2d7088844b111bb8c1280d87.zip
Ability to sort issues by grouped column (#3511).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10765 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r--app/controllers/issues_controller.rb1
-rw-r--r--app/helpers/sort_helper.rb8
-rw-r--r--app/models/query.rb11
3 files changed, 17 insertions, 3 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 816a3f521..d2096a3d2 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -56,6 +56,7 @@ class IssuesController < ApplicationController
retrieve_query
sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
sort_update(@query.sortable_columns)
+ @query.sort_criteria = sort_criteria.to_a
if @query.valid?
case params[:format]
diff --git a/app/helpers/sort_helper.rb b/app/helpers/sort_helper.rb
index 9fda5982b..fd797951a 100644
--- a/app/helpers/sort_helper.rb
+++ b/app/helpers/sort_helper.rb
@@ -89,6 +89,10 @@ module SortHelper
sql.blank? ? nil : sql
end
+ def to_a
+ @criteria.dup
+ end
+
def add!(key, asc)
@criteria.delete_if {|k,o| k == key}
@criteria = [[key, asc]] + @criteria
@@ -182,6 +186,10 @@ module SortHelper
@sort_criteria.to_sql
end
+ def sort_criteria
+ @sort_criteria
+ end
+
# Returns a link which sorts by the named column.
#
# - column is the name of an attribute in the sorted record collection.
diff --git a/app/models/query.rb b/app/models/query.rb
index 64af16f54..efa161a62 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -542,7 +542,7 @@ class Query < ActiveRecord::Base
if arg.is_a?(Hash)
arg = arg.keys.sort.collect {|k| arg[k]}
end
- c = arg.select {|k,o| !k.to_s.blank?}.slice(0,3).collect {|k,o| [k.to_s, o == 'desc' ? o : 'asc']}
+ c = arg.select {|k,o| !k.to_s.blank?}.slice(0,3).collect {|k,o| [k.to_s, (o == 'desc' || o == false) ? 'desc' : 'asc']}
write_attribute(:sort_criteria, c)
end
@@ -558,12 +558,17 @@ class Query < ActiveRecord::Base
sort_criteria && sort_criteria[arg] && sort_criteria[arg].last
end
+ def sort_criteria_order_for(key)
+ sort_criteria.detect {|k, order| key.to_s == k}.try(:last)
+ end
+
# Returns the SQL sort order that should be prepended for grouping
def group_by_sort_order
if grouped? && (column = group_by_column)
+ order = sort_criteria_order_for(column.name) || column.default_order
column.sortable.is_a?(Array) ?
- column.sortable.collect {|s| "#{s} #{column.default_order}"}.join(',') :
- "#{column.sortable} #{column.default_order}"
+ column.sortable.collect {|s| "#{s} #{order}"}.join(',') :
+ "#{column.sortable} #{order}"
end
end