diff --git a/composer.lock b/composer.lock index c1615470..36e65bda 100644 --- a/composer.lock +++ b/composer.lock @@ -4740,5 +4740,5 @@ "platform-overrides": { "php": "7.4" }, - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.3.0" } diff --git a/lib/Command/Test.php b/lib/Command/Test.php index d2418048..6c8ec8d9 100644 --- a/lib/Command/Test.php +++ b/lib/Command/Test.php @@ -34,12 +34,15 @@ use Exception; use OC\Core\Command\Base; use OCA\Circles\CirclesManager; +use OCA\RelatedResources\Exceptions\RelatedResourceProviderNotFound; use OCA\RelatedResources\Service\RelatedService; use OCA\RelatedResources\Tools\Traits\TStringTools; use OCP\ICache; use OCP\ICacheFactory; use OCP\IConfig; use OCP\IUserManager; +use OCP\Server; +use Psr\Container\ContainerExceptionInterface; use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputArgument; @@ -98,7 +101,7 @@ protected function configure() { * @param OutputInterface $output * * @return int - * @throws \OCA\RelatedResources\Exceptions\RelatedResourceProviderNotFound + * @throws RelatedResourceProviderNotFound */ protected function execute(InputInterface $input, OutputInterface $output): int { $userId = $input->getArgument('userId'); @@ -116,10 +119,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int $userId = $user->getUID(); - /** @var CirclesManager $circleManager */ try { - $circleManager = \OC::$server->get(CirclesManager::class); - } catch (Exception $e) { + /** @var CirclesManager $circleManager */ + $circleManager = Server::get(CirclesManager::class); + } catch (ContainerExceptionInterface $e) { throw new Exception('Circles needs to be enabled'); } diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php index 1e01aaaf..cf1be279 100755 --- a/lib/Controller/ApiController.php +++ b/lib/Controller/ApiController.php @@ -43,6 +43,8 @@ use OCP\AppFramework\OCSController; use OCP\IRequest; use OCP\IUserSession; +use OCP\Server; +use Psr\Container\ContainerExceptionInterface; use Psr\Log\LoggerInterface; class ApiController extends OcsController { @@ -70,8 +72,8 @@ public function __construct( $this->relatedService = $relatedService; $this->configService = $configService; try { - $this->circlesManager = \OC::$server->get(CirclesManager::class); - } catch (Exception $e) { + $this->circlesManager = Server::get(CirclesManager::class); + } catch (ContainerExceptionInterface $e) { } } diff --git a/lib/Db/CoreQueryBuilder.php b/lib/Db/CoreQueryBuilder.php index 420f223a..fb0ff045 100644 --- a/lib/Db/CoreQueryBuilder.php +++ b/lib/Db/CoreQueryBuilder.php @@ -31,9 +31,6 @@ namespace OCA\RelatedResources\Db; -use OC\DB\Connection; -use OC\DB\SchemaWrapper; -use OCA\RelatedResources\AppInfo\Application; use OCA\RelatedResources\Service\ConfigService; /** @@ -53,11 +50,7 @@ class CoreQueryBuilder { public const TABLE_CAL_OBJECTS = 'calendarobjects'; public const TABLE_CAL_OBJ_PROPS = 'calendarobjects_props'; - protected ConfigService $configService; - private array $tables = [ - ]; - public static array $externalTables = [ self::TABLE_FILES_SHARE => [ @@ -122,50 +115,4 @@ public function __construct(ConfigService $configService) { public function getQueryBuilder(): CoreRequestBuilder { return new CoreRequestBuilder(); } - - - /** - * - */ - public function cleanDatabase(): void { - foreach ($this->tables as $table) { - $qb = $this->getQueryBuilder(); - $qb->delete($table); - $qb->execute(); - } - } - - /** - * - */ - public function uninstall(): void { - $this->uninstallAppTables(); - $this->uninstallFromMigrations(); - $this->configService->unsetAppConfig(); - } - - /** - * this just empty all tables from the app. - */ - public function uninstallAppTables(): void { - $dbConn = \OC::$server->get(Connection::class); - $schema = new SchemaWrapper($dbConn); - - foreach ($this->tables as $table) { - if ($schema->hasTable($table)) { - $schema->dropTable($table); - } - } - - $schema->performDropTableCalls(); - } - - - public function uninstallFromMigrations(): void { - $qb = $this->getQueryBuilder(); - $qb->delete('migrations'); - $qb->limit('app', Application::APP_ID); - - $qb->execute(); - } } diff --git a/lib/ILinkWeightCalculator.php b/lib/ILinkWeightCalculator.php index 71c21dec..70e63561 100644 --- a/lib/ILinkWeightCalculator.php +++ b/lib/ILinkWeightCalculator.php @@ -33,8 +33,8 @@ interface ILinkWeightCalculator { /** - * @param IRelatedResource[] $paths + * @param IRelatedResource $current * @param IRelatedResource[] $result */ - public function weight(array $paths, array &$result): void; + public function weight(IRelatedResource $current, array &$result): void; } diff --git a/lib/LinkWeightCalculators/AncienShareWeightCalculator.php b/lib/LinkWeightCalculators/AncienShareWeightCalculator.php index 606a3e26..a13b35f7 100644 --- a/lib/LinkWeightCalculators/AncienShareWeightCalculator.php +++ b/lib/LinkWeightCalculators/AncienShareWeightCalculator.php @@ -31,6 +31,7 @@ namespace OCA\RelatedResources\LinkWeightCalculators; use OCA\RelatedResources\ILinkWeightCalculator; +use OCA\RelatedResources\IRelatedResource; use OCA\RelatedResources\Model\RelatedResource; use OCA\RelatedResources\Tools\Traits\TArrayTools; @@ -46,46 +47,38 @@ class AncienShareWeightCalculator implements ILinkWeightCalculator { /** * @inheritDoc */ - public function weight(array $paths, array &$result): void { - if (sizeof($paths) === 0) { + public function weight(IRelatedResource $current, array &$result): void { + if (!$current->hasMeta(RelatedResource::LINK_CREATION)) { return; } - foreach ($paths as $path) { - if (!$path->hasMeta(RelatedResource::LINK_CREATION)) { + foreach ($result as $entry) { + if (!$entry->hasMeta(RelatedResource::LINK_CREATION)) { continue; } - foreach ($result as $entry) { - if (!$entry->hasMeta(RelatedResource::LINK_CREATION)) { - continue; - } - - $now = time(); - $entryCreation = $entry->getMetaInt(RelatedResource::LINK_CREATION); - if ($entryCreation < $now - (5 * 360 * 24 * 3600)) { // 3y - $entry->improve(self::$RATIO_5Y, 'ancien_5y'); - } elseif ($entryCreation < $now - (3 * 360 * 24 * 3600)) { // 3y - $entry->improve(self::$RATIO_3Y, 'ancien_3y'); - } elseif ($entryCreation < $now - (360 * 24 * 3600)) { // 1y - $entry->improve(self::$RATIO_3Y, 'ancien_1y'); - } - - $diff = abs( - $path->getMetaInt(RelatedResource::LINK_CREATION) - - $entry->getMetaInt(RelatedResource::LINK_CREATION) - ); - - // calculate an improvement base on 0.75 up to 1.2, based on difference of time between 2 shares - // with 1.0 score for a 3 month period - $neutral = 90 * 24 * 3600; - $ratio = $diff - $neutral; - $impr = 1 - ($ratio * 0.2 / $neutral); - $impr = max($impr, 0.75); - $entry->improve($impr, 'ancien_3m'); + $now = time(); + $entryCreation = $entry->getMetaInt(RelatedResource::LINK_CREATION); + if ($entryCreation < $now - (5 * 360 * 24 * 3600)) { // 5y + $entry->improve(self::$RATIO_5Y, 'ancien_5y'); + } elseif ($entryCreation < $now - (3 * 360 * 24 * 3600)) { // 3y + $entry->improve(self::$RATIO_3Y, 'ancien_3y'); + } elseif ($entryCreation < $now - (360 * 24 * 3600)) { // 1y + $entry->improve(self::$RATIO_1Y, 'ancien_1y'); } - return; + $diff = abs( + $current->getMetaInt(RelatedResource::LINK_CREATION) + - $entry->getMetaInt(RelatedResource::LINK_CREATION) + ); + + // calculate an improvement base on 0.75 up to 1.2, based on difference of time between 2 shares + // with 1.0 score for a 3 month period + $neutral = 90 * 24 * 3600; + $ratio = $diff - $neutral; + $impr = 1 - ($ratio * 0.2 / $neutral); + $impr = max($impr, 0.75); + $entry->improve($impr, 'ancien_3m'); } } } diff --git a/lib/LinkWeightCalculators/KeywordWeightCalculator.php b/lib/LinkWeightCalculators/KeywordWeightCalculator.php index 03846a3d..384637d9 100644 --- a/lib/LinkWeightCalculators/KeywordWeightCalculator.php +++ b/lib/LinkWeightCalculators/KeywordWeightCalculator.php @@ -31,6 +31,7 @@ namespace OCA\RelatedResources\LinkWeightCalculators; use OCA\RelatedResources\ILinkWeightCalculator; +use OCA\RelatedResources\IRelatedResource; use OCA\RelatedResources\Model\RelatedResource; use OCA\RelatedResources\Tools\Traits\TArrayTools; @@ -41,14 +42,8 @@ class KeywordWeightCalculator implements ILinkWeightCalculator { /** * @inheritDoc */ - public function weight(array $paths, array &$result): void { - if (sizeof($paths) === 0) { - return; - } - - // we might only need to work on one single path, as we are only interested on item keywords, and not generated links. - $path = $paths[0]; - if (!$path->hasMeta(RelatedResource::ITEM_KEYWORDS)) { + public function weight(IRelatedResource $current, array &$result): void { + if (!$current->hasMeta(RelatedResource::ITEM_KEYWORDS)) { return; } @@ -61,7 +56,7 @@ public function weight(array $paths, array &$result): void { if (strlen($kw) <= 3) { continue; } - if (in_array($kw, $path->getMetaArray(RelatedResource::ITEM_KEYWORDS))) { + if (in_array($kw, $current->getMetaArray(RelatedResource::ITEM_KEYWORDS))) { $entry->improve(RelatedResource::$IMPROVE_HIGH_LINK, 'keyword'); } } diff --git a/lib/LinkWeightCalculators/TimeWeightCalculator.php b/lib/LinkWeightCalculators/TimeWeightCalculator.php index a3ae90c9..74eb6988 100644 --- a/lib/LinkWeightCalculators/TimeWeightCalculator.php +++ b/lib/LinkWeightCalculators/TimeWeightCalculator.php @@ -32,6 +32,7 @@ namespace OCA\RelatedResources\LinkWeightCalculators; use OCA\RelatedResources\ILinkWeightCalculator; +use OCA\RelatedResources\IRelatedResource; use OCA\RelatedResources\Model\RelatedResource; use OCA\RelatedResources\Tools\Traits\TArrayTools; @@ -45,50 +46,48 @@ class TimeWeightCalculator implements ILinkWeightCalculator { /** * @inheritDoc */ - public function weight(array $paths, array &$result): void { - foreach ($paths as $path) { - if (!$path->hasMeta(RelatedResource::LINK_CREATION) - || !$path->hasMeta(RelatedResource::LINK_CREATOR) - || !$path->hasMeta(RelatedResource::LINK_RECIPIENT)) { + public function weight(IRelatedResource $current, array &$result): void { + if (!$current->hasMeta(RelatedResource::LINK_CREATION) + || !$current->hasMeta(RelatedResource::LINK_CREATOR) + || !$current->hasMeta(RelatedResource::LINK_RECIPIENT)) { + return; + } + + foreach ($result as $entry) { + if (!$entry->hasMeta(RelatedResource::LINK_CREATION) + || !$entry->hasMeta(RelatedResource::LINK_CREATOR) + || !$entry->hasMeta(RelatedResource::LINK_RECIPIENT)) { continue; } - foreach ($result as $entry) { - if (!$entry->hasMeta(RelatedResource::LINK_CREATION) - || !$entry->hasMeta(RelatedResource::LINK_CREATOR) - || !$entry->hasMeta(RelatedResource::LINK_RECIPIENT)) { - continue; - } - - // check if link is initiated from same entity - if ($entry->getMeta(RelatedResource::LINK_CREATOR) - !== $path->getMeta(RelatedResource::LINK_CREATOR)) { - continue; - } + // check if link is initiated from same entity + if ($entry->getMeta(RelatedResource::LINK_CREATOR) + !== $current->getMeta(RelatedResource::LINK_CREATOR)) { + continue; + } - if ($entry->getMetaInt(RelatedResource::LINK_CREATION) - < $path->getMetaInt(RelatedResource::LINK_CREATION) + self::DELAY_1 - && $entry->getMetaInt(RelatedResource::LINK_CREATION) - > $path->getMetaInt(RelatedResource::LINK_CREATION) - self::DELAY_1) { - $entry->improve(RelatedResource::$IMPROVE_HIGH_LINK, 'time_delay_1'); - continue; - } + if ($entry->getMetaInt(RelatedResource::LINK_CREATION) + < $current->getMetaInt(RelatedResource::LINK_CREATION) + self::DELAY_1 + && $entry->getMetaInt(RelatedResource::LINK_CREATION) + > $current->getMetaInt(RelatedResource::LINK_CREATION) - self::DELAY_1) { + $entry->improve(RelatedResource::$IMPROVE_HIGH_LINK, 'time_delay_1'); + continue; + } - if ($entry->getMetaInt(RelatedResource::LINK_CREATION) - < $path->getMetaInt(RelatedResource::LINK_CREATION) + self::DELAY_2 - && $entry->getMetaInt(RelatedResource::LINK_CREATION) - > $path->getMetaInt(RelatedResource::LINK_CREATION) - self::DELAY_2) { - $entry->improve(RelatedResource::$IMPROVE_MEDIUM_LINK, 'time_delay_2'); - continue; - } + if ($entry->getMetaInt(RelatedResource::LINK_CREATION) + < $current->getMetaInt(RelatedResource::LINK_CREATION) + self::DELAY_2 + && $entry->getMetaInt(RelatedResource::LINK_CREATION) + > $current->getMetaInt(RelatedResource::LINK_CREATION) - self::DELAY_2) { + $entry->improve(RelatedResource::$IMPROVE_MEDIUM_LINK, 'time_delay_2'); + continue; + } - if ($entry->getMetaInt(RelatedResource::LINK_CREATION) - < $path->getMetaInt(RelatedResource::LINK_CREATION) + self::DELAY_3 - && $entry->getMetaInt(RelatedResource::LINK_CREATION) - > $path->getMetaInt(RelatedResource::LINK_CREATION) - self::DELAY_3) { - $entry->improve(RelatedResource::$IMPROVE_LOW_LINK, 'time_delay_3'); - continue; - } + if ($entry->getMetaInt(RelatedResource::LINK_CREATION) + < $current->getMetaInt(RelatedResource::LINK_CREATION) + self::DELAY_3 + && $entry->getMetaInt(RelatedResource::LINK_CREATION) + > $current->getMetaInt(RelatedResource::LINK_CREATION) - self::DELAY_3) { + $entry->improve(RelatedResource::$IMPROVE_LOW_LINK, 'time_delay_3'); + continue; } } } diff --git a/lib/Model/DeckBoard.php b/lib/Model/DeckBoard.php index de046623..492f7801 100644 --- a/lib/Model/DeckBoard.php +++ b/lib/Model/DeckBoard.php @@ -106,7 +106,7 @@ public function getOwner(): string { /** * @param int $lastModified * - * @return DeckShare + * @return DeckBoard */ public function setLastModified(int $lastModified): self { $this->lastModified = $lastModified; diff --git a/lib/RelatedResourceProviders/CalendarRelatedResourceProvider.php b/lib/RelatedResourceProviders/CalendarRelatedResourceProvider.php index a6701496..7bddca36 100644 --- a/lib/RelatedResourceProviders/CalendarRelatedResourceProvider.php +++ b/lib/RelatedResourceProviders/CalendarRelatedResourceProvider.php @@ -45,6 +45,8 @@ use OCA\RelatedResources\Tools\Traits\TArrayTools; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Server; +use Psr\Container\ContainerExceptionInterface; class CalendarRelatedResourceProvider implements IRelatedResourceProvider { use TArrayTools; @@ -54,7 +56,7 @@ class CalendarRelatedResourceProvider implements IRelatedResourceProvider { private IURLGenerator $urlGenerator; private IL10N $l10n; private CalendarShareRequest $calendarShareRequest; - private CirclesManager $circlesManager; + private ?CirclesManager $circlesManager = null; public function __construct( IURLGenerator $urlGenerator, @@ -64,7 +66,10 @@ public function __construct( $this->urlGenerator = $urlGenerator; $this->l10n = $l10n; $this->calendarShareRequest = $calendarShareRequest; - $this->circlesManager = \OC::$server->get(CirclesManager::class); + try { + $this->circlesManager = Server::get(CirclesManager::class); + } catch (ContainerExceptionInterface $e) { + } } public function getProviderId(): string { @@ -81,6 +86,10 @@ public function loadWeightCalculator(): array { * @return IRelatedResource|null */ public function getRelatedFromItem(string $itemId): ?IRelatedResource { + if ($this->circlesManager === null) { + return null; + } + $itemId = (int)$itemId; /** @var Calendar $calendar */ @@ -128,8 +137,8 @@ public function getItemsAvailableToEntity(FederatedUser $entity): array { return []; } - return array_map(function (Calendar $calendar) { - return $calendar->getCalendarId(); + return array_map(function (Calendar $calendar): string { + return (string)$calendar->getCalendarId(); }, $shares); } diff --git a/lib/RelatedResourceProviders/DeckRelatedResourceProvider.php b/lib/RelatedResourceProviders/DeckRelatedResourceProvider.php index 01549855..d56babdc 100644 --- a/lib/RelatedResourceProviders/DeckRelatedResourceProvider.php +++ b/lib/RelatedResourceProviders/DeckRelatedResourceProvider.php @@ -45,7 +45,9 @@ use OCA\RelatedResources\Tools\Traits\TArrayTools; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Server; use OCP\Share\IShare; +use Psr\Container\ContainerExceptionInterface; class DeckRelatedResourceProvider implements IRelatedResourceProvider { use TArrayTools; @@ -56,7 +58,7 @@ class DeckRelatedResourceProvider implements IRelatedResourceProvider { private IUrlGenerator $urlGenerator; private IL10N $l10n; private DeckRequest $deckSharesRequest; - private CirclesManager $circlesManager; + private ?CirclesManager $circlesManager = null; public function __construct( @@ -67,7 +69,10 @@ public function __construct( $this->urlGenerator = $urlGenerator; $this->l10n = $l10n; $this->deckSharesRequest = $deckSharesRequest; - $this->circlesManager = \OC::$server->get(CirclesManager::class); + try { + $this->circlesManager = Server::get(CirclesManager::class); + } catch (ContainerExceptionInterface $e) { + } } public function getProviderId(): string { @@ -85,6 +90,10 @@ public function loadWeightCalculator(): array { * @return IRelatedResource|null */ public function getRelatedFromItem(string $itemId): ?IRelatedResource { + if ($this->circlesManager === null) { + return null; + } + $itemId = (int)$itemId; /** @var DeckBoard $board */ @@ -124,8 +133,8 @@ public function getItemsAvailableToEntity(FederatedUser $entity): array { return []; } - return array_map(function (DeckBoard $board) { - return $board->getBoardId(); + return array_map(function (DeckBoard $board): string { + return (string)$board->getBoardId(); }, $shares); } diff --git a/lib/RelatedResourceProviders/FilesRelatedResourceProvider.php b/lib/RelatedResourceProviders/FilesRelatedResourceProvider.php index ea73aa4b..1a4cf1a4 100644 --- a/lib/RelatedResourceProviders/FilesRelatedResourceProvider.php +++ b/lib/RelatedResourceProviders/FilesRelatedResourceProvider.php @@ -48,7 +48,9 @@ use OCP\Files\NotPermittedException; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Server; use OCP\Share\IShare; +use Psr\Container\ContainerExceptionInterface; class FilesRelatedResourceProvider implements IRelatedResourceProvider { use TArrayTools; @@ -60,7 +62,7 @@ class FilesRelatedResourceProvider implements IRelatedResourceProvider { private IURLGenerator $urlGenerator; private IL10N $l10n; private FilesShareRequest $filesShareRequest; - private CirclesManager $circlesManager; + private ?CirclesManager $circlesManager = null; public function __construct( @@ -73,7 +75,10 @@ public function __construct( $this->urlGenerator = $urlGenerator; $this->l10n = $l10n; $this->filesShareRequest = $filesShareRequest; - $this->circlesManager = \OC::$server->get(CirclesManager::class); + try { + $this->circlesManager = Server::get(CirclesManager::class); + } catch (ContainerExceptionInterface $e) { + } } public function getProviderId(): string { @@ -87,14 +92,22 @@ public function loadWeightCalculator(): array { public function getRelatedFromItem(string $itemId): ?IRelatedResource { - $itemId = (int)$itemId; + if ($this->circlesManager === null) { + return null; + } + $itemId = (int)$itemId; if ($itemId <= 1) { return null; } $related = null; - $itemIds = $this->getItemIdsFromParentPath($itemId); + try { + $itemIds = $this->getItemIdsFromParentPath($itemId); + } catch (Exception $e) { + $itemIds = [$itemId]; + } + foreach ($this->filesShareRequest->getSharesByItemIds($itemIds) as $share) { if ($related === null) { $related = $this->convertToRelatedResource($share); diff --git a/lib/RelatedResourceProviders/TalkRelatedResourceProvider.php b/lib/RelatedResourceProviders/TalkRelatedResourceProvider.php index de6b85e3..3eb5cfc9 100644 --- a/lib/RelatedResourceProviders/TalkRelatedResourceProvider.php +++ b/lib/RelatedResourceProviders/TalkRelatedResourceProvider.php @@ -45,6 +45,8 @@ use OCA\RelatedResources\Tools\Traits\TArrayTools; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Server; +use Psr\Container\ContainerExceptionInterface; class TalkRelatedResourceProvider implements IRelatedResourceProvider { use TArrayTools; @@ -55,7 +57,7 @@ class TalkRelatedResourceProvider implements IRelatedResourceProvider { private IURLGenerator $urlGenerator; private IL10N $l10n; private TalkRoomRequest $talkRoomRequest; - private CirclesManager $circlesManager; + private ?CirclesManager $circlesManager = null; public function __construct( @@ -66,7 +68,10 @@ public function __construct( $this->urlGenerator = $urlGenerator; $this->l10n = $l10n; $this->talkRoomRequest = $talkRoomRequest; - $this->circlesManager = \OC::$server->get(CirclesManager::class); + try { + $this->circlesManager = Server::get(CirclesManager::class); + } catch (ContainerExceptionInterface $e) { + } } @@ -86,6 +91,10 @@ public function loadWeightCalculator(): array { * @return IRelatedResource|null */ public function getRelatedFromItem(string $itemId): ?IRelatedResource { + if ($this->circlesManager === null) { + return null; + } + /** @var TalkRoom $room */ try { $room = $this->talkRoomRequest->getRoomByToken($itemId); @@ -124,7 +133,7 @@ public function getItemsAvailableToEntity(FederatedUser $entity): array { return []; } - return array_map(function (TalkRoom $room) { + return array_map(function (TalkRoom $room): string { return $room->getToken(); }, $shares); } @@ -183,7 +192,7 @@ private function processRoomParticipant(RelatedResource $related, TalkActor $act /** - * @param TalkRoom $actor + * @param TalkActor $actor * * @return FederatedUser * @throws Exception diff --git a/lib/Service/RelatedService.php b/lib/Service/RelatedService.php index 45b17176..43283fa6 100644 --- a/lib/Service/RelatedService.php +++ b/lib/Service/RelatedService.php @@ -31,10 +31,7 @@ namespace OCA\RelatedResources\Service; use Exception; -use OC; use OCA\Circles\CirclesManager; -use OCA\Circles\Exceptions\MembershipNotFoundException; -use OCA\Circles\Exceptions\RequestBuilderException; use OCA\Circles\Model\FederatedUser; use OCA\Circles\Model\Member; use OCA\RelatedResources\Exceptions\CacheNotFoundException; @@ -56,6 +53,7 @@ use OCP\App\IAppManager; use OCP\ICache; use OCP\ICacheFactory; +use OCP\Server; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; use Psr\Log\LoggerInterface; @@ -72,7 +70,7 @@ class RelatedService { private IAppManager $appManager; private ICache $cache; private LoggerInterface $logger; - private CirclesManager $circlesManager; + private ?CirclesManager $circlesManager = null; private ConfigService $configService; /** @var ILinkWeightCalculator[] */ @@ -97,8 +95,8 @@ public function __construct( $this->configService = $configService; try { - $this->circlesManager = OC::$server->get(CirclesManager::class); - } catch (NotFoundExceptionInterface | ContainerExceptionInterface $e) { + $this->circlesManager = Server::get(CirclesManager::class); + } catch (ContainerExceptionInterface $e) { $this->logger->notice($e->getMessage()); } } @@ -113,6 +111,10 @@ public function __construct( * @throws RelatedResourceProviderNotFound */ public function getRelatedToItem(string $providerId, string $itemId, int $chunk = -1): array { + if ($this->circlesManager === null) { + return []; + } + $result = $this->retrieveRelatedToItem($providerId, $itemId); usort($result, function (IRelatedResource $r1, IRelatedResource $r2): int { @@ -197,9 +199,7 @@ private function retrieveRelatedToItem(string $providerId, string $itemId): arra $result = $this->strictMatching($current, $result); $result = $this->filterUnavailableResults($result); - if (!empty($itemPaths)) { - $this->weightResult($itemPaths, $result); - } + $this->weightResult($current, $result); return $result; } @@ -442,7 +442,7 @@ private function filterUnavailableResults(array $result): array { $this->circlesManager->getLink($circleId, $current->getSingleId()); return true; - } catch (MembershipNotFoundException | RequestBuilderException $e) { + } catch (Exception $e) { } } @@ -451,14 +451,14 @@ private function filterUnavailableResults(array $result): array { } /** - * @param IRelatedResource[] $paths + * @param IRelatedResource $current * @param IRelatedResource[] $result * * @return void */ - private function weightResult(array $paths, array &$result): void { + private function weightResult(IRelatedResource $current, array &$result): void { foreach ($this->getWeightCalculators() as $weightCalculator) { - $weightCalculator->weight($paths, $result); + $weightCalculator->weight($current, $result); } } @@ -483,7 +483,7 @@ private function getWeightCalculators(): array { ); } - $this->weightCalculators[] = OC::$server->get($class); + $this->weightCalculators[] = Server::get($class); } catch (NotFoundExceptionInterface | ContainerExceptionInterface | ReflectionException $e) { $this->logger->notice($e->getMessage()); } @@ -501,7 +501,7 @@ private function getRelatedResourceProviders(): array { $providers = []; try { - $providers[] = OC::$server->get(FilesRelatedResourceProvider::class); + $providers[] = Server::get(FilesRelatedResourceProvider::class); } catch (NotFoundExceptionInterface | ContainerExceptionInterface $e) { $this->logger->notice($e->getMessage()); } @@ -509,7 +509,7 @@ private function getRelatedResourceProviders(): array { if ($this->appManager->isInstalled('deck')) { try { - $providers[] = OC::$server->get(DeckRelatedResourceProvider::class); + $providers[] = Server::get(DeckRelatedResourceProvider::class); } catch (NotFoundExceptionInterface | ContainerExceptionInterface $e) { $this->logger->notice($e->getMessage()); } @@ -517,7 +517,7 @@ private function getRelatedResourceProviders(): array { if ($this->appManager->isInstalled('calendar')) { try { - $providers[] = OC::$server->get(CalendarRelatedResourceProvider::class); + $providers[] = Server::get(CalendarRelatedResourceProvider::class); } catch (NotFoundExceptionInterface | ContainerExceptionInterface $e) { $this->logger->notice($e->getMessage()); } @@ -525,7 +525,7 @@ private function getRelatedResourceProviders(): array { if ($this->appManager->isInstalled('spreed')) { try { - $providers[] = OC::$server->get(TalkRelatedResourceProvider::class); + $providers[] = Server::get(TalkRelatedResourceProvider::class); } catch (NotFoundExceptionInterface | ContainerExceptionInterface $e) { $this->logger->notice($e->getMessage()); } diff --git a/lib/Tools/Db/ExtendedQueryBuilder.php b/lib/Tools/Db/ExtendedQueryBuilder.php index 818e57e5..1d32d7ce 100644 --- a/lib/Tools/Db/ExtendedQueryBuilder.php +++ b/lib/Tools/Db/ExtendedQueryBuilder.php @@ -35,7 +35,7 @@ use DateTime; use Doctrine\DBAL\Query\QueryBuilder as DBALQueryBuilder; use Exception; -use OC; +use OC\DB\ConnectionAdapter; use OC\DB\QueryBuilder\QueryBuilder; use OC\SystemConfig; use OCA\RelatedResources\Tools\Exceptions\DateTimeException; @@ -44,7 +44,7 @@ use OCA\RelatedResources\Tools\Traits\TArrayTools; use OCP\DB\QueryBuilder\ICompositeExpression; use OCP\DB\QueryBuilder\IQueryBuilder; -use OCP\IDBConnection; +use OCP\Server; use Psr\Log\LoggerInterface; class ExtendedQueryBuilder extends QueryBuilder { @@ -56,9 +56,9 @@ class ExtendedQueryBuilder extends QueryBuilder { public function __construct() { parent::__construct( - OC::$server->get(IDBConnection::class), - OC::$server->get(SystemConfig::class), - OC::$server->get(LoggerInterface::class) + Server::get(ConnectionAdapter::class), + Server::get(SystemConfig::class), + Server::get(LoggerInterface::class) ); } diff --git a/tests/psalm-baseline.xml b/tests/psalm-baseline.xml index d4a07132..85ecebe8 100644 --- a/tests/psalm-baseline.xml +++ b/tests/psalm-baseline.xml @@ -1,5 +1,5 @@ - + $s[$e] diff --git a/tests/stub.phpstub b/tests/stub.phpstub index 291a8440..89ca7782 100644 --- a/tests/stub.phpstub +++ b/tests/stub.phpstub @@ -485,6 +485,8 @@ namespace Doctrine\DBAL\Query { } namespace OC\DB\QueryBuilder { + use OC\DB\ConnectionAdapter; + use OC\SystemConfig; use OCP\DB\IResult; use OCP\DB\QueryBuilder\ICompositeExpression; use OCP\DB\QueryBuilder\ILiteral;