##// END OF EJS Templates
Adds a view for editing all trackers fields....
Jean-Philippe Lang -
r10100:3a32edc3bd10
parent child
Show More
@@ -0,0 +1,77
1 <h2><%= link_to l(:label_tracker_plural), trackers_path %> &#187; <%= l(:field_summary) %></h2>
2
3 <% if @trackers.any? %>
4 <%= form_tag({}) do %>
5 <div class="autoscroll">
6 <table class="list">
7 <thead>
8 <tr>
9 <th></th>
10 <% @trackers.each do |tracker| %>
11 <th>
12 <%= tracker.name %>
13 <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.tracker-#{tracker.id}')",
14 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
15 </th>
16 <% end %>
17 </tr>
18 </thead>
19 <tbody>
20 <tr class="group open">
21 <td colspan="<%= @trackers.size + 1 %>">
22 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
23 <%= l(:field_core_fields) %>
24 </td>
25 </tr>
26 <% Tracker::CORE_FIELDS.each do |field| %>
27 <tr class="<%= cycle("odd", "even") %>">
28 <td>
29 <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.core-field-#{field}')",
30 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
31 <%= l("field_#{field}".sub(/_id$/, '')) %>
32 </td>
33 <% @trackers.each do |tracker| %>
34 <td align="center">
35 <%= check_box_tag "trackers[#{tracker.id}][core_fields][]", field, tracker.core_fields.include?(field),
36 :class => "tracker-#{tracker.id} core-field-#{field}" %>
37 </td>
38 <% end %>
39 </tr>
40 <% end %>
41 <% if @custom_fields.any? %>
42 <tr class="group open">
43 <td colspan="<%= @trackers.size + 1 %>">
44 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
45 <%= l(:label_custom_field_plural) %>
46 </td>
47 </tr>
48 <% @custom_fields.each do |field| %>
49 <tr class="<%= cycle("odd", "even") %>">
50 <td>
51 <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.custom-field-#{field.id}')",
52 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
53 <%= field.name %>
54 </td>
55 <% @trackers.each do |tracker| %>
56 <td align="center">
57 <%= check_box_tag "trackers[#{tracker.id}][custom_field_ids][]", field.id, tracker.custom_fields.include?(field),
58 :class => "tracker-#{tracker.id} custom-field-#{field.id}" %>
59 </td>
60 <% end %>
61 </tr>
62 <% end %>
63 <% end %>
64 </tbody>
65 </table>
66 </div>
67 <p><%= submit_tag l(:button_save) %></p>
68 <% @trackers.each do |tracker| %>
69 <%= hidden_field_tag "trackers[#{tracker.id}][core_fields][]", '' %>
70 <%= hidden_field_tag "trackers[#{tracker.id}][custom_field_ids][]", '' %>
71 <% end %>
72 <% end %>
73 <% else %>
74 <p class="nodata"><%= l(:label_no_data) %></p>
75 <% end %>
76
77 <% html_title l(:field_summary) %>
@@ -80,4 +80,22 class TrackersController < ApplicationController
80 80 end
81 81 redirect_to :action => 'index'
82 82 end
83
84 def fields
85 if request.post? && params[:trackers]
86 params[:trackers].each do |tracker_id, tracker_params|
87 tracker = Tracker.find_by_id(tracker_id)
88 if tracker
89 tracker.core_fields = tracker_params[:core_fields]
90 tracker.custom_field_ids = tracker_params[:custom_field_ids]
91 tracker.save
92 end
93 end
94 flash[:notice] = l(:notice_successful_update)
95 redirect_to :action => 'fields'
96 return
97 end
98 @trackers = Tracker.sorted.all
99 @custom_fields = IssueCustomField.all.sort
100 end
83 101 end
@@ -1,5 +1,6
1 1 <div class="contextual">
2 2 <%= link_to l(:label_tracker_new), new_tracker_path, :class => 'icon icon-add' %>
3 <%= link_to l(:field_summary), {:action => 'fields'}, :class => 'icon icon-summary' %>
3 4 </div>
4 5
5 6 <h2><%=l(:label_tracker_plural)%></h2>
@@ -278,7 +278,11 RedmineApp::Application.routes.draw do
278 278 match 'groups/destroy_membership/:id', :controller => 'groups', :action => 'destroy_membership', :id => /\d+/, :via => :post
279 279 match 'groups/edit_membership/:id', :controller => 'groups', :action => 'edit_membership', :id => /\d+/, :via => :post
280 280
281 resources :trackers, :except => :show
281 resources :trackers, :except => :show do
282 collection do
283 match 'fields', :via => [:get, :post]
284 end
285 end
282 286 resources :issue_statuses, :except => :show do
283 287 collection do
284 288 post 'update_issue_done_ratio'
@@ -185,4 +185,34 class TrackersControllerTest < ActionController::TestCase
185 185 assert_redirected_to :action => 'index'
186 186 assert_not_nil flash[:error]
187 187 end
188
189 def test_get_fields
190 get :fields
191 assert_response :success
192 assert_template 'fields'
193
194 assert_select 'form' do
195 assert_select 'input[type=checkbox][name=?][value=assigned_to_id]', 'trackers[1][core_fields][]'
196 assert_select 'input[type=checkbox][name=?][value=2]', 'trackers[1][custom_field_ids][]'
197
198 assert_select 'input[type=hidden][name=?][value=]', 'trackers[1][core_fields][]'
199 assert_select 'input[type=hidden][name=?][value=]', 'trackers[1][custom_field_ids][]'
200 end
201 end
202
203 def test_post_fields
204 post :fields, :trackers => {
205 '1' => {'core_fields' => ['assigned_to_id', 'due_date', ''], 'custom_field_ids' => ['1', '2']},
206 '2' => {'core_fields' => [''], 'custom_field_ids' => ['']}
207 }
208 assert_redirected_to '/trackers/fields'
209
210 tracker = Tracker.find(1)
211 assert_equal %w(assigned_to_id due_date), tracker.core_fields
212 assert_equal [1, 2], tracker.custom_field_ids.sort
213
214 tracker = Tracker.find(2)
215 assert_equal [], tracker.core_fields
216 assert_equal [], tracker.custom_field_ids.sort
217 end
188 218 end
@@ -67,5 +67,13 class RoutingTrackersTest < ActionController::IntegrationTest
67 67 { :controller => 'trackers', :action => 'destroy',
68 68 :format => 'xml', :id => '1' }
69 69 )
70 assert_routing(
71 { :method => 'get', :path => "/trackers/fields" },
72 { :controller => 'trackers', :action => 'fields' }
73 )
74 assert_routing(
75 { :method => 'post', :path => "/trackers/fields" },
76 { :controller => 'trackers', :action => 'fields' }
77 )
70 78 end
71 79 end
General Comments 0
You need to be logged in to leave comments. Login now