Mercurial > hg > soundsoftware-site
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 |