improve team member handling (#3097)
This commit is contained in:
@@ -579,12 +579,12 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
throw new \InvalidArgumentException('Cannot set foreign user membership');
|
||||
}
|
||||
|
||||
// when using the API an invalid user id does not trigger the validation first, but after calling this method :-(
|
||||
// when using the API an invalid Team ID triggers the validation too late
|
||||
if ($member->getTeam() === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (null !== ($existing = $this->findMember($member))) {
|
||||
if (null !== $this->findMemberByTeam($member->getTeam())) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -592,33 +592,35 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
$member->getTeam()->addMember($member);
|
||||
}
|
||||
|
||||
private function findMemberByTeam(Team $team): ?TeamMember
|
||||
{
|
||||
foreach ($this->memberships as $member) {
|
||||
if ($member->getTeam() === $team) {
|
||||
return $member;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function removeMembership(TeamMember $member): void
|
||||
{
|
||||
if (null === ($member = $this->findMember($member))) {
|
||||
if (!$this->memberships->contains($member)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->memberships->removeElement($member);
|
||||
$member->getUser()->removeMembership($member);
|
||||
$member->getTeam()->removeMember($member);
|
||||
$member->setUser(null);
|
||||
$member->setTeam(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Indexed by ID to use it within collection type forms.
|
||||
*
|
||||
* @return TeamMember[]
|
||||
* @return Collection<TeamMember>
|
||||
*/
|
||||
public function getMemberships(): iterable
|
||||
public function getMemberships(): Collection
|
||||
{
|
||||
$all = [];
|
||||
foreach ($this->memberships as $member) {
|
||||
if ($member->getId() === null) {
|
||||
$all[] = $member;
|
||||
} else {
|
||||
$all[$member->getId()] = $member;
|
||||
}
|
||||
}
|
||||
|
||||
return $all;
|
||||
return $this->memberships;
|
||||
}
|
||||
|
||||
public function hasMembership(TeamMember $member): bool
|
||||
@@ -626,17 +628,6 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
return $this->memberships->contains($member);
|
||||
}
|
||||
|
||||
private function findMember(TeamMember $member): ?TeamMember
|
||||
{
|
||||
foreach ($this->memberships as $oldMember) {
|
||||
if ($oldMember->getUser() === $member->getUser() && $oldMember->getTeam() === $member->getTeam()) {
|
||||
return $oldMember;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the user is member of any team.
|
||||
*
|
||||
@@ -750,10 +741,8 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
|
||||
public function isTeamleadOf(Team $team): bool
|
||||
{
|
||||
foreach ($this->memberships as $membership) {
|
||||
if ($membership->getTeam() === $team) {
|
||||
return $membership->isTeamlead();
|
||||
}
|
||||
if (null !== ($member = $this->findMemberByTeam($team))) {
|
||||
return $member->isTeamlead();
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -830,10 +819,7 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
return $this->auth === null || $this->auth === self::AUTH_INTERNAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function addRole($role)
|
||||
public function addRole(string $role)
|
||||
{
|
||||
$role = strtoupper($role);
|
||||
if ($role === static::DEFAULT_ROLE) {
|
||||
|
||||
Reference in New Issue
Block a user