@@ -56,6 +56,7 class IssuesController < ApplicationController | |||||
56 | retrieve_query |
|
56 | retrieve_query | |
57 | sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria) |
|
57 | sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria) | |
58 | sort_update(@query.sortable_columns) |
|
58 | sort_update(@query.sortable_columns) | |
|
59 | @query.sort_criteria = sort_criteria.to_a | |||
59 |
|
60 | |||
60 | if @query.valid? |
|
61 | if @query.valid? | |
61 | case params[:format] |
|
62 | case params[:format] |
@@ -89,6 +89,10 module SortHelper | |||||
89 | sql.blank? ? nil : sql |
|
89 | sql.blank? ? nil : sql | |
90 | end |
|
90 | end | |
91 |
|
91 | |||
|
92 | def to_a | |||
|
93 | @criteria.dup | |||
|
94 | end | |||
|
95 | ||||
92 | def add!(key, asc) |
|
96 | def add!(key, asc) | |
93 | @criteria.delete_if {|k,o| k == key} |
|
97 | @criteria.delete_if {|k,o| k == key} | |
94 | @criteria = [[key, asc]] + @criteria |
|
98 | @criteria = [[key, asc]] + @criteria | |
@@ -182,6 +186,10 module SortHelper | |||||
182 | @sort_criteria.to_sql |
|
186 | @sort_criteria.to_sql | |
183 | end |
|
187 | end | |
184 |
|
188 | |||
|
189 | def sort_criteria | |||
|
190 | @sort_criteria | |||
|
191 | end | |||
|
192 | ||||
185 | # Returns a link which sorts by the named column. |
|
193 | # Returns a link which sorts by the named column. | |
186 | # |
|
194 | # | |
187 | # - column is the name of an attribute in the sorted record collection. |
|
195 | # - column is the name of an attribute in the sorted record collection. |
@@ -542,7 +542,7 class Query < ActiveRecord::Base | |||||
542 | if arg.is_a?(Hash) |
|
542 | if arg.is_a?(Hash) | |
543 | arg = arg.keys.sort.collect {|k| arg[k]} |
|
543 | arg = arg.keys.sort.collect {|k| arg[k]} | |
544 | end |
|
544 | end | |
545 |
c = arg.select {|k,o| !k.to_s.blank?}.slice(0,3).collect {|k,o| [k.to_s, o == 'desc' ? |
|
545 | c = arg.select {|k,o| !k.to_s.blank?}.slice(0,3).collect {|k,o| [k.to_s, (o == 'desc' || o == false) ? 'desc' : 'asc']} | |
546 | write_attribute(:sort_criteria, c) |
|
546 | write_attribute(:sort_criteria, c) | |
547 | end |
|
547 | end | |
548 |
|
548 | |||
@@ -558,12 +558,17 class Query < ActiveRecord::Base | |||||
558 | sort_criteria && sort_criteria[arg] && sort_criteria[arg].last |
|
558 | sort_criteria && sort_criteria[arg] && sort_criteria[arg].last | |
559 | end |
|
559 | end | |
560 |
|
560 | |||
|
561 | def sort_criteria_order_for(key) | |||
|
562 | sort_criteria.detect {|k, order| key.to_s == k}.try(:last) | |||
|
563 | end | |||
|
564 | ||||
561 | # Returns the SQL sort order that should be prepended for grouping |
|
565 | # Returns the SQL sort order that should be prepended for grouping | |
562 | def group_by_sort_order |
|
566 | def group_by_sort_order | |
563 | if grouped? && (column = group_by_column) |
|
567 | if grouped? && (column = group_by_column) | |
|
568 | order = sort_criteria_order_for(column.name) || column.default_order | |||
564 | column.sortable.is_a?(Array) ? |
|
569 | column.sortable.is_a?(Array) ? | |
565 |
column.sortable.collect {|s| "#{s} #{ |
|
570 | column.sortable.collect {|s| "#{s} #{order}"}.join(',') : | |
566 |
"#{column.sortable} #{ |
|
571 | "#{column.sortable} #{order}" | |
567 | end |
|
572 | end | |
568 | end |
|
573 | end | |
569 |
|
574 |
@@ -297,6 +297,26 class IssuesControllerTest < ActionController::TestCase | |||||
297 | end |
|
297 | end | |
298 | end |
|
298 | end | |
299 |
|
299 | |||
|
300 | def test_index_with_query_grouped_by_tracker | |||
|
301 | 3.times {|i| Issue.generate!(:tracker_id => (i + 1))} | |||
|
302 | ||||
|
303 | get :index, :set_filter => 1, :group_by => 'tracker', :sort => 'id:desc' | |||
|
304 | assert_response :success | |||
|
305 | ||||
|
306 | trackers = assigns(:issues).map(&:tracker).uniq | |||
|
307 | assert_equal [1, 2, 3], trackers.map(&:id) | |||
|
308 | end | |||
|
309 | ||||
|
310 | def test_index_with_query_grouped_by_tracker_in_reverse_order | |||
|
311 | 3.times {|i| Issue.generate!(:tracker_id => (i + 1))} | |||
|
312 | ||||
|
313 | get :index, :set_filter => 1, :group_by => 'tracker', :sort => 'id:desc,tracker:desc' | |||
|
314 | assert_response :success | |||
|
315 | ||||
|
316 | trackers = assigns(:issues).map(&:tracker).uniq | |||
|
317 | assert_equal [3, 2, 1], trackers.map(&:id) | |||
|
318 | end | |||
|
319 | ||||
300 | def test_index_with_query_id_and_project_id_should_set_session_query |
|
320 | def test_index_with_query_id_and_project_id_should_set_session_query | |
301 | get :index, :project_id => 1, :query_id => 4 |
|
321 | get :index, :project_id => 1, :query_id => 4 | |
302 | assert_response :success |
|
322 | assert_response :success |
General Comments 0
You need to be logged in to leave comments.
Login now