diff options
author | Go MAEDA <maeda@farend.jp> | 2021-04-13 09:01:44 +0000 |
---|---|---|
committer | Go MAEDA <maeda@farend.jp> | 2021-04-13 09:01:44 +0000 |
commit | f2b17f77943959ea2a415f239ff50e2758c49859 (patch) | |
tree | 9bd47fb9865b780ab0959eb7693466527173d8dc /app/controllers | |
parent | 6c5a16daf858149933e161595cf98534ea2e445b (diff) | |
download | redmine-f2b17f77943959ea2a415f239ff50e2758c49859.tar.gz redmine-f2b17f77943959ea2a415f239ff50e2758c49859.zip |
Clean-up workflows controller (#33337).
Patch by Vincent Robert and Marius BALTEANU.
git-svn-id: http://svn.redmine.org/redmine/trunk@20941 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/workflows_controller.rb | 90 |
1 files changed, 48 insertions, 42 deletions
diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb index 37b4c0f4b..d396af6f3 100644 --- a/app/controllers/workflows_controller.rb +++ b/app/controllers/workflows_controller.rb @@ -20,6 +20,7 @@ class WorkflowsController < ApplicationController layout 'admin' self.main_menu = false + before_action :find_trackers_roles_and_statuses_for_edit, only: [:edit, :update, :permissions, :update_permissions] before_action :require_admin @@ -30,9 +31,19 @@ class WorkflowsController < ApplicationController end def edit - find_trackers_roles_and_statuses_for_edit + if @trackers && @roles && @statuses.any? + workflows = WorkflowTransition. + where(:role_id => @roles.map(&:id), :tracker_id => @trackers.map(&:id)). + preload(:old_status, :new_status) + @workflows = {} + @workflows['always'] = workflows.select {|w| !w.author && !w.assignee} + @workflows['author'] = workflows.select {|w| w.author} + @workflows['assignee'] = workflows.select {|w| w.assignee} + end + end - if request.post? && @roles && @trackers && params[:transitions] + def update + if @roles && @trackers && params[:transitions] transitions = params[:transitions].deep_dup transitions.each do |old_status_id, transitions_by_new_status| transitions_by_new_status.each do |new_status_id, transition_by_rule| @@ -41,47 +52,59 @@ class WorkflowsController < ApplicationController end WorkflowTransition.replace_transitions(@trackers, @roles, transitions) flash[:notice] = l(:notice_successful_update) - redirect_to_referer_or workflows_edit_path - return - end - - if @trackers && @roles && @statuses.any? - workflows = WorkflowTransition. - where(:role_id => @roles.map(&:id), :tracker_id => @trackers.map(&:id)). - preload(:old_status, :new_status) - @workflows = {} - @workflows['always'] = workflows.select {|w| !w.author && !w.assignee} - @workflows['author'] = workflows.select {|w| w.author} - @workflows['assignee'] = workflows.select {|w| w.assignee} end + redirect_to_referer_or edit_workflows_path end def permissions - find_trackers_roles_and_statuses_for_edit + if @roles && @trackers + @fields = (Tracker::CORE_FIELDS_ALL - @trackers.map(&:disabled_core_fields).reduce(:&)).map {|field| [field, l("field_"+field.sub(/_id$/, ''))]} + @custom_fields = @trackers.map(&:custom_fields).flatten.uniq.sort + @permissions = WorkflowPermission.rules_by_status_id(@trackers, @roles) + @statuses.each {|status| @permissions[status.id] ||= {}} + end + end - if request.post? && @roles && @trackers && params[:permissions] + def update_permissions + if @roles && @trackers && params[:permissions] permissions = params[:permissions].deep_dup permissions.each do |field, rule_by_status_id| rule_by_status_id.reject! {|status_id, rule| rule == 'no_change'} end WorkflowPermission.replace_permissions(@trackers, @roles, permissions) flash[:notice] = l(:notice_successful_update) - redirect_to_referer_or workflows_permissions_path - return end + redirect_to_referer_or permissions_workflows_path + end - if @roles && @trackers - @fields = (Tracker::CORE_FIELDS_ALL - @trackers.map(&:disabled_core_fields).reduce(:&)).map {|field| [field, l("field_"+field.sub(/_id$/, ''))]} - @custom_fields = @trackers.map(&:custom_fields).flatten.uniq.sort - @permissions = WorkflowPermission.rules_by_status_id(@trackers, @roles) - @statuses.each {|status| @permissions[status.id] ||= {}} + def copy + find_sources_and_targets + end + + def duplicate + find_sources_and_targets + if params[:source_tracker_id].blank? || params[:source_role_id].blank? || + (@source_tracker.nil? && @source_role.nil?) + flash.now[:error] = l(:error_workflow_copy_source) + render :copy + elsif @target_trackers.blank? || @target_roles.blank? + flash.now[:error] = l(:error_workflow_copy_target) + render :copy + else + WorkflowRule.copy(@source_tracker, @source_role, @target_trackers, @target_roles) + flash[:notice] = l(:notice_successful_update) + redirect_to copy_workflows_path( + :source_tracker_id => @source_tracker, + :source_role_id => @source_role + ) end end - def copy + private + + def find_sources_and_targets @roles = Role.sorted.select(&:consider_workflow?) @trackers = Tracker.sorted - if params[:source_tracker_id].blank? || params[:source_tracker_id] == 'any' @source_tracker = nil else @@ -104,25 +127,8 @@ class WorkflowsController < ApplicationController else Role.where(:id => params[:target_role_ids]).to_a end - if request.post? - if params[:source_tracker_id].blank? || params[:source_role_id].blank? || - (@source_tracker.nil? && @source_role.nil?) - flash.now[:error] = l(:error_workflow_copy_source) - elsif @target_trackers.blank? || @target_roles.blank? - flash.now[:error] = l(:error_workflow_copy_target) - else - WorkflowRule.copy(@source_tracker, @source_role, @target_trackers, @target_roles) - flash[:notice] = l(:notice_successful_update) - redirect_to( - workflows_copy_path(:source_tracker_id => @source_tracker, - :source_role_id => @source_role) - ) - end - end end - private - def find_trackers_roles_and_statuses_for_edit find_roles find_trackers |