comparison app/models/member.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
comparison
equal deleted inserted replaced
1297:0a574315af3e 1298:4f746d8966dd
1 # Redmine - project management software 1 # Redmine - project management software
2 # Copyright (C) 2006-2012 Jean-Philippe Lang 2 # Copyright (C) 2006-2013 Jean-Philippe Lang
3 # 3 #
4 # This program is free software; you can redistribute it and/or 4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License 5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2 6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version. 7 # of the License, or (at your option) any later version.
25 validates_presence_of :principal, :project 25 validates_presence_of :principal, :project
26 validates_uniqueness_of :user_id, :scope => :project_id 26 validates_uniqueness_of :user_id, :scope => :project_id
27 validate :validate_role 27 validate :validate_role
28 28
29 before_destroy :set_issue_category_nil 29 before_destroy :set_issue_category_nil
30 after_destroy :unwatch_from_permission_change
31 30
32 def role 31 def role
33 end 32 end
34 33
35 def role= 34 def role=
50 new_role_ids.each {|id| member_roles << MemberRole.new(:role_id => id) } 49 new_role_ids.each {|id| member_roles << MemberRole.new(:role_id => id) }
51 # Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy) 50 # Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy)
52 member_roles_to_destroy = member_roles.select {|mr| !ids.include?(mr.role_id)} 51 member_roles_to_destroy = member_roles.select {|mr| !ids.include?(mr.role_id)}
53 if member_roles_to_destroy.any? 52 if member_roles_to_destroy.any?
54 member_roles_to_destroy.each(&:destroy) 53 member_roles_to_destroy.each(&:destroy)
55 unwatch_from_permission_change
56 end 54 end
57 end 55 end
58 56
59 def <=>(member) 57 def <=>(member)
60 a, b = roles.sort.first, member.roles.sort.first 58 a, b = roles.sort.first, member.roles.sort.first
95 @membership = id.present? ? Member.find(id) : Member.new(:principal => principal) 93 @membership = id.present? ? Member.find(id) : Member.new(:principal => principal)
96 @membership.attributes = new_attributes 94 @membership.attributes = new_attributes
97 @membership 95 @membership
98 end 96 end
99 97
98 # Finds or initilizes a Member for the given project and principal
99 def self.find_or_new(project, principal)
100 project_id = project.is_a?(Project) ? project.id : project
101 principal_id = principal.is_a?(Principal) ? principal.id : principal
102
103 member = Member.find_by_project_id_and_user_id(project_id, principal_id)
104 member ||= Member.new(:project_id => project_id, :user_id => principal_id)
105 member
106 end
107
100 protected 108 protected
101 109
102 def validate_role 110 def validate_role
103 errors.add_on_empty :role if member_roles.empty? && roles.empty? 111 errors.add_on_empty :role if member_roles.empty? && roles.empty?
104 end 112 end
105
106 private
107
108 # Unwatch things that the user is no longer allowed to view inside project
109 def unwatch_from_permission_change
110 if user
111 Watcher.prune(:user => user, :project => project)
112 end
113 end
114 end 113 end