Fixed: project copy doesn't copy group memberships (#3975).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3250 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
c36c924714
commit
04455783a7
|
@ -30,6 +30,10 @@ class MemberRole < ActiveRecord::Base
|
||||||
errors.add :role_id, :invalid if role && !role.member?
|
errors.add :role_id, :invalid if role && !role.member?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def inherited?
|
||||||
|
!inherited_from.nil?
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def remove_member_if_empty
|
def remove_member_if_empty
|
||||||
|
|
|
@ -23,6 +23,7 @@ class Project < ActiveRecord::Base
|
||||||
# Specific overidden Activities
|
# Specific overidden Activities
|
||||||
has_many :time_entry_activities
|
has_many :time_entry_activities
|
||||||
has_many :members, :include => [:user, :roles], :conditions => "#{User.table_name}.type='User' AND #{User.table_name}.status=#{User::STATUS_ACTIVE}"
|
has_many :members, :include => [:user, :roles], :conditions => "#{User.table_name}.type='User' AND #{User.table_name}.status=#{User::STATUS_ACTIVE}"
|
||||||
|
has_many :memberships, :class_name => 'Member'
|
||||||
has_many :member_principals, :class_name => 'Member',
|
has_many :member_principals, :class_name => 'Member',
|
||||||
:include => :principal,
|
:include => :principal,
|
||||||
:conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{User::STATUS_ACTIVE})"
|
:conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{User::STATUS_ACTIVE})"
|
||||||
|
@ -583,10 +584,14 @@ class Project < ActiveRecord::Base
|
||||||
|
|
||||||
# Copies members from +project+
|
# Copies members from +project+
|
||||||
def copy_members(project)
|
def copy_members(project)
|
||||||
project.members.each do |member|
|
project.memberships.each do |member|
|
||||||
new_member = Member.new
|
new_member = Member.new
|
||||||
new_member.attributes = member.attributes.dup.except("id", "project_id", "created_on")
|
new_member.attributes = member.attributes.dup.except("id", "project_id", "created_on")
|
||||||
new_member.role_ids = member.role_ids.dup
|
# only copy non inherited roles
|
||||||
|
# inherited roles will be added when copying the group membership
|
||||||
|
role_ids = member.member_roles.reject(&:inherited?).collect(&:role_id)
|
||||||
|
next if role_ids.empty?
|
||||||
|
new_member.role_ids = role_ids
|
||||||
new_member.project = self
|
new_member.project = self
|
||||||
self.members << new_member
|
self.members << new_member
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,4 +2,7 @@
|
||||||
groups_users_001:
|
groups_users_001:
|
||||||
group_id: 10
|
group_id: 10
|
||||||
user_id: 8
|
user_id: 8
|
||||||
|
groups_users_002:
|
||||||
|
group_id: 11
|
||||||
|
user_id: 8
|
||||||
|
|
|
@ -37,3 +37,13 @@ member_roles_009:
|
||||||
role_id: 2
|
role_id: 2
|
||||||
member_id: 7
|
member_id: 7
|
||||||
inherited_from: 7
|
inherited_from: 7
|
||||||
|
member_roles_010:
|
||||||
|
id: 10
|
||||||
|
role_id: 2
|
||||||
|
member_id: 9
|
||||||
|
inherited_from:
|
||||||
|
member_roles_011:
|
||||||
|
id: 11
|
||||||
|
role_id: 2
|
||||||
|
member_id: 10
|
||||||
|
inherited_from: 10
|
||||||
|
|
|
@ -48,3 +48,15 @@ members_008:
|
||||||
id: 8
|
id: 8
|
||||||
user_id: 1
|
user_id: 1
|
||||||
mail_notification: true
|
mail_notification: true
|
||||||
|
members_009:
|
||||||
|
id: 9
|
||||||
|
created_on: 2006-07-19 19:35:33 +02:00
|
||||||
|
project_id: 2
|
||||||
|
user_id: 11
|
||||||
|
mail_notification: false
|
||||||
|
members_010:
|
||||||
|
id: 10
|
||||||
|
created_on: 2006-07-19 19:35:33 +02:00
|
||||||
|
project_id: 2
|
||||||
|
user_id: 8
|
||||||
|
mail_notification: false
|
||||||
|
|
|
@ -633,15 +633,15 @@ class ProjectTest < ActiveSupport::TestCase
|
||||||
assert_not_equal source_relation_cross_project.id, copied_relation.id
|
assert_not_equal source_relation_cross_project.id, copied_relation.id
|
||||||
end
|
end
|
||||||
|
|
||||||
should "copy members" do
|
should "copy memberships" do
|
||||||
assert @project.valid?
|
assert @project.valid?
|
||||||
assert @project.members.empty?
|
assert @project.members.empty?
|
||||||
assert @project.copy(@source_project)
|
assert @project.copy(@source_project)
|
||||||
|
|
||||||
assert_equal @source_project.members.size, @project.members.size
|
assert_equal @source_project.memberships.size, @project.memberships.size
|
||||||
@project.members.each do |member|
|
@project.memberships.each do |membership|
|
||||||
assert member
|
assert membership
|
||||||
assert_equal @project, member.project
|
assert_equal @project, membership.project
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue