diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2009-12-26 16:14:55 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2009-12-26 16:14:55 +0000 |
commit | 04455783a76e1a34e35c575fe3e7839bc1aa0609 (patch) | |
tree | a670bc732a93dd8a7014b5447b8a3b17abb20ee8 /app/models | |
parent | c36c924714cbbbf88f825b1513a0d22a3b513332 (diff) | |
download | redmine-04455783a76e1a34e35c575fe3e7839bc1aa0609.tar.gz redmine-04455783a76e1a34e35c575fe3e7839bc1aa0609.zip |
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
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/member_role.rb | 4 | ||||
-rw-r--r-- | app/models/project.rb | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/app/models/member_role.rb b/app/models/member_role.rb index 286659fc3..9c28d413d 100644 --- a/app/models/member_role.rb +++ b/app/models/member_role.rb @@ -30,6 +30,10 @@ class MemberRole < ActiveRecord::Base errors.add :role_id, :invalid if role && !role.member? end + def inherited? + !inherited_from.nil? + end + private def remove_member_if_empty diff --git a/app/models/project.rb b/app/models/project.rb index 4accf5a7c..490c290be 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -23,6 +23,7 @@ class Project < ActiveRecord::Base # 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})" @@ -583,10 +584,14 @@ class Project < ActiveRecord::Base # 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 |