diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb index 6e7c58e..fd28767 100644 --- a/app/controllers/workflows_controller.rb +++ b/app/controllers/workflows_controller.rb @@ -42,7 +42,12 @@ class WorkflowsController < ApplicationController end @roles = Role.find(:all, :order => 'builtin, position') @trackers = Tracker.find(:all, :order => 'position') - @statuses = IssueStatus.find(:all, :order => 'position') + + @used_statuses_only = (params[:used_statuses_only] == '0' ? false : true) + if @tracker && @used_statuses_only && @tracker.issue_statuses.any? + @statuses = @tracker.issue_statuses + end + @statuses ||= IssueStatus.find(:all, :order => 'position') end def copy diff --git a/app/models/tracker.rb b/app/models/tracker.rb index 8f7a98c..9ee045c 100644 --- a/app/models/tracker.rb +++ b/app/models/tracker.rb @@ -43,6 +43,23 @@ class Tracker < ActiveRecord::Base find(:all, :order => 'position') end + # Returns an array of IssueStatus that are used + # in the tracker's workflows + def issue_statuses + if @issue_statuses + return @issue_statuses + elsif new_record? + return [] + end + + ids = Workflow. + connection.select_rows("SELECT DISTINCT old_status_id, new_status_id FROM #{Workflow.table_name} WHERE tracker_id = #{id}"). + flatten. + uniq + + @issue_statuses = IssueStatus.find_all_by_id(ids).sort + end + private def check_integrity raise "Can't delete tracker" if Issue.find(:first, :conditions => ["tracker_id=?", self.id]) diff --git a/app/views/workflows/edit.rhtml b/app/views/workflows/edit.rhtml index 4feaf3a..d7343fa 100644 --- a/app/views/workflows/edit.rhtml +++ b/app/views/workflows/edit.rhtml @@ -11,8 +11,12 @@ <%= select_tag 'tracker_id', options_from_collection_for_select(@trackers, "id", "name", @tracker && @tracker.id) %> - - <%= submit_tag l(:button_edit), :name => nil %> + + <%= hidden_field_tag 'used_statuses_only', '0' %> + +
++<%= submit_tag l(:button_edit), :name => nil %>
<% end %> diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 300bd38..4302542 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -855,3 +855,4 @@ bg: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/bs.yml b/config/locales/bs.yml index d2bd180..5e33bb8 100644 --- a/config/locales/bs.yml +++ b/config/locales/bs.yml @@ -879,3 +879,4 @@ bs: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 0019a5f..c512018 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -858,3 +858,4 @@ ca: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 03d6d90..4ad8ad6 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -861,3 +861,4 @@ cs: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/da.yml b/config/locales/da.yml index c627f73..2468558 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -881,3 +881,4 @@ da: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/de.yml b/config/locales/de.yml index e936faf..e11ffb5 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -881,3 +881,4 @@ de: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/el.yml b/config/locales/el.yml index 76825d8..13f8f37 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -861,3 +861,4 @@ el: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/en.yml b/config/locales/en.yml index 1be78eb..3eee529 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -727,6 +727,7 @@ en: label_copy_source: Source label_copy_target: Target label_copy_same_as_target: Same as target + label_display_used_statuses_only: Only display statuses that are used by this tracker button_login: Login button_submit: Submit diff --git a/config/locales/es.yml b/config/locales/es.yml index 7a22b73..c0aa91d 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -902,3 +902,4 @@ es: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 7b2e754..93d354d 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -891,3 +891,4 @@ fi: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/fr.yml b/config/locales/fr.yml index fd32c6b..aa7fdaf 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -742,6 +742,7 @@ fr: label_copy_target: Cible label_copy_same_as_target: Comme la cible label_update_issue_done_ratios: Mettre à jour l'avancement des demandes + label_display_used_statuses_only: N'afficher que les statuts utilisés dans ce tracker button_login: Connexion button_submit: Soumettre diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 77698bd..363a54e 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -881,3 +881,4 @@ gl: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/he.yml b/config/locales/he.yml index b7df4fb..bc17238 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -865,3 +865,4 @@ he: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 71023e7..8c9f289 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -886,3 +886,4 @@ label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/it.yml b/config/locales/it.yml index 6ec67fe..627daf3 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -868,3 +868,4 @@ it: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 24127d8..1257db2 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -890,3 +890,4 @@ ja: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 5402fc1..081c3ac 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -921,3 +921,4 @@ ko: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/lt.yml b/config/locales/lt.yml index b7d6eec..b21fb5c 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -929,3 +929,4 @@ lt: error_workflow_copy_source: Please select a source tracker or role label_update_issue_done_ratios: Update issue done ratios permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 2b50fd8..3acefe8 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -843,3 +843,4 @@ nl: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/no.yml b/config/locales/no.yml index 6eda0fa..a8b064c 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -856,3 +856,4 @@ label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 1eb0c0e..d3e5021 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -884,3 +884,4 @@ pl: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 98fcf1d..6491b0c 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -889,3 +889,4 @@ pt-BR: field_watcher: Observador permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 2a61405..24c2419 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -873,3 +873,4 @@ pt: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 4f098e8..9a08911 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -858,3 +858,4 @@ ro: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 0814137..c01e52a 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -969,3 +969,4 @@ ru: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 5798a48..a206308 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -860,3 +860,4 @@ sk: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 30c2e37..61f84ad 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -857,3 +857,4 @@ sl: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/sr.yml b/config/locales/sr.yml index f7af3d4..b58df8c 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -876,3 +876,4 @@ label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 7a18800..c73a756 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -910,3 +910,4 @@ sv: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/th.yml b/config/locales/th.yml index 1e88942..8ad86d0 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -858,3 +858,4 @@ th: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 1135fc3..e98b53f 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -888,3 +888,4 @@ tr: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/uk.yml b/config/locales/uk.yml index f6288f6..55dc50c 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -857,3 +857,4 @@ uk: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 76e28e8..d498cb5 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -920,3 +920,4 @@ vi: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index f026719..b315d37 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -954,3 +954,4 @@ error_workflow_copy_source: Please select a source tracker or role label_update_issue_done_ratios: Update issue done ratios permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 389ec4a..e34c5c3 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -885,3 +885,4 @@ zh: label_update_issue_done_ratios: Update issue done ratios setting_start_of_week: Start calendars on permission_view_issues: View Issues + label_display_used_statuses_only: Only display statuses that are used by this tracker diff --git a/test/functional/workflows_controller_test.rb b/test/functional/workflows_controller_test.rb index 2b5216f..802d10d 100644 --- a/test/functional/workflows_controller_test.rb +++ b/test/functional/workflows_controller_test.rb @@ -22,7 +22,7 @@ require 'workflows_controller' class WorkflowsController; def rescue_action(e) raise e end; end class WorkflowsControllerTest < ActionController::TestCase - fixtures :roles, :trackers, :workflows, :users + fixtures :roles, :trackers, :workflows, :users, :issue_statuses def setup @controller = WorkflowsController.new @@ -51,18 +51,46 @@ class WorkflowsControllerTest < ActionController::TestCase end def test_get_edit_with_role_and_tracker + Workflow.delete_all + Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3) + Workflow.create!(:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 5) + get :edit, :role_id => 2, :tracker_id => 1 assert_response :success assert_template 'edit' + + # used status only + assert_not_nil assigns(:statuses) + assert_equal [2, 3, 5], assigns(:statuses).collect(&:id) + # allowed transitions assert_tag :tag => 'input', :attributes => { :type => 'checkbox', - :name => 'issue_status[2][]', - :value => '1', + :name => 'issue_status[3][]', + :value => '5', :checked => 'checked' } # not allowed assert_tag :tag => 'input', :attributes => { :type => 'checkbox', - :name => 'issue_status[2][]', - :value => '3', + :name => 'issue_status[3][]', + :value => '2', + :checked => nil } + # unused + assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox', + :name => 'issue_status[4][]' } + end + + def test_get_edit_with_role_and_tracker_and_all_statuses + Workflow.delete_all + + get :edit, :role_id => 2, :tracker_id => 1, :used_statuses_only => '0' + assert_response :success + assert_template 'edit' + + assert_not_nil assigns(:statuses) + assert_equal IssueStatus.count, assigns(:statuses).size + + assert_tag :tag => 'input', :attributes => { :type => 'checkbox', + :name => 'issue_status[1][]', + :value => '1', :checked => nil } end diff --git a/test/unit/tracker_test.rb b/test/unit/tracker_test.rb index efc2aa7..f27550a 100644 --- a/test/unit/tracker_test.rb +++ b/test/unit/tracker_test.rb @@ -18,7 +18,7 @@ require File.dirname(__FILE__) + '/../test_helper' class TrackerTest < ActiveSupport::TestCase - fixtures :trackers, :workflows + fixtures :trackers, :workflows, :issue_statuses, :roles def test_copy_workflows source = Tracker.find(1) @@ -30,4 +30,20 @@ class TrackerTest < ActiveSupport::TestCase target.reload assert_equal 89, target.workflows.size end + + def test_issue_statuses + tracker = Tracker.find(1) + Workflow.delete_all + Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3) + Workflow.create!(:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 5) + + assert_kind_of Array, tracker.issue_statuses + assert_kind_of IssueStatus, tracker.issue_statuses.first + assert_equal [2, 3, 5], Tracker.find(1).issue_statuses.collect(&:id) + end + + def test_issue_statuses_empty + Workflow.delete_all("tracker_id = 1") + assert_equal [], Tracker.find(1).issue_statuses + end end