diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml index 33204e7699da1..e32138a838b60 100644 --- a/build/psalm-baseline.xml +++ b/build/psalm-baseline.xml @@ -4184,8 +4184,14 @@ + + circleToTeam(...), $this->circlesManager->probeCircles())]]> + + + + - + diff --git a/lib/private/Teams/TeamManager.php b/lib/private/Teams/TeamManager.php index 2a3d830ee1713..c466b1d20c088 100644 --- a/lib/private/Teams/TeamManager.php +++ b/lib/private/Teams/TeamManager.php @@ -79,7 +79,7 @@ public function getSharedWith(string $teamId, string $userId): array { $probe = new CircleProbe(); $probe->mustBeMember(); - if ($this->getTeam($teamId, $userId, $probe) === null) { + if ($this->getTeamInternal($teamId, $userId, $probe) === null) { return []; } @@ -119,16 +119,10 @@ public function getTeamsForResource(string $providerId, string $resourceId, stri } $provider = $this->getProvider($providerId); - return array_map(function (Circle $team) { - return new Team( - $team->getSingleId(), - $team->getDisplayName(), - $this->urlGenerator->linkToRouteAbsolute('contacts.contacts.directcircle', ['singleId' => $team->getSingleId()]), - ); - }, $this->getTeams($provider->getTeamsForResource($resourceId), $userId)); + return array_map($this->circleToTeam(...), $this->getTeams($provider->getTeamsForResource($resourceId), $userId)); } - private function getTeam(string $teamId, string $userId, ?CircleProbe $probe = null): ?Circle { + private function getTeamInternal(string $teamId, string $userId, ?CircleProbe $probe = null): ?Circle { if (!$this->hasTeamSupport()) { return null; } @@ -149,7 +143,7 @@ private function getTeam(string $teamId, string $userId, ?CircleProbe $probe = n */ #[\Override] public function getMembersOfTeam(string $teamId, string $userId): array { - $team = $this->getTeam($teamId, $userId); + $team = $this->getTeamInternal($teamId, $userId); if ($team === null) { return []; } @@ -182,15 +176,34 @@ public function getTeamsForUser(string $userId): array { $federatedUser = $this->circlesManager->getFederatedUser($userId, Member::TYPE_USER); $this->circlesManager->startSession($federatedUser); - $teams = []; - foreach ($this->circlesManager->probeCircles() as $team) { - $teams[] = new Team( - $team->getSingleId(), - $team->getDisplayName(), - $this->urlGenerator->linkToRouteAbsolute('contacts.contacts.directcircle', ['singleId' => $team->getSingleId()]), - ); + + return array_map($this->circleToTeam(...), $this->circlesManager->probeCircles()); + } + + #[\Override] + public function getTeam(string $teamId, ?string $userId = null): ?Team { + if (!$this->hasTeamSupport()) { + return null; + } + + if ($userId !== null) { + $this->circlesManager->startSession($this->circlesManager->getLocalFederatedUser($userId)); + } else { + $this->circlesManager->startSuperSession(); } - return $teams; + try { + return $this->circleToTeam($this->circlesManager->getCircle($teamId)); + } catch (CircleNotFoundException) { + return null; + } + } + + private function circleToTeam(Circle $circle): Team { + return new Team( + $circle->getSingleId(), + $circle->getDisplayName(), + $this->urlGenerator->linkToRouteAbsolute('contacts.contacts.directcircle', ['singleId' => $circle->getSingleId()]), + ); } } diff --git a/lib/public/Teams/ITeamManager.php b/lib/public/Teams/ITeamManager.php index b8a8f9cbe5d7f..e5a14aef16214 100644 --- a/lib/public/Teams/ITeamManager.php +++ b/lib/public/Teams/ITeamManager.php @@ -76,4 +76,9 @@ public function getMembersOfTeam(string $teamId, string $userId): array; * @since 34.0.0 */ public function hasTeamSupport(): bool; + + /** + * @since 35.0.0 + */ + public function getTeam(string $teamId, ?string $userId = null): ?Team; }