summaryrefslogtreecommitdiffstats
path: root/app/helpers/queries_helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/helpers/queries_helper.rb')
-rw-r--r--app/helpers/queries_helper.rb48
1 files changed, 40 insertions, 8 deletions
diff --git a/app/helpers/queries_helper.rb b/app/helpers/queries_helper.rb
index 197bbb998..1d0db2877 100644
--- a/app/helpers/queries_helper.rb
+++ b/app/helpers/queries_helper.rb
@@ -161,10 +161,28 @@ module QueriesHelper
content_tag('span', label + " " + value, :class => "total-for-#{column.name.to_s.dasherize}")
end
- def column_header(column)
- column.sortable ? sort_header_tag(column.name.to_s, :caption => column.caption,
- :default_order => column.default_order) :
- content_tag('th', h(column.caption))
+ def column_header(query, column)
+ if column.sortable?
+ css, order = nil, column.default_order
+ if column.name.to_s == query.sort_criteria.first_key
+ if query.sort_criteria.first_asc?
+ css = 'sort asc'
+ order = 'desc'
+ else
+ css = 'sort desc'
+ order = 'asc'
+ end
+ end
+ sort_param = { :sort => query.sort_criteria.add(column.name, order).to_param }
+ content = link_to(column.caption,
+ {:params => request.query_parameters.merge(sort_param)},
+ :title => l(:label_sort_by, "\"#{column.caption}\""),
+ :class => css
+ )
+ else
+ content = column.caption
+ end
+ content_tag('th', content)
end
def column_content(column, item)
@@ -257,19 +275,26 @@ module QueriesHelper
raise ::Unauthorized unless @query.visible?
@query.project = @project
session[session_key] = {:id => @query.id, :project_id => @query.project_id} if use_session
- sort_clear
elsif api_request? || params[:set_filter] || !use_session || session[session_key].nil? || session[session_key][:project_id] != (@project ? @project.id : nil)
# Give it a name, required to be valid
@query = klass.new(:name => "_", :project => @project)
@query.build_from_params(params)
- session[session_key] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names, :totalable_names => @query.totalable_names} if use_session
+ session[session_key] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names, :totalable_names => @query.totalable_names, :sort => @query.sort_criteria.to_a} if use_session
else
# retrieve from session
@query = nil
@query = klass.find_by_id(session[session_key][:id]) if session[session_key][:id]
- @query ||= klass.new(:name => "_", :filters => session[session_key][:filters], :group_by => session[session_key][:group_by], :column_names => session[session_key][:column_names], :totalable_names => session[session_key][:totalable_names])
+ @query ||= klass.new(:name => "_", :filters => session[session_key][:filters], :group_by => session[session_key][:group_by], :column_names => session[session_key][:column_names], :totalable_names => session[session_key][:totalable_names], :sort_criteria => session[session_key][:sort])
@query.project = @project
end
+ if params[:sort].present?
+ @query.sort_criteria = params[:sort]
+ if use_session
+ session[session_key] ||= {}
+ session[session_key][:sort] = @query.sort_criteria.to_a
+ end
+ end
+ @query
end
def retrieve_query_from_session(klass=IssueQuery)
@@ -281,7 +306,7 @@ module QueriesHelper
@query = IssueQuery.find_by_id(session_data[:id])
return unless @query
else
- @query = IssueQuery.new(:name => "_", :filters => session_data[:filters], :group_by => session_data[:group_by], :column_names => session_data[:column_names], :totalable_names => session_data[:totalable_names])
+ @query = IssueQuery.new(:name => "_", :filters => session_data[:filters], :group_by => session_data[:group_by], :column_names => session_data[:column_names], :totalable_names => session_data[:totalable_names], :sort_criteria => session[session_key][:sort])
end
if session_data.has_key?(:project_id)
@query.project_id = session_data[:project_id]
@@ -318,9 +343,16 @@ module QueriesHelper
if query.group_by.present?
tags << hidden_field_tag("group_by", query.group_by, :id => nil)
end
+ if query.sort_criteria.present?
+ tags << hidden_field_tag("sort", query.sort_criteria.to_param, :id => nil)
+ end
tags
end
+
+ def query_hidden_sort_tag(query)
+ hidden_field_tag("sort", query.sort_criteria.to_param, :id => nil)
+ end
# Returns the queries that are rendered in the sidebar
def sidebar_queries(klass, project)