@@ -501,10 +501,11 private | |||
|
501 | 501 | end |
|
502 | 502 | end |
|
503 | 503 | @query.group_by = params[:group_by] |
|
504 | session[:query] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by} | |
|
504 | @query.column_names = params[:query] && params[:query][:column_names] | |
|
505 | session[:query] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names} | |
|
505 | 506 | else |
|
506 | 507 | @query = Query.find_by_id(session[:query][:id]) if session[:query][:id] |
|
507 | @query ||= Query.new(:name => "_", :project => @project, :filters => session[:query][:filters], :group_by => session[:query][:group_by]) | |
|
508 | @query ||= Query.new(:name => "_", :project => @project, :filters => session[:query][:filters], :group_by => session[:query][:group_by], :column_names => session[:query][:column_names]) | |
|
508 | 509 | @query.project = @project |
|
509 | 510 | end |
|
510 | 511 | end |
@@ -270,8 +270,14 class Query < ActiveRecord::Base | |||
|
270 | 270 | end |
|
271 | 271 | |
|
272 | 272 | def column_names=(names) |
|
273 | names = names.select {|n| n.is_a?(Symbol) || !n.blank? } if names | |
|
274 |
names = names. |
|
|
273 | if names | |
|
274 | names = names.select {|n| n.is_a?(Symbol) || !n.blank? } | |
|
275 | names = names.collect {|n| n.is_a?(Symbol) ? n : n.to_sym } | |
|
276 | # Set column_names to nil if default columns | |
|
277 | if names.map(&:to_s) == Setting.issue_list_default_columns | |
|
278 | names = nil | |
|
279 | end | |
|
280 | end | |
|
275 | 281 | write_attribute(:column_names, names) |
|
276 | 282 | end |
|
277 | 283 |
@@ -20,8 +20,16 | |||
|
20 | 20 | <fieldset class="collapsible collapsed"> |
|
21 | 21 | <legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend> |
|
22 | 22 | <div style="display: none;"> |
|
23 | <%= l(:field_group_by) %> | |
|
24 | <%= select_tag('group_by', options_for_select([[]] + @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, @query.group_by)) %> | |
|
23 | <table> | |
|
24 | <tr> | |
|
25 | <td><%= l(:field_column_names) %></td> | |
|
26 | <td><%= render :partial => 'queries/columns', :locals => {:query => @query} %></td> | |
|
27 | </tr> | |
|
28 | <tr> | |
|
29 | <td><%= l(:field_group_by) %></td> | |
|
30 | <td><%= select_tag('group_by', options_for_select([[]] + @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, @query.group_by)) %></td> | |
|
31 | </tr> | |
|
32 | </table> | |
|
25 | 33 | </div> |
|
26 | 34 | </fieldset> |
|
27 | 35 | </div> |
@@ -29,6 +37,7 | |||
|
29 | 37 | |
|
30 | 38 | <%= link_to_remote l(:button_apply), |
|
31 | 39 | { :url => { :set_filter => 1 }, |
|
40 | :before => 'selectAllOptions("selected_columns");', | |
|
32 | 41 | :update => "content", |
|
33 | 42 | :with => "Form.serialize('query_form')" |
|
34 | 43 | }, :class => 'icon icon-checked' %> |
@@ -40,7 +49,7 | |||
|
40 | 49 | }, :class => 'icon icon-reload' %> |
|
41 | 50 | |
|
42 | 51 | <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %> |
|
43 | <%= link_to l(:button_save), {}, :onclick => "$('query_form').submit(); return false;", :class => 'icon icon-save' %> | |
|
52 | <%= link_to l(:button_save), {}, :onclick => "selectAllOptions('selected_columns'); $('query_form').submit(); return false;", :class => 'icon icon-save' %> | |
|
44 | 53 | <% end %> |
|
45 | 54 | </p> |
|
46 | 55 | <% end %> |
@@ -1,10 +1,6 | |||
|
1 | <% content_tag 'fieldset', :id => 'columns', :style => (query.has_default_columns? ? 'display:none;' : nil) do %> | |
|
2 | <legend><%= l(:field_column_names) %></legend> | |
|
3 | ||
|
4 | <%= hidden_field_tag 'query[column_names][]', '', :id => nil %> | |
|
5 | <table> | |
|
1 | <table style="border-collapse: collapse; border:0;"> | |
|
6 | 2 | <tr> |
|
7 | <td><%= select_tag 'available_columns', | |
|
3 | <td style="padding-left:0"><%= select_tag 'available_columns', | |
|
8 | 4 | options_for_select((query.available_columns - query.columns).collect {|column| [column.caption, column.name]}), |
|
9 | 5 | :multiple => true, :size => 10, :style => "width:150px" %> |
|
10 | 6 | </td> |
@@ -15,12 +11,11 | |||
|
15 | 11 | onclick="moveOptions(this.form.selected_columns, this.form.available_columns);" /> |
|
16 | 12 | </td> |
|
17 | 13 | <td><%= select_tag 'query[column_names][]', |
|
18 |
options_for_select( |
|
|
14 | options_for_select(query.columns.collect {|column| [column.caption, column.name]}), | |
|
19 | 15 | :id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %> |
|
20 | 16 | </td> |
|
21 | 17 | </tr> |
|
22 | 18 | </table> |
|
23 | <% end %> | |
|
24 | 19 | |
|
25 | 20 | <% content_for :header_tags do %> |
|
26 | 21 | <%= javascript_include_tag 'select_list_move' %> |
@@ -37,5 +37,9 | |||
|
37 | 37 | <% end %> |
|
38 | 38 | </fieldset> |
|
39 | 39 | |
|
40 | <% content_tag 'fieldset', :id => 'columns', :style => (query.has_default_columns? ? 'display:none;' : nil) do %> | |
|
41 | <legend><%= l(:field_column_names) %></legend> | |
|
40 | 42 | <%= render :partial => 'queries/columns', :locals => {:query => query}%> |
|
43 | <% end %> | |
|
44 | ||
|
41 | 45 | </div> |
@@ -255,6 +255,22 class IssuesControllerTest < ActionController::TestCase | |||
|
255 | 255 | assert !issues.empty? |
|
256 | 256 | assert_equal issues.sort {|a,b| a.tracker == b.tracker ? b.id <=> a.id : a.tracker <=> b.tracker }.collect(&:id), issues.collect(&:id) |
|
257 | 257 | end |
|
258 | ||
|
259 | def test_index_with_columns | |
|
260 | columns = ['tracker', 'subject', 'assigned_to'] | |
|
261 | get :index, :set_filter => 1, :query => { 'column_names' => columns} | |
|
262 | assert_response :success | |
|
263 | ||
|
264 | # query should use specified columns | |
|
265 | query = assigns(:query) | |
|
266 | assert_kind_of Query, query | |
|
267 | assert_equal columns, query.column_names.map(&:to_s) | |
|
268 | ||
|
269 | # columns should be stored in session | |
|
270 | assert_kind_of Hash, session[:query] | |
|
271 | assert_kind_of Array, session[:query][:column_names] | |
|
272 | assert_equal columns, session[:query][:column_names].map(&:to_s) | |
|
273 | end | |
|
258 | 274 | |
|
259 | 275 | def test_gantt |
|
260 | 276 | get :gantt, :project_id => 1 |
General Comments 0
You need to be logged in to leave comments.
Login now