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;
}