1
0
mirror of https://github.com/meineerde/redmine.git synced 2025-12-19 15:01:14 +00:00

Use regular instance methods instead of association extensions.

Rails 5.1 seems to mess things up in this particular case (role.workflow_rules.copy calls the extension declare in Tracker model).

git-svn-id: http://svn.redmine.org/redmine/trunk@16597 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2017-06-03 08:04:13 +00:00
parent f6defca16d
commit 44c748f968
7 changed files with 17 additions and 8 deletions

View File

@ -60,7 +60,7 @@ class RolesController < ApplicationController
if request.post? && @role.save if request.post? && @role.save
# workflow copy # workflow copy
if !params[:copy_workflow_from].blank? && (copy_from = Role.find_by_id(params[:copy_workflow_from])) if !params[:copy_workflow_from].blank? && (copy_from = Role.find_by_id(params[:copy_workflow_from]))
@role.workflow_rules.copy(copy_from) @role.copy_workflow_rules(copy_from)
end end
flash[:notice] = l(:notice_successful_create) flash[:notice] = l(:notice_successful_create)
redirect_to roles_path redirect_to roles_path

View File

@ -44,7 +44,7 @@ class TrackersController < ApplicationController
if @tracker.save if @tracker.save
# workflow copy # workflow copy
if !params[:copy_workflow_from].blank? && (copy_from = Tracker.find_by_id(params[:copy_workflow_from])) if !params[:copy_workflow_from].blank? && (copy_from = Tracker.find_by_id(params[:copy_workflow_from]))
@tracker.workflow_rules.copy(copy_from) @tracker.copy_workflow_rules(copy_from)
end end
flash[:notice] = l(:notice_successful_create) flash[:notice] = l(:notice_successful_create)
redirect_to trackers_path redirect_to trackers_path

View File

@ -61,7 +61,8 @@ class Role < ActiveRecord::Base
before_destroy :check_deletable before_destroy :check_deletable
has_many :workflow_rules, :dependent => :delete_all do has_many :workflow_rules, :dependent => :delete_all do
def copy(source_role) def copy(source_role)
WorkflowRule.copy(nil, source_role, nil, proxy_association.owner) ActiveSupport::Deprecation.warn "role.workflow_rules.copy is deprecated and will be removed in Redmine 4.0, use role.copy_worflow_rules instead"
proxy_association.owner.copy_workflow_rules(source_role)
end end
end end
has_and_belongs_to_many :custom_fields, :join_table => "#{table_name_prefix}custom_fields_roles#{table_name_suffix}", :foreign_key => "role_id" has_and_belongs_to_many :custom_fields, :join_table => "#{table_name_prefix}custom_fields_roles#{table_name_suffix}", :foreign_key => "role_id"
@ -261,6 +262,10 @@ class Role < ActiveRecord::Base
self self
end end
def copy_workflow_rules(source_role)
WorkflowRule.copy(nil, source_role, nil, self)
end
# Find all the roles that can be given to a project member # Find all the roles that can be given to a project member
def self.find_all_givable def self.find_all_givable
Role.givable.to_a Role.givable.to_a

View File

@ -29,10 +29,10 @@ class Tracker < ActiveRecord::Base
has_many :issues has_many :issues
has_many :workflow_rules, :dependent => :delete_all do has_many :workflow_rules, :dependent => :delete_all do
def copy(source_tracker) def copy(source_tracker)
WorkflowRule.copy(source_tracker, nil, proxy_association.owner, nil) ActiveSupport::Deprecation.warn "tracker.workflow_rules.copy is deprecated and will be removed in Redmine 4.0, use tracker.copy_worflow_rules instead"
proxy_association.owner.copy_workflow_rules(source_tracker)
end end
end end
has_and_belongs_to_many :projects has_and_belongs_to_many :projects
has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => "#{table_name_prefix}custom_fields_trackers#{table_name_suffix}", :association_foreign_key => 'custom_field_id' has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => "#{table_name_prefix}custom_fields_trackers#{table_name_suffix}", :association_foreign_key => 'custom_field_id'
acts_as_positioned acts_as_positioned
@ -121,6 +121,10 @@ class Tracker < ActiveRecord::Base
core_fields core_fields
end end
def copy_workflow_rules(source_tracker)
WorkflowRule.copy(source_tracker, nil, self, nil)
end
# Returns the fields that are disabled for all the given trackers # Returns the fields that are disabled for all the given trackers
def self.disabled_core_fields(trackers) def self.disabled_core_fields(trackers)
if trackers.present? if trackers.present?

View File

@ -29,7 +29,7 @@ class WorkflowRule < ActiveRecord::Base
# Copies workflows from source to targets # Copies workflows from source to targets
def self.copy(source_tracker, source_role, target_trackers, target_roles) def self.copy(source_tracker, source_role, target_trackers, target_roles)
unless source_tracker.is_a?(Tracker) || source_role.is_a?(Role) unless source_tracker.is_a?(Tracker) || source_role.is_a?(Role)
raise ArgumentError.new("source_tracker or source_role must be specified") raise ArgumentError.new("source_tracker or source_role must be specified, given: #{source_tracker.class.name} and #{source_role.class.name}")
end end
target_trackers = [target_trackers].flatten.compact target_trackers = [target_trackers].flatten.compact

View File

@ -59,7 +59,7 @@ class RoleTest < ActiveSupport::TestCase
target = Role.new(:name => 'Target') target = Role.new(:name => 'Target')
assert target.save assert target.save
target.workflow_rules.copy(source) target.copy_workflow_rules(source)
target.reload target.reload
assert_equal rule_count, target.workflow_rules.size assert_equal rule_count, target.workflow_rules.size
end end

View File

@ -47,7 +47,7 @@ class TrackerTest < ActiveSupport::TestCase
target = Tracker.new(:name => 'Target', :default_status_id => 1) target = Tracker.new(:name => 'Target', :default_status_id => 1)
assert target.save assert target.save
target.workflow_rules.copy(source) target.copy_workflow_rules(source)
target.reload target.reload
assert_equal rules_count, target.workflow_rules.size assert_equal rules_count, target.workflow_rules.size
end end