From 1eab5ee5be0d9ba4d81b1eda8816ee2ed7910d3a Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Mon, 7 Aug 2023 20:11:51 -0100 Subject: [PATCH] get rid of generic events Signed-off-by: Maxence Lange --- lib/AppInfo/Application.php | 104 +++--------------- lib/Db/CoreQueryBuilder.php | 27 ++--- lib/FederatedItems/MemberDisplayName.php | 2 + .../Files/ListenerFilesLoadScripts.php | 51 +++++++++ psalm.xml | 1 + 5 files changed, 77 insertions(+), 108 deletions(-) create mode 100644 lib/Listeners/Files/ListenerFilesLoadScripts.php diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 91697969c..0f6e61982 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -46,10 +46,11 @@ use OCA\Circles\Events\RemovingCircleMemberEvent; use OCA\Circles\Events\RequestingCircleMemberEvent; use OCA\Circles\Handlers\WebfingerHandler; -use OCA\Circles\Listeners\AccountUpdated as ListenerAccountUpdated; +use OCA\Circles\Listeners\AccountUpdated; use OCA\Circles\Listeners\Files\AddingMemberSendMail as ListenerFilesAddingMemberSendMail; use OCA\Circles\Listeners\Files\CreatingShareSendMail as ListenerFilesCreatingShareSendMail; use OCA\Circles\Listeners\Files\DestroyingCircle as ListenerFilesDestroyingCircle; +use OCA\Circles\Listeners\Files\ListenerFilesLoadScripts; use OCA\Circles\Listeners\Files\MemberAddedSendMail as ListenerFilesMemberAddedSendMail; use OCA\Circles\Listeners\Files\PreparingMemberSendMail as ListenerFilesPreparingMemberSendMail; use OCA\Circles\Listeners\Files\PreparingShareSendMail as ListenerFilesPreparingShareSendMail; @@ -67,6 +68,7 @@ use OCA\Circles\Search\UnifiedSearchProvider; use OCA\Circles\Service\ConfigService; use OCA\Files\App as FilesApp; +use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCP\Accounts\UserUpdatedEvent; use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; @@ -80,7 +82,6 @@ use OCP\IServerContainer; use OCP\User\Events\UserCreatedEvent; use OCP\User\Events\UserDeletedEvent; -use OCP\Util; use Throwable; /** @@ -99,24 +100,12 @@ class Application extends App implements IBootstrap { public const CLIENT_TIMEOUT = 3; + private ConfigService $configService; - /** @var ConfigService */ - private $configService; - - - /** - * Application constructor. - * - * @param array $params - */ public function __construct(array $params = []) { parent::__construct(self::APP_ID, $params); } - - /** - * @param IRegistrationContext $context - */ public function register(IRegistrationContext $context): void { $context->registerCapability(Capabilities::class); @@ -125,6 +114,7 @@ public function register(IRegistrationContext $context): void { // User Events $context->registerEventListener(UserCreatedEvent::class, UserCreated::class); + $context->registerEventListener(UserUpdatedEvent::class, AccountUpdated::class); $context->registerEventListener(UserDeletedEvent::class, UserDeleted::class); // Group Events @@ -134,37 +124,16 @@ public function register(IRegistrationContext $context): void { $context->registerEventListener(UserRemovedEvent::class, GroupMemberRemoved::class); // Local Events (for Files/Shares/Notifications management) - $context->registerEventListener( - PreparingCircleMemberEvent::class, - ListenerFilesPreparingMemberSendMail::class - ); - $context->registerEventListener( - AddingCircleMemberEvent::class, - ListenerFilesAddingMemberSendMail::class - ); - $context->registerEventListener( - CircleMemberAddedEvent::class, - ListenerFilesMemberAddedSendMail::class - ); - $context->registerEventListener( - PreparingFileShareEvent::class, - ListenerFilesPreparingShareSendMail::class - ); - $context->registerEventListener( - CreatingFileShareEvent::class, - ListenerFilesCreatingShareSendMail::class - ); - $context->registerEventListener( - FileShareCreatedEvent::class, - ListenerFilesShareCreatedSendMail::class - ); + $context->registerEventListener(LoadAdditionalScriptsEvent::class, ListenerFilesLoadScripts::class); + $context->registerEventListener(PreparingCircleMemberEvent::class, ListenerFilesPreparingMemberSendMail::class); + $context->registerEventListener(AddingCircleMemberEvent::class, ListenerFilesAddingMemberSendMail::class); + $context->registerEventListener(CircleMemberAddedEvent::class, ListenerFilesMemberAddedSendMail::class); + $context->registerEventListener(PreparingFileShareEvent::class, ListenerFilesPreparingShareSendMail::class); + $context->registerEventListener(CreatingFileShareEvent::class, ListenerFilesCreatingShareSendMail::class); + $context->registerEventListener(FileShareCreatedEvent::class, ListenerFilesShareCreatedSendMail::class); $context->registerEventListener(RemovingCircleMemberEvent::class, ListenerFilesRemovingMember::class); - $context->registerEventListener( - RequestingCircleMemberEvent::class, - ListenerNotificationsRequestingMember::class - ); + $context->registerEventListener(RequestingCircleMemberEvent::class, ListenerNotificationsRequestingMember::class); $context->registerEventListener(DestroyingCircleEvent::class, ListenerFilesDestroyingCircle::class); - $context->registerEventListener(UserUpdatedEvent::class, ListenerAccountUpdated::class); $context->registerSearchProvider(UnifiedSearchProvider::class); $context->registerWellKnownHandler(WebfingerHandler::class); @@ -183,16 +152,10 @@ public function boot(IBootContext $context): void { ->get(ConfigService::class); $context->injectFn(Closure::fromCallable([$this, 'registerMountProvider'])); - // $context->injectFn(Closure::fromCallable([$this, 'registerDavHooks'])); - $context->injectFn(Closure::fromCallable([$this, 'registerFilesNavigation'])); - $context->injectFn(Closure::fromCallable([$this, 'registerFilesPlugin'])); } - /** - * @param IServerContainer $container - */ public function registerMountProvider(IServerContainer $container) { if (!$this->configService->isGSAvailable()) { return; @@ -202,47 +165,6 @@ public function registerMountProvider(IServerContainer $container) { $mountProviderCollection->registerProvider($container->get(CircleMountProvider::class)); } - - /** - * @deprecated - use CardCreatedEvent if this feature is made available again - * @param IServerContainer $container - */ - public function registerDavHooks(IServerContainer $container) { - if (!$this->configService->isContactsBackend()) { - return; - } - - // /** @var DavService $davService */ - // $davService = $container->get(DavService::class); - // - // $event = OC::$server->getEventDispatcher(); - // $event->addListener(ManagerEvent::EVENT_APP_ENABLE, [$davService, 'onAppEnabled']); - // $event->addListener('\OCA\DAV\CardDAV\CardDavBackend::createCard', [$davService, 'onCreateCard']); - // $event->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', [$davService, 'onUpdateCard']); - // $event->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', [$davService, 'onDeleteCard']); - } - - - /** - * @param IServerContainer $container - */ - public function registerFilesPlugin(IServerContainer $container) { - $eventDispatcher = $container->getEventDispatcher(); - $eventDispatcher->addListener( - 'OCA\Files::loadAdditionalScripts', - function () { - Util::addScript('circles', 'files/circles.files.app'); - Util::addScript('circles', 'files/circles.files.list'); - - Util::addStyle('circles', 'files/circles.filelist'); - } - ); - } - - - /** - * - */ public function registerFilesNavigation() { $appManager = FilesApp::getNavigationManager(); $appManager->add( diff --git a/lib/Db/CoreQueryBuilder.php b/lib/Db/CoreQueryBuilder.php index 193b0fe09..186677401 100644 --- a/lib/Db/CoreQueryBuilder.php +++ b/lib/Db/CoreQueryBuilder.php @@ -1346,8 +1346,10 @@ protected function limitInitiatorVisibility(string $alias): ICompositeExpression $aliasMembershipCircle = $this->generateAlias($aliasMembership, self::CONFIG, $options); $levelCheck = [$aliasMembership]; + $directMember = ''; if ($this->getBool('initiatorDirectMember', $options, false)) { - array_push($levelCheck, $this->generateAlias($alias, self::DIRECT_INITIATOR, $options)); + $directMember = $this->generateAlias($alias, self::DIRECT_INITIATOR, $options); + array_push($levelCheck, $directMember); } $expr = $this->expr(); @@ -1395,6 +1397,13 @@ function (string $alias) use ($orXLevelCheck, $minimumLevel) { } $orX->add($andXMember); + if ($directMember !== '' && $this->getBool('allowRequestingMembership', $options, false)) { + $orX->add($expr->orX( + $this->exprLimit('status', Member::STATUS_REQUEST, $directMember), + $this->exprLimit('status', Member::STATUS_INVITED, $directMember) + )); + } + if ($minimumLevel === 0 && $alias === self::CIRCLE) { $orX->add($this->exprLimitBitwise('config', Circle::CFG_VISIBLE, $alias)); } @@ -1424,22 +1433,6 @@ function (string $alias) use ($orXLevelCheck, $minimumLevel) { $this->andWhere($orX); return $orX; -// $orTypes = $this->generateLimit($qb, $circleUniqueId, $userId, $type, $name, $forceAll); -// if (sizeof($orTypes) === 0) { -// throw new ConfigNoCircleAvailableException( -// $this->l10n->t( -// 'You cannot use the Circles Application until your administrator has allowed at least one type of circles' -// ) -// ); -// } - -// $orXTypes = $this->expr() -// ->orX(); -// foreach ($orTypes as $orType) { -// $orXTypes->add($orType); -// } -// -// $qb->andWhere($orXTypes); } diff --git a/lib/FederatedItems/MemberDisplayName.php b/lib/FederatedItems/MemberDisplayName.php index 2f5941f3a..84428abe9 100644 --- a/lib/FederatedItems/MemberDisplayName.php +++ b/lib/FederatedItems/MemberDisplayName.php @@ -37,6 +37,7 @@ use OCA\Circles\Exceptions\MemberLevelException; use OCA\Circles\IFederatedItem; use OCA\Circles\IFederatedItemHighSeverity; +use OCA\Circles\IFederatedItemInitiatorMembershipNotRequired; use OCA\Circles\IFederatedItemMemberEmpty; use OCA\Circles\Model\Federated\FederatedEvent; use OCA\Circles\Service\ConfigService; @@ -53,6 +54,7 @@ class MemberDisplayName implements IFederatedItem, IFederatedItemHighSeverity, + IFederatedItemInitiatorMembershipNotRequired, IFederatedItemMemberEmpty { use TDeserialize; diff --git a/lib/Listeners/Files/ListenerFilesLoadScripts.php b/lib/Listeners/Files/ListenerFilesLoadScripts.php new file mode 100644 index 000000000..c4700c82f --- /dev/null +++ b/lib/Listeners/Files/ListenerFilesLoadScripts.php @@ -0,0 +1,51 @@ + + * @copyright 2023 + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Circles\Listeners\Files; + +use OCA\Files\Event\LoadAdditionalScriptsEvent; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventListener; +use OCP\Util; + +class ListenerFilesLoadScripts implements IEventListener { + public function __construct( + ) { + } + + public function handle(Event $event): void { + if (!$event instanceof LoadAdditionalScriptsEvent) { + return; + } + + Util::addScript('circles', 'files/circles.files.app'); + Util::addScript('circles', 'files/circles.files.list'); + Util::addStyle('circles', 'files/circles.filelist'); + } +} diff --git a/psalm.xml b/psalm.xml index fa2bca807..5785ba7ad 100644 --- a/psalm.xml +++ b/psalm.xml @@ -28,6 +28,7 @@ +