diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb
index 333a38b66..793935a5e 100644
--- a/app/controllers/workflows_controller.rb
+++ b/app/controllers/workflows_controller.rb
@@ -22,6 +22,7 @@ class WorkflowsController < ApplicationController
self.main_menu = false
before_action :require_admin
+ before_action :find_trackers_roles_and_statuses_for_edit, only: [:edit, :update, :permissions, :update_permissions]
def index
@roles = Role.sorted.select(&:consider_workflow?)
@@ -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 { |field, rule_by_status_id|
rule_by_status_id.reject! {|status_id, rule| rule == 'no_change'}
}
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
@@ -93,28 +116,11 @@ class WorkflowsController < ApplicationController
@source_role = Role.find_by_id(params[:source_role_id].to_i)
end
@target_trackers = params[:target_tracker_ids].blank? ?
- nil : Tracker.where(:id => params[:target_tracker_ids]).to_a
+ nil : Tracker.where(:id => params[:target_tracker_ids]).to_a
@target_roles = params[:target_role_ids].blank? ?
- nil : Role.where(:id => params[:target_role_ids]).to_a
- 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
+ nil : Role.where(:id => params[:target_role_ids]).to_a
end
- private
-
def find_trackers_roles_and_statuses_for_edit
find_roles
find_trackers
diff --git a/app/views/issue_statuses/index.html.erb b/app/views/issue_statuses/index.html.erb
index b4802c241..c9f120cbd 100644
--- a/app/views/issue_statuses/index.html.erb
+++ b/app/views/issue_statuses/index.html.erb
@@ -26,7 +26,7 @@
<% unless WorkflowTransition.where('old_status_id = ? OR new_status_id = ?', status.id, status.id).exists? %>
- <%= l(:text_status_no_workflow) %> (<%= link_to l(:button_edit), workflows_edit_path(:used_statuses_only => 0) %>)
+ <%= l(:text_status_no_workflow) %> (<%= link_to l(:button_edit), edit_workflows_path(:used_statuses_only => 0) %>)
<% end %>
|
diff --git a/app/views/roles/index.html.erb b/app/views/roles/index.html.erb
index bc8cc9cc7..f76e90466 100644
--- a/app/views/roles/index.html.erb
+++ b/app/views/roles/index.html.erb
@@ -18,7 +18,7 @@
<% unless role.builtin? || role.workflow_rules.exists? %>
- <%= l(:text_role_no_workflow) %> (<%= link_to l(:button_edit), workflows_edit_path(:role_id => role) %>)
+ <%= l(:text_role_no_workflow) %> (<%= link_to l(:button_edit), edit_workflows_path(:role_id => role) %>)
<% end %>
|
@@ -36,4 +36,4 @@
<%= javascript_tag do %>
$(function() { $("table.roles tbody").positionedItems({items: ".givable"}); });
-<% end %>
\ No newline at end of file
+<% end %>
diff --git a/app/views/trackers/index.html.erb b/app/views/trackers/index.html.erb
index 20d09754d..e033d7dd6 100644
--- a/app/views/trackers/index.html.erb
+++ b/app/views/trackers/index.html.erb
@@ -22,7 +22,7 @@
<% unless tracker.workflow_rules.exists? %>
- <%= l(:text_tracker_no_workflow) %> (<%= link_to l(:button_edit), workflows_edit_path(:tracker_id => tracker) %>)
+ <%= l(:text_tracker_no_workflow) %> (<%= link_to l(:button_edit), edit_workflows_path(:tracker_id => tracker) %>)
<% end %>
|
diff --git a/app/views/workflows/copy.html.erb b/app/views/workflows/copy.html.erb
index 78997caf5..cd270a8db 100644
--- a/app/views/workflows/copy.html.erb
+++ b/app/views/workflows/copy.html.erb
@@ -1,6 +1,6 @@
-<%= title [l(:label_workflow), workflows_edit_path], l(:button_copy) %>
+<%= title [l(:label_workflow), edit_workflows_path], l(:button_copy) %>
-<%= form_tag({}, :id => 'workflow_copy_form') do %>
+<%= form_tag duplicate_workflows_path, method: :post, id: 'workflow_copy_form' do %>