From c2a1ee615a112941eab2f4bc1bf6449f62dc9ff6 Mon Sep 17 00:00:00 2001 From: provokateurin Date: Tue, 21 Jul 2026 15:13:53 +0200 Subject: [PATCH] fix(TeamShareRecipientType): Defer getting CirclesManager class as it might not exist yet Signed-off-by: provokateurin --- core/Sharing/Recipient/TeamShareRecipientType.php | 15 +++++++++++---- .../Recipient/TeamShareRecipientTypeTest.php | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/Sharing/Recipient/TeamShareRecipientType.php b/core/Sharing/Recipient/TeamShareRecipientType.php index e5e455ea8c73d..9c3867aa02e96 100644 --- a/core/Sharing/Recipient/TeamShareRecipientType.php +++ b/core/Sharing/Recipient/TeamShareRecipientType.php @@ -20,6 +20,7 @@ use OCP\Interaction\Receivers\CircleReceiver; use OCP\IUser; use OCP\L10N\IFactory; +use OCP\Server; use OCP\Share\IShare; use OCP\Sharing\Icon\ShareIconSVG; use OCP\Sharing\Icon\ShareIconURL; @@ -34,15 +35,21 @@ * @template-implements IEventListener */ final class TeamShareRecipientType extends AShareRecipientTypeSearchCollaborator implements IEventListener { + private ?ITeamManager $teamManager = null; + public function __construct( IEventDispatcher $eventDispatcher, private readonly IDBConnection $dbConnection, - private readonly ITeamManager $teamManager, private readonly ISharingManager $manager, ) { $eventDispatcher->addServiceListener(DestroyingCircleEvent::class, self::class); } + // CirclesManager class is not registered yet when the class is instantiated. + private function getTeamManager(): ITeamManager { + return $this->teamManager ??= Server::get(ITeamManager::class); + } + #[\Override] public function getDisplayName(IFactory $l10nFactory): string { return $l10nFactory->get(Application::APP_ID)->t('Team'); @@ -50,7 +57,7 @@ public function getDisplayName(IFactory $l10nFactory): string { #[\Override] public function validateRecipient(string $recipient): bool { - return $this->teamManager->getTeam($recipient) instanceof Team; + return $this->getTeamManager()->getTeam($recipient) instanceof Team; } #[\Override] @@ -59,12 +66,12 @@ public function getRecipients(?IUser $currentUser, mixed $arguments): array { return []; } - return array_map(static fn (Team $team): string => $team->getId(), $this->teamManager->getTeamsForUser($currentUser->getUID())); + return array_map(static fn (Team $team): string => $team->getId(), $this->getTeamManager()->getTeamsForUser($currentUser->getUID())); } #[\Override] public function getRecipientDisplayName(string $recipient): ?string { - return $this->teamManager->getTeam($recipient)?->getDisplayName(); + return $this->getTeamManager()->getTeam($recipient)?->getDisplayName(); } #[\Override] diff --git a/tests/Core/Sharing/Recipient/TeamShareRecipientTypeTest.php b/tests/Core/Sharing/Recipient/TeamShareRecipientTypeTest.php index 82c9af1231c6f..a1c9c38a4018b 100644 --- a/tests/Core/Sharing/Recipient/TeamShareRecipientTypeTest.php +++ b/tests/Core/Sharing/Recipient/TeamShareRecipientTypeTest.php @@ -98,7 +98,7 @@ public function setUp(): void { $this->team2 = $this->createTeam($teamManager, 'team2'); $this->team3 = $this->createTeam($teamManager, 'team3'); - $this->recipientType = new TeamShareRecipientType(Server::get(IEventDispatcher::class), $this->dbConnection, $teamManager, $this->manager); + $this->recipientType = new TeamShareRecipientType(Server::get(IEventDispatcher::class), $this->dbConnection, $this->manager); } #[\Override]