From c8651c3cdac125fc51d94e2ea570666ed15b1cb0 Mon Sep 17 00:00:00 2001 From: provokateurin Date: Mon, 13 Jul 2026 09:14:44 +0200 Subject: [PATCH 1/2] refactor(TeamManager): Deduplicate mapping circle to team Signed-off-by: provokateurin --- build/psalm-baseline.xml | 8 +++++++- lib/private/Teams/TeamManager.php | 26 ++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) 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..c00ae77a65284 100644 --- a/lib/private/Teams/TeamManager.php +++ b/lib/private/Teams/TeamManager.php @@ -119,13 +119,7 @@ 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 { @@ -182,15 +176,15 @@ 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 $teams; + return array_map($this->circleToTeam(...), $this->circlesManager->probeCircles()); + } + + private function circleToTeam(Circle $circle): Team { + return new Team( + $circle->getSingleId(), + $circle->getDisplayName(), + $this->urlGenerator->linkToRouteAbsolute('contacts.contacts.directcircle', ['singleId' => $circle->getSingleId()]), + ); } } From a974f0b5f39b1fb3a4d3ea796e4faa68163ecb7e Mon Sep 17 00:00:00 2001 From: provokateurin Date: Mon, 13 Jul 2026 09:15:19 +0200 Subject: [PATCH 2/2] feat(ITeamManager): Add getTeam method Signed-off-by: provokateurin --- lib/private/Teams/TeamManager.php | 25 ++++++++++++++++++++++--- lib/public/Teams/ITeamManager.php | 5 +++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/private/Teams/TeamManager.php b/lib/private/Teams/TeamManager.php index c00ae77a65284..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 []; } @@ -122,7 +122,7 @@ public function getTeamsForResource(string $providerId, string $resourceId, stri 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; } @@ -143,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 []; } @@ -180,6 +180,25 @@ public function getTeamsForUser(string $userId): array { 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(); + } + + try { + return $this->circleToTeam($this->circlesManager->getCircle($teamId)); + } catch (CircleNotFoundException) { + return null; + } + } + private function circleToTeam(Circle $circle): Team { return new Team( $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; }