diff app/models/member_role.rb @ 1298:4f746d8966dd redmine_2.3_integration

Merge from redmine-2.3 branch to create new branch redmine-2.3-integration
author Chris Cannam
date Fri, 14 Jun 2013 09:28:30 +0100
parents 622f24f53b42
children e248c7af89ec
line wrap: on
line diff
--- a/app/models/member_role.rb	Fri Jun 14 09:07:32 2013 +0100
+++ b/app/models/member_role.rb	Fri Jun 14 09:28:30 2013 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2012  Jean-Philippe Lang
+# Copyright (C) 2006-2013  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -21,8 +21,8 @@
 
   after_destroy :remove_member_if_empty
 
-  after_create :add_role_to_group_users
-  after_destroy :remove_role_from_group_users
+  after_create :add_role_to_group_users, :add_role_to_subprojects
+  after_destroy :remove_inherited_roles
 
   validates_presence_of :role
   validate :validate_role_member
@@ -44,21 +44,28 @@
   end
 
   def add_role_to_group_users
-    if member.principal.is_a?(Group)
+    if member.principal.is_a?(Group) && !inherited?
       member.principal.users.each do |user|
-        user_member = Member.find_by_project_id_and_user_id(member.project_id, user.id) || Member.new(:project_id => member.project_id, :user_id => user.id)
+        user_member = Member.find_or_new(member.project_id, user.id)
         user_member.member_roles << MemberRole.new(:role => role, :inherited_from => id)
         user_member.save!
       end
     end
   end
 
-  def remove_role_from_group_users
-    MemberRole.find(:all, :conditions => { :inherited_from => id }).group_by(&:member).each do |member, member_roles|
-      member_roles.each(&:destroy)
-      if member && member.user
-        Watcher.prune(:user => member.user, :project => member.project)
+  def add_role_to_subprojects
+    member.project.children.each do |subproject|
+      if subproject.inherit_members?
+        child_member = Member.find_or_new(subproject.id, member.user_id)
+        child_member.member_roles << MemberRole.new(:role => role, :inherited_from => id)
+        child_member.save!
       end
     end
   end
+
+  def remove_inherited_roles
+    MemberRole.where(:inherited_from => id).all.group_by(&:member).each do |member, member_roles|
+      member_roles.each(&:destroy)
+    end
+  end
 end