Index: app/models/query.rb =================================================================== --- app/models/query.rb (revision 4098) +++ app/models/query.rb (working copy) @@ -180,7 +180,9 @@ "start_date" => { :type => :date, :order => 11 }, "due_date" => { :type => :date, :order => 12 }, "estimated_hours" => { :type => :integer, :order => 13 }, - "done_ratio" => { :type => :integer, :order => 14 }} + "done_ratio" => { :type => :integer, :order => 14 }, + "root_id" => { :type => :integer, :order => 16, :caption => "field_parent_issue" }, + } user_values = [] user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged? @@ -366,9 +368,11 @@ # Returns the SQL sort order that should be prepended for grouping def group_by_sort_order if grouped? && (column = group_by_column) + # Clean up duplicate SQL order modifiers when sortable field is postfixed + # with "asc" or "desc". Allows such fields to be groupable. column.sortable.is_a?(Array) ? - column.sortable.collect {|s| "#{s} #{column.default_order}"}.join(',') : - "#{column.sortable} #{column.default_order}" + column.sortable.collect {|s| s.slice(-4,4).upcase==" ASC"?s : s.slice(-5, 5).upcase==" DESC"?s : s+" #{column.default_order}"}.join(',') : + "#{column.sortable}".slice(-4,4).upcase==" ASC"?"#{column.sortable}" : "#{column.sortable}".slice(-5, 5).upcase==" DESC"?"#{column.sortable}" : "#{column.sortable} #{column.default_order}" end end Index: app/views/queries/_filters.rhtml =================================================================== --- app/views/queries/_filters.rhtml (revision 4098) +++ app/views/queries/_filters.rhtml (working copy) @@ -78,7 +78,7 @@ id="tr_<%= field %>" class="filter"> <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> - + <%= select_tag "operators[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %> @@ -107,7 +107,7 @@ <%= label_tag('add_filter_select', l(:label_filter_add)) %>: -<%= select_tag 'add_filter_select', options_for_select([["",""]] + query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.collect{|field| [ field[1][:name] || l(("field_"+field[0].to_s.gsub(/_id$/, "")).to_sym), field[0]] unless query.has_filter?(field[0])}.compact), +<%= select_tag 'add_filter_select', options_for_select([["",""]] + query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.collect{|field| [ field[1][:name] || (field[1][:caption] == nil ? l(("field_"+field[0].to_s.gsub(/_id$/, "")).to_sym) : l(field[1][:caption].to_sym)), field[0]] unless query.has_filter?(field[0])}.compact), :onchange => "add_filter();", :class => "select-small", :name => nil %>