# Specific overidden 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 :memberships, :class_name => 'Member'
has_many :member_principals, :class_name => 'Member',
:include => :principal,
:conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{User::STATUS_ACTIVE})"
# Copies members from +project+
def copy_members(project)
- project.members.each do |member|
+ project.memberships.each do |member|
new_member = Member.new
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
self.members << new_member
end
id: 8
user_id: 1
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
assert_not_equal source_relation_cross_project.id, copied_relation.id
end
- should "copy members" do
+ should "copy memberships" do
assert @project.valid?
assert @project.members.empty?
assert @project.copy(@source_project)
- assert_equal @source_project.members.size, @project.members.size
- @project.members.each do |member|
- assert member
- assert_equal @project, member.project
+ assert_equal @source_project.memberships.size, @project.memberships.size
+ @project.memberships.each do |membership|
+ assert membership
+ assert_equal @project, membership.project
end
end