@@ -0,0 +1,9 | |||
|
1 | class AddQueriesOptions < ActiveRecord::Migration | |
|
2 | def up | |
|
3 | add_column :queries, :options, :text | |
|
4 | end | |
|
5 | ||
|
6 | def down | |
|
7 | remove_column :queries, :options | |
|
8 | end | |
|
9 | end |
@@ -59,7 +59,7 class QueriesController < ApplicationController | |||
|
59 | 59 | |
|
60 | 60 | if @query.save |
|
61 | 61 | flash[:notice] = l(:notice_successful_create) |
|
62 |
redirect_to |
|
|
62 | redirect_to_issues(:query_id => @query) | |
|
63 | 63 | else |
|
64 | 64 | render :action => 'new', :layout => !request.xhr? |
|
65 | 65 | end |
@@ -77,7 +77,7 class QueriesController < ApplicationController | |||
|
77 | 77 | |
|
78 | 78 | if @query.save |
|
79 | 79 | flash[:notice] = l(:notice_successful_update) |
|
80 |
redirect_to |
|
|
80 | redirect_to_issues(:query_id => @query) | |
|
81 | 81 | else |
|
82 | 82 | render :action => 'edit' |
|
83 | 83 | end |
@@ -85,7 +85,7 class QueriesController < ApplicationController | |||
|
85 | 85 | |
|
86 | 86 | def destroy |
|
87 | 87 | @query.destroy |
|
88 |
redirect_to |
|
|
88 | redirect_to_issues(:set_filter => 1) | |
|
89 | 89 | end |
|
90 | 90 | |
|
91 | 91 | private |
@@ -103,4 +103,16 private | |||
|
103 | 103 | rescue ActiveRecord::RecordNotFound |
|
104 | 104 | render_404 |
|
105 | 105 | end |
|
106 | ||
|
107 | def redirect_to_issues(options) | |
|
108 | if params[:gantt] | |
|
109 | if @project | |
|
110 | redirect_to project_gantt_path(@project, options) | |
|
111 | else | |
|
112 | redirect_to issues_gantt_path(options) | |
|
113 | end | |
|
114 | else | |
|
115 | redirect_to _project_issues_path(@project, options) | |
|
116 | end | |
|
117 | end | |
|
106 | 118 | end |
@@ -97,6 +97,31 class IssueQuery < Query | |||
|
97 | 97 | !is_private? |
|
98 | 98 | end |
|
99 | 99 | |
|
100 | def draw_relations | |
|
101 | r = options[:draw_relations] | |
|
102 | r.nil? || r == '1' | |
|
103 | end | |
|
104 | ||
|
105 | def draw_relations=(arg) | |
|
106 | options[:draw_relations] = (arg == '0' ? '0' : nil) | |
|
107 | end | |
|
108 | ||
|
109 | def draw_progress_line | |
|
110 | r = options[:draw_progress_line] | |
|
111 | r == '1' | |
|
112 | end | |
|
113 | ||
|
114 | def draw_progress_line=(arg) | |
|
115 | options[:draw_progress_line] = (arg == '1' ? '1' : nil) | |
|
116 | end | |
|
117 | ||
|
118 | def build_from_params(params) | |
|
119 | super | |
|
120 | self.draw_relations = params[:draw_relations] || (params[:query] && params[:query][:draw_relations]) | |
|
121 | self.draw_progress_line = params[:draw_progress_line] || (params[:query] && params[:query][:draw_progress_line]) | |
|
122 | self | |
|
123 | end | |
|
124 | ||
|
100 | 125 | def initialize_available_filters |
|
101 | 126 | principals = [] |
|
102 | 127 | subprojects = [] |
@@ -130,6 +130,7 class Query < ActiveRecord::Base | |||
|
130 | 130 | serialize :filters |
|
131 | 131 | serialize :column_names |
|
132 | 132 | serialize :sort_criteria, Array |
|
133 | serialize :options, Hash | |
|
133 | 134 | |
|
134 | 135 | attr_protected :project_id, :user_id |
|
135 | 136 |
@@ -1,4 +1,11 | |||
|
1 | 1 | <% @gantt.view = self %> |
|
2 | <div class="contextual"> | |
|
3 | <% if !@query.new_record? && @query.editable_by?(User.current) %> | |
|
4 | <%= link_to l(:button_edit), edit_query_path(@query, :gantt => 1), :class => 'icon icon-edit' %> | |
|
5 | <%= delete_link query_path(@query, :gantt => 1) %> | |
|
6 | <% end %> | |
|
7 | </div> | |
|
8 | ||
|
2 | 9 | <h2><%= @query.new_record? ? l(:label_gantt) : h(@query.name) %></h2> |
|
3 | 10 | |
|
4 | 11 | <%= form_tag({:controller => 'gantts', :action => 'show', |
@@ -6,6 +13,7 | |||
|
6 | 13 | :year => params[:year], :months => params[:months]}, |
|
7 | 14 | :method => :get, :id => 'query_form') do %> |
|
8 | 15 | <%= hidden_field_tag 'set_filter', '1' %> |
|
16 | <%= hidden_field_tag 'gantt', '1' %> | |
|
9 | 17 | <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> |
|
10 | 18 | <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend> |
|
11 | 19 | <div style="<%= @query.new_record? ? "" : "display: none;" %>"> |
@@ -20,8 +28,8 | |||
|
20 | 28 | <td> |
|
21 | 29 | <fieldset> |
|
22 | 30 | <legend><%= l(:label_related_issues) %></legend> |
|
23 | <label> | |
|
24 | <%= check_box_tag "draw_rels", params["draw_rels"], params[:set_filter].blank? || params[:draw_rels] %> | |
|
31 | <label for="draw_relations"> | |
|
32 | <%= check_box 'query', 'draw_relations', :id => 'draw_relations' %> | |
|
25 | 33 | <% rels = [IssueRelation::TYPE_BLOCKS, IssueRelation::TYPE_PRECEDES] %> |
|
26 | 34 | <% rels.each do |rel| %> |
|
27 | 35 | <% color = Redmine::Helpers::Gantt::DRAW_TYPES[rel][:color] %> |
@@ -35,8 +43,8 | |||
|
35 | 43 | <td> |
|
36 | 44 | <fieldset> |
|
37 | 45 | <legend><%= l(:label_gantt_progress_line) %></legend> |
|
38 | <label> | |
|
39 |
<%= check_box |
|
|
46 | <label for="draw_progress_line"> | |
|
47 | <%= check_box 'query', 'draw_progress_line', :id => 'draw_progress_line' %> | |
|
40 | 48 | <%= l(:label_display) %> |
|
41 | 49 | </label> |
|
42 | 50 | </fieldset> |
@@ -62,6 +70,11 | |||
|
62 | 70 | :class => 'icon icon-checked' %> |
|
63 | 71 | <%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, |
|
64 | 72 | :class => 'icon icon-reload' %> |
|
73 | <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %> | |
|
74 | <%= link_to_function l(:button_save), | |
|
75 | "$('#query_form').attr('action', '#{ @project ? new_project_query_path(@project) : new_query_path }').submit();", | |
|
76 | :class => 'icon icon-save' %> | |
|
77 | <% end %> | |
|
65 | 78 | </p> |
|
66 | 79 | <% end %> |
|
67 | 80 | |
@@ -313,7 +326,7 | |||
|
313 | 326 | $(document).ready(drawGanttHandler); |
|
314 | 327 | $(window).resize(drawGanttHandler); |
|
315 | 328 | $(function() { |
|
316 | $("#draw_rels").change(drawGanttHandler); | |
|
329 | $("#draw_relations").change(drawGanttHandler); | |
|
317 | 330 | $("#draw_progress_line").change(drawGanttHandler); |
|
318 | 331 | }); |
|
319 | 332 | <% end %> |
@@ -2,6 +2,8 | |||
|
2 | 2 | |
|
3 | 3 | <div class="box"> |
|
4 | 4 | <div class="tabular"> |
|
5 | <%= hidden_field_tag 'gantt', '1' if params[:gantt] %> | |
|
6 | ||
|
5 | 7 | <p><label for="query_name"><%=l(:field_name)%></label> |
|
6 | 8 | <%= text_field 'query', 'name', :size => 80 %></p> |
|
7 | 9 | |
@@ -31,6 +33,13 | |||
|
31 | 33 | |
|
32 | 34 | <p><label><%= l(:button_show) %></label> |
|
33 | 35 | <%= available_block_columns_tags(@query) %></p> |
|
36 | ||
|
37 | <% if params[:gantt] %> | |
|
38 | <p><label><%= l(:label_gantt) %></label> | |
|
39 | <label class="inline"><%= check_box_tag "query[draw_relations]", "1", @query.draw_relations %> <%= l(:label_related_issues) %></label> | |
|
40 | <label class="inline"><%= check_box_tag "query[draw_progress_line]", "1", @query.draw_progress_line %> <%= l(:label_gantt_progress_line) %></label> | |
|
41 | </p> | |
|
42 | <% end %> | |
|
34 | 43 | </fieldset> |
|
35 | 44 | </div> |
|
36 | 45 |
@@ -167,6 +167,6 function drawGanttHandler() { | |||
|
167 | 167 | setDrawArea(); |
|
168 | 168 | if ($("#draw_progress_line").attr('checked')) |
|
169 | 169 | drawGanttProgressLines(); |
|
170 | if ($("#draw_rels").attr('checked')) | |
|
170 | if ($("#draw_relations").attr('checked')) | |
|
171 | 171 | drawRelations(); |
|
172 | 172 | } |
@@ -155,6 +155,43 class QueriesControllerTest < ActionController::TestCase | |||
|
155 | 155 | assert_select 'input[name=?]', 'query[name]' |
|
156 | 156 | end |
|
157 | 157 | |
|
158 | def test_create_global_query_from_gantt | |
|
159 | @request.session[:user_id] = 1 | |
|
160 | assert_difference 'IssueQuery.count' do | |
|
161 | post :create, | |
|
162 | :gantt => 1, | |
|
163 | :operators => {"status_id" => "o"}, | |
|
164 | :values => {"status_id" => ["1"]}, | |
|
165 | :query => {:name => "test_create_from_gantt", | |
|
166 | :draw_relations => '1', | |
|
167 | :draw_progress_line => '1'} | |
|
168 | assert_response 302 | |
|
169 | end | |
|
170 | query = IssueQuery.order('id DESC').first | |
|
171 | assert_redirected_to "/issues/gantt?query_id=#{query.id}" | |
|
172 | assert_equal true, query.draw_relations | |
|
173 | assert_equal true, query.draw_progress_line | |
|
174 | end | |
|
175 | ||
|
176 | def test_create_project_query_from_gantt | |
|
177 | @request.session[:user_id] = 1 | |
|
178 | assert_difference 'IssueQuery.count' do | |
|
179 | post :create, | |
|
180 | :project_id => 'ecookbook', | |
|
181 | :gantt => 1, | |
|
182 | :operators => {"status_id" => "o"}, | |
|
183 | :values => {"status_id" => ["1"]}, | |
|
184 | :query => {:name => "test_create_from_gantt", | |
|
185 | :draw_relations => '0', | |
|
186 | :draw_progress_line => '0'} | |
|
187 | assert_response 302 | |
|
188 | end | |
|
189 | query = IssueQuery.order('id DESC').first | |
|
190 | assert_redirected_to "/projects/ecookbook/issues/gantt?query_id=#{query.id}" | |
|
191 | assert_equal false, query.draw_relations | |
|
192 | assert_equal false, query.draw_progress_line | |
|
193 | end | |
|
194 | ||
|
158 | 195 | def test_edit_global_public_query |
|
159 | 196 | @request.session[:user_id] = 1 |
|
160 | 197 | get :edit, :id => 4 |
General Comments 0
You need to be logged in to leave comments.
Login now