Browse Source

fix: De-duplicate team resources in TeamManager

- Use resource ID as array key to prevent duplicate resources.
- Add logging for provider loading and exceptions.

Signed-off-by: nfebe <fenn25.fn@gmail.com>
fix/team-resource-deduplication
nfebe 4 months ago
parent
commit
860eb6e565
  1. 10
      lib/private/Teams/TeamManager.php

10
lib/private/Teams/TeamManager.php

@ -7,6 +7,7 @@
namespace OC\Teams; namespace OC\Teams;
use OC\AppFramework\Bootstrap\Coordinator; use OC\AppFramework\Bootstrap\Coordinator;
use OCA\Circles\CirclesManager; use OCA\Circles\CirclesManager;
use OCA\Circles\Exceptions\CircleNotFoundException; use OCA\Circles\Exceptions\CircleNotFoundException;
@ -19,6 +20,8 @@ use OCP\Teams\ITeamResourceProvider;
use OCP\Teams\Team; use OCP\Teams\Team;
use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface; use Psr\Container\NotFoundExceptionInterface;
use Psr\Log\LoggerInterface;
class TeamManager implements ITeamManager { class TeamManager implements ITeamManager {
@ -29,6 +32,7 @@ class TeamManager implements ITeamManager {
private Coordinator $bootContext, private Coordinator $bootContext,
private IURLGenerator $urlGenerator, private IURLGenerator $urlGenerator,
private ?CirclesManager $circlesManager, private ?CirclesManager $circlesManager,
private LoggerInterface $logger,
) { ) {
} }
@ -50,8 +54,10 @@ class TeamManager implements ITeamManager {
try { try {
/** @var ITeamResourceProvider $provider */ /** @var ITeamResourceProvider $provider */
$provider = Server::get($providerRegistration->getService()); $provider = Server::get($providerRegistration->getService());
$this->logger->info('Got team resource provider (id.name): ' . $provider->getId() . '.' .$provider->getName());
$this->providers[$provider->getId()] = $provider; $this->providers[$provider->getId()] = $provider;
} catch (NotFoundExceptionInterface|ContainerExceptionInterface $e) { } catch (NotFoundExceptionInterface|ContainerExceptionInterface $e) {
$this->logger->warning('Could not get team resource provider: ' . $e->getMessage());
} }
} }
return $this->providers; return $this->providers;
@ -78,7 +84,9 @@ class TeamManager implements ITeamManager {
$resources = []; $resources = [];
foreach ($this->getProviders() as $provider) { foreach ($this->getProviders() as $provider) {
array_push($resources, ...$provider->getSharedWith($teamId));
foreach ($provider->getSharedWith($teamId) as $resource) {
$resources[$resource->getId()] = $resource;
}
} }
return array_values($resources); return array_values($resources);

Loading…
Cancel
Save