| 76 | 76 |     end | 
  | 77 | 77 |   end | 
  | 78 | 78 |  | 
  | 79 |  | 	# Set member role ids ignoring any change to roles that | 
  | 80 |  | 	# user is not allowed to manage | 
  |  | 79 |   # Set member role ids ignoring any change to roles that | 
  |  | 80 |   # user is not allowed to manage | 
  | 81 | 81 |   def set_editable_role_ids(ids, user=User.current) | 
  | 82 | 82 |     ids = (ids || []).collect(&:to_i) - [0] | 
  | 83 | 83 |     editable_role_ids = user.managed_roles(project).map(&:id) | 
  | ... | ... |  | 
  | 86 | 86 |     self.role_ids = untouched_role_ids + touched_role_ids | 
  | 87 | 87 |   end | 
  | 88 | 88 |  | 
  | 89 |  | 	# Returns true if one of the member roles is inherited | 
  |  | 89 |   # Returns true if one of the member roles is inherited | 
  | 90 | 90 |   def any_inherited_role? | 
  | 91 | 91 |     member_roles.any? {|mr| mr.inherited_from} | 
  | 92 | 92 |   end | 
  | 93 | 93 |  | 
  | 94 |  | 	# Returns true if the member has the role and if it's inherited | 
  |  | 94 |   # Returns true if the member has the role and if it's inherited | 
  | 95 | 95 |   def has_inherited_role?(role) | 
  | 96 | 96 |     member_roles.any? {|mr| mr.role_id == role.id && mr.inherited_from.present?} | 
  | 97 | 97 |   end | 
  | 98 | 98 |  | 
  | 99 |  | 	# Returns true if the member's role is editable by user | 
  |  | 99 |   # Returns true if the member's role is editable by user | 
  | 100 | 100 |   def role_editable?(role, user=User.current) | 
  | 101 | 101 |     if has_inherited_role?(role) | 
  | 102 | 102 |       false | 
  | ... | ... |  | 
  | 105 | 105 |     end | 
  | 106 | 106 |   end | 
  | 107 | 107 |  | 
  | 108 |  | 	# Returns true if the member is deletable by user | 
  |  | 108 |   # Returns true if the member is deletable by user | 
  | 109 | 109 |   def deletable?(user=User.current) | 
  | 110 | 110 |     if any_inherited_role? | 
  | 111 | 111 |       false | 
  | ... | ... |  | 
  | 114 | 114 |     end | 
  | 115 | 115 |   end | 
  | 116 | 116 |  | 
  | 117 |  | 	# Destroys the member | 
  |  | 117 |   # Destroys the member | 
  | 118 | 118 |   def destroy | 
  | 119 | 119 |     member_roles.reload.each(&:destroy_without_member_removal) | 
  | 120 | 120 |     super | 
  | 121 | 121 |   end | 
  | 122 | 122 |  | 
  | 123 |  | 	# Returns true if the member is user or is a group | 
  | 124 |  | 	# that includes user | 
  |  | 123 |   # Returns true if the member is user or is a group | 
  |  | 124 |   # that includes user | 
  | 125 | 125 |   def include?(user) | 
  | 126 | 126 |     if principal.is_a?(Group) | 
  | 127 | 127 |       !user.nil? && user.groups.include?(principal) |