summaryrefslogtreecommitdiffstats
path: root/app/controllers
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2021-04-13 09:01:44 +0000
committerGo MAEDA <maeda@farend.jp>2021-04-13 09:01:44 +0000
commitf2b17f77943959ea2a415f239ff50e2758c49859 (patch)
tree9bd47fb9865b780ab0959eb7693466527173d8dc /app/controllers
parent6c5a16daf858149933e161595cf98534ea2e445b (diff)
downloadredmine-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.rb90
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