diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb index 3c49de8d5..70932ebbc 100644 --- a/app/controllers/workflows_controller.rb +++ b/app/controllers/workflows_controller.rb @@ -66,14 +66,7 @@ class WorkflowsController < ApplicationController if @role && @tracker if request.post? - WorkflowPermission.destroy_all({:role_id => @role.id, :tracker_id => @tracker.id}) - (params[:permissions] || {}).each { |field, rule_by_status_id| - rule_by_status_id.each { |status_id, rule| - if rule.present? - WorkflowPermission.create(:role_id => @role.id, :tracker_id => @tracker.id, :old_status_id => status_id, :field_name => field, :rule => rule) - end - } - } + WorkflowPermission.replace_permissions(@tracker, @role, params[:permissions] || {}) redirect_to :action => 'permissions', :role_id => @role, :tracker_id => @tracker return end diff --git a/app/models/workflow_permission.rb b/app/models/workflow_permission.rb index 72e95543f..75cc4e46c 100644 --- a/app/models/workflow_permission.rb +++ b/app/models/workflow_permission.rb @@ -19,6 +19,22 @@ class WorkflowPermission < WorkflowRule validates_inclusion_of :rule, :in => %w(readonly required) validate :validate_field_name + # Replaces the workflow permissions for the given tracker and role + # + # Example: + # WorkflowPermission.replace_permissions role, tracker, {'due_date' => {'1' => 'readonly', '2' => 'required'}} + def self.replace_permissions(tracker, role, permissions) + destroy_all(:tracker_id => tracker.id, :role_id => role.id) + + permissions.each { |field, rule_by_status_id| + rule_by_status_id.each { |status_id, rule| + if rule.present? + WorkflowPermission.create(:role_id => role.id, :tracker_id => tracker.id, :old_status_id => status_id, :field_name => field, :rule => rule) + end + } + } + end + protected def validate_field_name