]> source.dussan.org Git - nextcloud-server.git/commitdiff
Adjust apps' code to use the ContainerInterface
authorChristoph Wurst <christoph@winzerhof-wurst.at>
Thu, 16 Jul 2020 15:08:03 +0000 (17:08 +0200)
committerMorris Jobke <hey@morrisjobke.de>
Tue, 21 Jul 2020 18:43:18 +0000 (20:43 +0200)
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
14 files changed:
apps/admin_audit/lib/AppInfo/Application.php
apps/comments/lib/AppInfo/Application.php
apps/comments/lib/JSSettingsHelper.php
apps/comments/tests/Unit/JSSettingsHelperTest.php
apps/federatedfilesharing/lib/AppInfo/Application.php
apps/files/lib/AppInfo/Application.php
apps/lookup_server_connector/lib/AppInfo/Application.php
apps/settings/lib/AppInfo/Application.php
apps/systemtags/lib/AppInfo/Application.php
apps/twofactor_backupcodes/lib/AppInfo/Application.php
apps/updatenotification/lib/AppInfo/Application.php
apps/user_ldap/lib/AppInfo/Application.php
apps/workflowengine/lib/AppInfo/Application.php
tests/lib/AppFramework/Bootstrap/BootContextTest.php

index 6c79aef84c8ac2c23d6e1cd39d6112248139609f..81aeada2aaf2294e4be38c993d61452ac9d2f605 100644 (file)
@@ -59,11 +59,12 @@ use OCP\IConfig;
 use OCP\IGroupManager;
 use OCP\ILogger;
 use OCP\IPreview;
-use OCP\IServerContainer;
 use OCP\IUserSession;
 use OCP\Log\ILogFactory;
 use OCP\Share;
 use OCP\Util;
+use Psr\Container\ContainerInterface;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Symfony\Component\EventDispatcher\GenericEvent;
 
 class Application extends App implements IBootstrap {
@@ -107,25 +108,25 @@ class Application extends App implements IBootstrap {
         * Register hooks in order to log them
         */
        private function registerHooks(ILogger $logger,
-                                                                        IServerContainer $serverContainer) {
-               $this->userManagementHooks($logger, $serverContainer);
-               $this->groupHooks($logger, $serverContainer);
+                                                                        ContainerInterface $container) {
+               $this->userManagementHooks($logger, $container);
+               $this->groupHooks($logger, $container);
                $this->authHooks($logger);
 
-               $this->consoleHooks($logger, $serverContainer);
-               $this->appHooks($logger, $serverContainer);
+               $this->consoleHooks($logger, $container);
+               $this->appHooks($logger, $container);
 
                $this->sharingHooks($logger);
 
-               $this->fileHooks($logger, $serverContainer);
+               $this->fileHooks($logger, $container);
                $this->trashbinHooks($logger);
                $this->versionsHooks($logger);
 
-               $this->securityHooks($logger, $serverContainer);
+               $this->securityHooks($logger, $container);
        }
 
        private function userManagementHooks(ILogger $logger,
-                                                                                  IServerContainer $serverContainer) {
+                                                                                ContainerInterface $container) {
                $userActions = new UserManagement($logger);
 
                Util::connectHook('OC_User', 'post_createUser', $userActions, 'create');
@@ -133,18 +134,18 @@ class Application extends App implements IBootstrap {
                Util::connectHook('OC_User', 'changeUser', $userActions, 'change');
 
                /** @var IUserSession|Session $userSession */
-               $userSession = $serverContainer->getUserSession();
+               $userSession = $container->get(IUserSession::class);
                $userSession->listen('\OC\User', 'postSetPassword', [$userActions, 'setPassword']);
                $userSession->listen('\OC\User', 'assignedUserId', [$userActions, 'assign']);
                $userSession->listen('\OC\User', 'postUnassignedUserId', [$userActions, 'unassign']);
        }
 
        private function groupHooks(ILogger $logger,
-                                                                 IServerContainer $serverContainer) {
+                                                                 ContainerInterface $container) {
                $groupActions = new GroupManagement($logger);
 
                /** @var IGroupManager|Manager $groupManager */
-               $groupManager = $serverContainer->getGroupManager();
+               $groupManager = $container->getGroupManager(IGroupManager::class);
                $groupManager->listen('\OC\Group', 'postRemoveUser', [$groupActions, 'removeUser']);
                $groupManager->listen('\OC\Group', 'postAddUser', [$groupActions, 'addUser']);
                $groupManager->listen('\OC\Group', 'postDelete', [$groupActions, 'deleteGroup']);
@@ -172,8 +173,8 @@ class Application extends App implements IBootstrap {
        }
 
        private function appHooks(ILogger $logger,
-                                                               IServerContainer $serverContainer) {
-               $eventDispatcher = $serverContainer->getEventDispatcher();
+                                                               ContainerInterface $container) {
+               $eventDispatcher = $container->get(EventDispatcherInterface::class);
                $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE, function (ManagerEvent $event) use ($logger) {
                        $appActions = new AppManagement($logger);
                        $appActions->enableApp($event->getAppID());
@@ -189,8 +190,8 @@ class Application extends App implements IBootstrap {
        }
 
        private function consoleHooks(ILogger $logger,
-                                                                       IServerContainer $serverContainer) {
-               $eventDispatcher = $serverContainer->getEventDispatcher();
+                                                                       ContainerInterface $container) {
+               $eventDispatcher = $container->get(EventDispatcherInterface::class);
                $eventDispatcher->addListener(ConsoleEvent::EVENT_RUN, function (ConsoleEvent $event) use ($logger) {
                        $appActions = new Console($logger);
                        $appActions->runCommand($event->getArguments());
@@ -198,9 +199,9 @@ class Application extends App implements IBootstrap {
        }
 
        private function fileHooks(ILogger $logger,
-                                                                IServerContainer $serverContainer) {
+                                                                ContainerInterface $container) {
                $fileActions = new Files($logger);
-               $eventDispatcher = $serverContainer->getEventDispatcher();
+               $eventDispatcher = $container->get(EventDispatcherInterface::class);
                $eventDispatcher->addListener(
                        IPreview::EVENT,
                        function (GenericEvent $event) use ($fileActions) {
@@ -273,8 +274,8 @@ class Application extends App implements IBootstrap {
        }
 
        private function securityHooks(ILogger $logger,
-                                                                        IServerContainer $serverContainer) {
-               $eventDispatcher = $serverContainer->getEventDispatcher();
+                                                                        ContainerInterface $container) {
+               $eventDispatcher = $container->get(EventDispatcherInterface::class);
                $eventDispatcher->addListener(IProvider::EVENT_SUCCESS, function (GenericEvent $event) use ($logger) {
                        $security = new Security($logger);
                        $security->twofactorSuccess($event->getSubject(), $event->getArguments());
index fafac0c6040f94dec80fa2accdba7908eec0c2be..247ba0341076243b6c8d0f0e5d7a394f80f6910e 100644 (file)
@@ -27,6 +27,7 @@
 
 namespace OCA\Comments\AppInfo;
 
+use Closure;
 use OCA\Comments\Capabilities;
 use OCA\Comments\Controller\Notifications;
 use OCA\Comments\EventHandler;
@@ -44,6 +45,8 @@ use OCP\AppFramework\Bootstrap\IBootContext;
 use OCP\AppFramework\Bootstrap\IBootstrap;
 use OCP\AppFramework\Bootstrap\IRegistrationContext;
 use OCP\Comments\CommentsEntityEvent;
+use OCP\IConfig;
+use OCP\ISearch;
 use OCP\IServerContainer;
 use OCP\Util;
 
@@ -75,13 +78,13 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               $this->registerNotifier($context->getServerContainer());
-               $this->registerCommentsEventHandler($context->getServerContainer());
+               $context->injectFn(Closure::fromCallable([$this, 'registerNotifier']));
+               $context->injectFn(Closure::fromCallable([$this, 'registerCommentsEventHandler']));
 
-               $jsSettingsHelper = new JSSettingsHelper($context->getServerContainer());
+               $jsSettingsHelper = new JSSettingsHelper($context->getAppContainer()->get(IConfig::class));
                Util::connectHook('\OCP\Config', 'js', $jsSettingsHelper, 'extend');
 
-               $context->getServerContainer()->getSearch()->registerProvider(LegacyProvider::class, ['apps' => ['files']]);
+               $context->getServerContainer()->get(ISearch::class)->registerProvider(LegacyProvider::class, ['apps' => ['files']]);
        }
 
        protected function registerNotifier(IServerContainer $container) {
index 4c54bb07c1ca106118c765aece6cfede62e7be4e..93578e062958cb1786fc9f91fd1e62bc96448f83 100644 (file)
 
 namespace OCA\Comments;
 
-use OCP\IServerContainer;
+use OCP\IConfig;
 
 class JSSettingsHelper {
-       /** @var IServerContainer */
+       /** @var IConfig */
        private $c;
 
-       public function __construct(IServerContainer $c) {
+       public function __construct(IConfig $c) {
                $this->c = $c;
        }
 
        public function extend(array $settings) {
                $appConfig = json_decode($settings['array']['oc_appconfig'], true);
 
-               $value = (int)$this->c->getConfig()->getAppValue('comments', 'maxAutoCompleteResults', 10);
+               $value = (int)$this->c->getAppValue('comments', 'maxAutoCompleteResults', 10);
                $appConfig['comments']['maxAutoCompleteResults'] = $value;
 
                $settings['array']['oc_appconfig'] = json_encode($appConfig);
index 26cdee1f26b6755b584609ec7866872b7860c896..94d13a77d9459ce50f3e497ea0c2db8945e8957c 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+declare(strict_types=1);
+
 /**
  * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
  *
@@ -26,11 +29,11 @@ namespace OCA\Comments\Tests\Unit;
 
 use OCA\Comments\JSSettingsHelper;
 use OCP\IConfig;
-use OCP\IServerContainer;
+use PHPUnit\Framework\MockObject\MockObject;
 use Test\TestCase;
 
 class JSSettingsHelperTest extends TestCase {
-       /** @var  IServerContainer|\PHPUnit_Framework_MockObject_MockObject */
+       /** @var  IConfig|MockObject */
        protected $c;
        /** @var  JSSettingsHelper */
        protected $helper;
@@ -38,22 +41,17 @@ class JSSettingsHelperTest extends TestCase {
        protected function setUp(): void {
                parent::setUp();
 
-               $this->c = $this->createMock(IServerContainer::class);
+               $this->c = $this->createMock(IConfig::class);
 
                $this->helper = new JSSettingsHelper($this->c);
        }
 
        public function testExtend() {
-               $config = $this->createMock(IConfig::class);
-               $config->expects($this->once())
+               $this->c->expects($this->once())
                        ->method('getAppValue')
                        ->with('comments', 'maxAutoCompleteResults')
                        ->willReturn(13);
 
-               $this->c->expects($this->once())
-                       ->method('getConfig')
-                       ->willReturn($config);
-
                $config = [
                        'oc_appconfig' => json_encode([
                                'anotherapp' => [
index 09f881d5bb85c231a6b57a1f84c31fc9f5a65437..1afaa01a48faca06b3335e2d9a4c248eaec08a95 100644 (file)
@@ -28,6 +28,7 @@
 
 namespace OCA\FederatedFileSharing\AppInfo;
 
+use Closure;
 use OCA\FederatedFileSharing\Listeners\LoadAdditionalScriptsListener;
 use OCA\FederatedFileSharing\Notifier;
 use OCA\FederatedFileSharing\OCM\CloudFederationProviderFiles;
@@ -36,6 +37,9 @@ use OCP\AppFramework\App;
 use OCP\AppFramework\Bootstrap\IBootContext;
 use OCP\AppFramework\Bootstrap\IBootstrap;
 use OCP\AppFramework\Bootstrap\IRegistrationContext;
+use OCP\Federation\ICloudFederationProviderManager;
+use OCP\Notification\IManager as INotifiactionManager;
+use Psr\Container\ContainerInterface;
 
 class Application extends App implements IBootstrap {
        public function __construct() {
@@ -47,16 +51,20 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               $server = $context->getServerContainer();
+               $context->injectFn(Closure::fromCallable([$this, 'registerCloudFederationProvider']));
+               $context->injectFn(Closure::fromCallable([$this, 'registerNotificationManager']));
+       }
 
-               $cloudFederationManager = $server->getCloudFederationProviderManager();
-               $cloudFederationManager->addCloudFederationProvider('file',
+       private function registerCloudFederationProvider(ICloudFederationProviderManager $manager,
+                                                                                                        ContainerInterface $container): void {
+               $manager->addCloudFederationProvider('file',
                        'Federated Files Sharing',
-                       function () use ($server) {
-                               return $server->query(CloudFederationProviderFiles::class);
+                       function () use ($container) {
+                               return $container->get(CloudFederationProviderFiles::class);
                        });
+       }
 
-               $manager = $server->getNotificationManager();
+       private function registerNotificationManager(INotifiactionManager $manager): void {
                $manager->registerNotifierService(Notifier::class);
        }
 }
index 9500f91fdf99a146238dc4c96bbcfdcfa43b52c9..08ec9fbbcc46beaa0c41d352564a3f28a47363bf 100644 (file)
@@ -34,6 +34,7 @@ declare(strict_types=1);
 
 namespace OCA\Files\AppInfo;
 
+use Closure;
 use OC\Search\Provider\File;
 use OCA\Files\Capabilities;
 use OCA\Files\Collaboration\Resources\Listener;
@@ -53,6 +54,7 @@ use OCP\AppFramework\Bootstrap\IRegistrationContext;
 use OCP\Collaboration\Resources\IProviderManager;
 use OCP\IContainer;
 use OCP\IL10N;
+use OCP\ISearch;
 use OCP\IServerContainer;
 use OCP\Notification\IManager;
 use OCP\Util;
@@ -112,35 +114,25 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               $this->registerCollaboration($context);
-               Listener::register($context->getServerContainer()->getEventDispatcher());
-               $this->registerNotification($context);
-               $this->registerSearchProvider($context);
+               $context->injectFn(Closure::fromCallable([$this, 'registerCollaboration']));
+               $context->injectFn([Listener::class, 'register']);
+               $context->injectFn(Closure::fromCallable([$this, 'registerNotification']));
+               $context->injectFn(Closure::fromCallable([$this, 'registerSearchProvider']));
                $this->registerTemplates();
-               $this->registerNavigation($context);
+               $context->injectFn(Closure::fromCallable([$this, 'registerNavigation']));
                $this->registerHooks();
        }
 
-       /**
-        * Register Collaboration ResourceProvider
-        */
-       private function registerCollaboration(IBootContext $context): void {
-               /** @var IProviderManager $providerManager */
-               $providerManager = $context->getAppContainer()->query(IProviderManager::class);
+       private function registerCollaboration(IProviderManager $providerManager): void {
                $providerManager->registerResourceProvider(ResourceProvider::class);
        }
 
-       private function registerNotification(IBootContext $context): void {
-               /** @var IManager $notifications */
-               $notifications = $context->getAppContainer()->query(IManager::class);
+       private function registerNotification(IManager $notifications): void {
                $notifications->registerNotifierService(Notifier::class);
        }
 
-       /**
-        * @param IBootContext $context
-        */
-       private function registerSearchProvider(IBootContext $context): void {
-               $context->getServerContainer()->getSearch()->registerProvider(File::class, ['apps' => ['files']]);
+       private function registerSearchProvider(ISearch $search): void {
+               $search->registerProvider(File::class, ['apps' => ['files']]);
        }
 
        private function registerTemplates(): void {
@@ -150,9 +142,7 @@ class Application extends App implements IBootstrap {
                $templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadsheet', 'core/templates/filetemplates/template.ods');
        }
 
-       private function registerNavigation(IBootContext $context): void {
-               /** @var IL10N $l10n */
-               $l10n = $context->getAppContainer()->query(IL10N::class);
+       private function registerNavigation(IL10N $l10n): void {
                \OCA\Files\App::getNavigationManager()->add(function () use ($l10n) {
                        return [
                                'id' => 'files',
index c2bb61000c1e79473d853447571532e71f699837..df5ddcbab8794cb8dd311ba1910692a00d1f70c1 100644 (file)
@@ -28,12 +28,15 @@ declare(strict_types=1);
 
 namespace OCA\LookupServerConnector\AppInfo;
 
+use Closure;
 use OCA\LookupServerConnector\UpdateLookupServer;
 use OCP\AppFramework\App;
 use OCP\AppFramework\Bootstrap\IBootContext;
 use OCP\AppFramework\Bootstrap\IBootstrap;
 use OCP\AppFramework\Bootstrap\IRegistrationContext;
+use OCP\EventDispatcher\IEventDispatcher;
 use OCP\IUser;
+use Psr\Container\ContainerInterface;
 use Symfony\Component\EventDispatcher\GenericEvent;
 
 class Application extends App implements IBootstrap {
@@ -47,16 +50,20 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               /*
-                * @todo move the OCP events and then move the registration to `register`
-                */
-               $dispatcher = $context->getServerContainer()->getEventDispatcher();
-               $dispatcher->addListener('OC\AccountManager::userUpdated', function (GenericEvent $event) use ($context) {
+               $context->injectFn(Closure::fromCallable([$this, 'registerEventListeners']));
+       }
+
+       /**
+        * @todo move the OCP events and then move the registration to `register`
+        */
+       private function registerEventListeners(IEventDispatcher $dispatcher,
+                                                                                       ContainerInterface $container): void {
+               $dispatcher->addListener('OC\AccountManager::userUpdated', function (GenericEvent $event) use ($container) {
                        /** @var IUser $user */
                        $user = $event->getSubject();
 
                        /** @var UpdateLookupServer $updateLookupServer */
-                       $updateLookupServer = $context->getServerContainer()->query(UpdateLookupServer::class);
+                       $updateLookupServer = $container->get(UpdateLookupServer::class);
                        $updateLookupServer->userUpdated($user);
                });
        }
index 73db869bc6a125abe36cf4b05618ef938f7094a1..3ea4d6bc080e9908f8da1f813867af1bd17de64b 100644 (file)
@@ -40,6 +40,7 @@ use BadMethodCallException;
 use OC\AppFramework\Utility\TimeFactory;
 use OC\Authentication\Token\IProvider;
 use OC\Authentication\Token\IToken;
+use OC\Group\Manager;
 use OC\Server;
 use OCA\Settings\Activity\Provider;
 use OCA\Settings\Hooks;
@@ -52,6 +53,7 @@ use OCP\AppFramework\Bootstrap\IBootstrap;
 use OCP\AppFramework\Bootstrap\IRegistrationContext;
 use OCP\Defaults;
 use OCP\IGroup;
+use OCP\IGroupManager;
 use OCP\ILogger;
 use OCP\IServerContainer;
 use OCP\IUser;
@@ -134,38 +136,39 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               /** @var EventDispatcherInterface $eventDispatcher */
-               $eventDispatcher = $context->getServerContainer()->getEventDispatcher();
-               $container = $context->getAppContainer();
-               $eventDispatcher->addListener('app_password_created', function (GenericEvent $event) use ($container) {
-                       if (($token = $event->getSubject()) instanceof IToken) {
-                               /** @var IActivityManager $activityManager */
-                               $activityManager = $container->query(IActivityManager::class);
-                               /** @var ILogger $logger */
-                               $logger = $container->query(ILogger::class);
-
-                               $activity = $activityManager->generateEvent();
-                               $activity->setApp('settings')
-                                       ->setType('security')
-                                       ->setAffectedUser($token->getUID())
-                                       ->setAuthor($token->getUID())
-                                       ->setSubject(Provider::APP_TOKEN_CREATED, ['name' => $token->getName()])
-                                       ->setObject('app_token', $token->getId());
-
-                               try {
-                                       $activityManager->publish($activity);
-                               } catch (BadMethodCallException $e) {
-                                       $logger->logException($e, ['message' => 'could not publish activity', 'level' => ILogger::WARN]);
+               $context->injectFn(function (EventDispatcherInterface $dispatcher, ContainerInterface $container) {
+                       $dispatcher->addListener('app_password_created', function (GenericEvent $event) use ($container) {
+                               if (($token = $event->getSubject()) instanceof IToken) {
+                                       /** @var IActivityManager $activityManager */
+                                       $activityManager = $container->get(IActivityManager::class);
+                                       /** @var ILogger $logger */
+                                       $logger = $container->get(ILogger::class);
+
+                                       $activity = $activityManager->generateEvent();
+                                       $activity->setApp('settings')
+                                               ->setType('security')
+                                               ->setAffectedUser($token->getUID())
+                                               ->setAuthor($token->getUID())
+                                               ->setSubject(Provider::APP_TOKEN_CREATED, ['name' => $token->getName()])
+                                               ->setObject('app_token', $token->getId());
+
+                                       try {
+                                               $activityManager->publish($activity);
+                                       } catch (BadMethodCallException $e) {
+                                               $logger->logException($e, ['message' => 'could not publish activity', 'level' => ILogger::WARN]);
+                                       }
                                }
-                       }
+                       });
                });
 
                Util::connectHook('OC_User', 'post_setPassword', $this, 'onChangePassword');
                Util::connectHook('OC_User', 'changeUser', $this, 'onChangeInfo');
 
-               $groupManager = $context->getServerContainer()->getGroupManager();
-               $groupManager->listen('\OC\Group', 'postRemoveUser',  [$this, 'removeUserFromGroup']);
-               $groupManager->listen('\OC\Group', 'postAddUser',  [$this, 'addUserToGroup']);
+               $context->injectFn(function (IGroupManager $groupManager) {
+                       /** @var IGroupManager|Manager $groupManager */
+                       $groupManager->listen('\OC\Group', 'postRemoveUser',  [$this, 'removeUserFromGroup']);
+                       $groupManager->listen('\OC\Group', 'postAddUser',  [$this, 'addUserToGroup']);
+               });
 
                Util::connectHook('\OCP\Config', 'js', $this, 'extendJsConfig');
        }
index 45ac2dc1e8410ab0adf343b2d14a19a72b2a9011..ca18165680bdddf68ea14bfcd89b20895e79f332 100644 (file)
@@ -32,6 +32,7 @@ use OCP\AppFramework\Bootstrap\IBootstrap;
 use OCP\AppFramework\Bootstrap\IRegistrationContext;
 use OCP\SystemTag\ManagerEvent;
 use OCP\SystemTag\MapperEvent;
+use Symfony\Component\EventDispatcher\EventDispatcher;
 
 class Application extends App implements IBootstrap {
        public const APP_ID = 'systemtags';
@@ -44,35 +45,36 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               /*
-                * @todo move the OCP events and then move the registration to `register`
-                */
-               $eventDispatcher = $context->getServerContainer()->getEventDispatcher();
-               $eventDispatcher->addListener(
-                       'OCA\Files::loadAdditionalScripts',
-                       function () {
-                               // FIXME: no public API for these ?
-                               \OCP\Util::addScript('dist/systemtags');
-                               \OCP\Util::addScript(self::APP_ID, 'systemtags');
-                       }
-               );
+               $context->injectFn(function (EventDispatcher $dispatcher) use ($context) {
+                       /*
+                        * @todo move the OCP events and then move the registration to `register`
+                        */
+                       $dispatcher->addListener(
+                               'OCA\Files::loadAdditionalScripts',
+                               function () {
+                                       // FIXME: no public API for these ?
+                                       \OCP\Util::addScript('dist/systemtags');
+                                       \OCP\Util::addScript(self::APP_ID, 'systemtags');
+                               }
+                       );
 
-               $managerListener = function (ManagerEvent $event) use ($context) {
-                       /** @var \OCA\SystemTags\Activity\Listener $listener */
-                       $listener = $context->getServerContainer()->query(Listener::class);
-                       $listener->event($event);
-               };
-               $eventDispatcher->addListener(ManagerEvent::EVENT_CREATE, $managerListener);
-               $eventDispatcher->addListener(ManagerEvent::EVENT_DELETE, $managerListener);
-               $eventDispatcher->addListener(ManagerEvent::EVENT_UPDATE, $managerListener);
+                       $managerListener = function (ManagerEvent $event) use ($context) {
+                               /** @var \OCA\SystemTags\Activity\Listener $listener */
+                               $listener = $context->getServerContainer()->query(Listener::class);
+                               $listener->event($event);
+                       };
+                       $dispatcher->addListener(ManagerEvent::EVENT_CREATE, $managerListener);
+                       $dispatcher->addListener(ManagerEvent::EVENT_DELETE, $managerListener);
+                       $dispatcher->addListener(ManagerEvent::EVENT_UPDATE, $managerListener);
 
-               $mapperListener = function (MapperEvent $event) use ($context) {
-                       /** @var \OCA\SystemTags\Activity\Listener $listener */
-                       $listener = $context->getServerContainer()->query(Listener::class);
-                       $listener->mapperEvent($event);
-               };
-               $eventDispatcher->addListener(MapperEvent::EVENT_ASSIGN, $mapperListener);
-               $eventDispatcher->addListener(MapperEvent::EVENT_UNASSIGN, $mapperListener);
+                       $mapperListener = function (MapperEvent $event) use ($context) {
+                               /** @var \OCA\SystemTags\Activity\Listener $listener */
+                               $listener = $context->getServerContainer()->query(Listener::class);
+                               $listener->mapperEvent($event);
+                       };
+                       $dispatcher->addListener(MapperEvent::EVENT_ASSIGN, $mapperListener);
+                       $dispatcher->addListener(MapperEvent::EVENT_UNASSIGN, $mapperListener);
+               });
 
                \OCA\Files\App::getNavigationManager()->add(function () {
                        $l = \OC::$server->getL10N(self::APP_ID);
index 1941cb545adb9c31ec53391704f2dbf767472472..4ac5016f925751586e815143ae940895a85217cf 100644 (file)
@@ -28,6 +28,7 @@ declare(strict_types=1);
 
 namespace OCA\TwoFactorBackupCodes\AppInfo;
 
+use Closure;
 use OCA\TwoFactorBackupCodes\Db\BackupCodeMapper;
 use OCA\TwoFactorBackupCodes\Event\CodesGenerated;
 use OCA\TwoFactorBackupCodes\Listener\ActivityPublisher;
@@ -58,9 +59,7 @@ class Application extends App implements IBootstrap {
        public function boot(IBootContext $context): void {
                Util::connectHook('OC_User', 'post_deleteUser', $this, 'deleteUser');
 
-               $this->registerNotification(
-                       $context->getAppContainer()->query(IManager::class)
-               );
+               $context->injectFn(Closure::fromCallable([$this, 'registerNotification']));
        }
 
        /**
index 12d5cd9e6263a1254551430475d1991f0cd3f7d8..c369c9574420b12889f656d68c8a56aac256adf2 100644 (file)
@@ -30,13 +30,20 @@ namespace OCA\UpdateNotification\AppInfo;
 
 use OCA\UpdateNotification\Notification\Notifier;
 use OCA\UpdateNotification\UpdateChecker;
+use OCP\App\IAppManager;
 use OCP\AppFramework\App;
 use OCP\AppFramework\Bootstrap\IBootContext;
 use OCP\AppFramework\Bootstrap\IBootstrap;
 use OCP\AppFramework\Bootstrap\IRegistrationContext;
 use OCP\AppFramework\QueryException;
+use OCP\IConfig;
+use OCP\IGroupManager;
+use OCP\ILogger;
 use OCP\IUser;
+use OCP\IUserSession;
+use OCP\Notification\IManager as INotificationManager;
 use OCP\Util;
+use Psr\Container\ContainerInterface;
 
 class Application extends App implements IBootstrap {
        public function __construct() {
@@ -47,36 +54,41 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               $server = $context->getServerContainer();
-
-               if ($server->getConfig()->getSystemValue('updatechecker', true) !== true) {
-                       // Updater check is disabled
-                       return;
-               }
-
-               // Always register the notifier, so background jobs (without a user) can send push notifications
-               $notificationsManager = $server->getNotificationManager();
-               $notificationsManager->registerNotifierService(Notifier::class);
+               $context->injectFn(function (IConfig $config,
+                                                                        INotificationManager $notificationsManager,
+                                                                        IUserSession $userSession,
+                                                                        IAppManager $appManager,
+                                                                        IGroupManager $groupManager,
+                                                                        ContainerInterface $container,
+                                                                        ILogger $logger) {
+                       if ($config->getSystemValue('updatechecker', true) !== true) {
+                               // Updater check is disabled
+                               return;
+                       }
 
-               $user = $server->getUserSession()->getUser();
-               if (!$user instanceof IUser) {
-                       // Nothing to do for guests
-                       return;
-               }
+                       // Always register the notifier, so background jobs (without a user) can send push notifications
+                       $notificationsManager->registerNotifierService(Notifier::class);
 
-               if (!$server->getAppManager()->isEnabledForUser('notifications') &&
-                       $server->getGroupManager()->isAdmin($user->getUID())) {
-                       try {
-                               $updateChecker = $server->query(UpdateChecker::class);
-                       } catch (QueryException $e) {
-                               $server->getLogger()->logException($e);
+                       $user = $userSession->getUser();
+                       if (!$user instanceof IUser) {
+                               // Nothing to do for guests
                                return;
                        }
 
-                       if ($updateChecker->getUpdateState() !== []) {
-                               Util::addScript('updatenotification', 'legacy-notification');
-                               \OC_Hook::connect('\OCP\Config', 'js', $updateChecker, 'populateJavaScriptVariables');
+                       if (!$appManager->isEnabledForUser('notifications') &&
+                               $groupManager->isAdmin($user->getUID())) {
+                               try {
+                                       $updateChecker = $container->get(UpdateChecker::class);
+                               } catch (QueryException $e) {
+                                       $logger->logException($e);
+                                       return;
+                               }
+
+                               if ($updateChecker->getUpdateState() !== []) {
+                                       Util::addScript('updatenotification', 'legacy-notification');
+                                       \OC_Hook::connect('\OCP\Config', 'js', $updateChecker, 'populateJavaScriptVariables');
+                               }
                        }
-               }
+               });
        }
 }
index a97b9c3fef9d0926e11a3f05d8da1a4cefa733dd..fb501eedd7929ed32f0cddc53fba6567ebdf98f0 100644 (file)
@@ -26,6 +26,7 @@
 
 namespace OCA\User_LDAP\AppInfo;
 
+use Closure;
 use OCA\Files_External\Service\BackendService;
 use OCA\User_LDAP\Controller\RenewPasswordController;
 use OCA\User_LDAP\Group_Proxy;
@@ -41,9 +42,14 @@ use OCP\AppFramework\App;
 use OCP\AppFramework\Bootstrap\IBootContext;
 use OCP\AppFramework\Bootstrap\IBootstrap;
 use OCP\AppFramework\Bootstrap\IRegistrationContext;
+use OCP\IConfig;
+use OCP\IGroupManager;
 use OCP\IL10N;
 use OCP\IServerContainer;
+use OCP\IUserSession;
+use OCP\Notification\IManager as INotificationManager;
 use Psr\Container\ContainerInterface;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 
 class Application extends App implements IBootstrap {
        public function __construct() {
@@ -77,35 +83,37 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               $server = $context->getServerContainer();
-               $config = $server->getConfig();
-
-               $helper = new Helper($config);
-               $configPrefixes = $helper->getServerConfigurationPrefixes(true);
-               if (count($configPrefixes) > 0) {
-                       $ldapWrapper = new LDAP();
-
-                       $notificationManager = $server->getNotificationManager();
-                       $notificationManager->registerNotifierService(Notifier::class);
-                       $userSession = $server->getUserSession();
-
-                       $userPluginManager = $server->query(UserPluginManager::class);
-                       $groupPluginManager = $server->query(GroupPluginManager::class);
-
-                       $userBackend  = new User_Proxy(
-                               $configPrefixes, $ldapWrapper, $config, $notificationManager, $userSession, $userPluginManager
-                       );
-                       $groupBackend  = new Group_Proxy($configPrefixes, $ldapWrapper, $groupPluginManager);
-                       // register user backend
-                       \OC_User::useBackend($userBackend);
-
-                       // Hook to allow plugins to work on registered backends
-                       $server->getEventDispatcher()->dispatch('OCA\\User_LDAP\\User\\User::postLDAPBackendAdded');
-
-                       $server->getGroupManager()->addBackend($groupBackend);
+               $context->injectFn(function (IConfig $config,
+                                                                        INotificationManager $notificationManager,
+                                                                        IUserSession $userSession,
+                                                                        ContainerInterface $container,
+                                                                        EventDispatcherInterface $dispatcher,
+                                                                        IGroupManager $groupManager) {
+                       $helper = new Helper($config);
+                       $configPrefixes = $helper->getServerConfigurationPrefixes(true);
+                       if (count($configPrefixes) > 0) {
+                               $ldapWrapper = new LDAP();
+
+                               $notificationManager->registerNotifierService(Notifier::class);
+
+                               $userPluginManager = $container->get(UserPluginManager::class);
+                               $groupPluginManager = $container->get(GroupPluginManager::class);
+
+                               $userBackend = new User_Proxy(
+                                       $configPrefixes, $ldapWrapper, $config, $notificationManager, $userSession, $userPluginManager
+                               );
+                               $groupBackend = new Group_Proxy($configPrefixes, $ldapWrapper, $groupPluginManager);
+                               // register user backend
+                               \OC_User::useBackend($userBackend);
+
+                               // Hook to allow plugins to work on registered backends
+                               $dispatcher->dispatch('OCA\\User_LDAP\\User\\User::postLDAPBackendAdded');
+
+                               $groupManager->addBackend($groupBackend);
+                       }
+               });
 
-                       $this->registerBackendDependents($context->getAppContainer());
-               }
+               $context->injectFn(Closure::fromCallable([$this, 'registerBackendDependents']));
 
                \OCP\Util::connectHook(
                        '\OCA\Files_Sharing\API\Server2Server',
@@ -115,10 +123,8 @@ class Application extends App implements IBootstrap {
                );
        }
 
-       public function registerBackendDependents(ContainerInterface $appContainer) {
-               /** @var IServerContainer $serverContainer */
-               $serverContainer = $appContainer->get(IServerContainer::class);
-               $serverContainer->getEventDispatcher()->addListener(
+       private function registerBackendDependents(ContainerInterface $appContainer, EventDispatcherInterface $dispatcher) {
+               $dispatcher->addListener(
                        'OCA\\Files_External::loadAdditionalBackends',
                        function () use ($appContainer) {
                                $storagesBackendService = $appContainer->get(BackendService::class);
index 2fd38c5f1ba91c3e9daac7625e3ffdc000b04bf7..ddac4a74e28f5dd98f8855bccf2386c37e797ae8 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace OCA\WorkflowEngine\AppInfo;
 
+use Closure;
 use OCA\WorkflowEngine\Controller\RequestTime;
 use OCA\WorkflowEngine\Helper\LogContext;
 use OCA\WorkflowEngine\Listener\LoadAdditionalSettingsScriptsListener;
@@ -57,11 +58,7 @@ class Application extends App implements IBootstrap {
        }
 
        public function boot(IBootContext $context): void {
-               $this->registerRuleListeners(
-                       $context->getAppContainer()->query(IEventDispatcher::class),
-                       $context->getServerContainer(),
-                       $context->getAppContainer()->query(ILogger::class)
-               );
+               $context->injectFn(Closure::fromCallable([$this, 'registerRuleListeners']));
        }
 
        private function registerRuleListeners(IEventDispatcher $dispatcher,
index 219c6d7e7824bf9f6f5da7cd51ea91554ebac7c0..b566347e3ffd6ef52780f5687c9b2b115951d2b1 100644 (file)
@@ -57,7 +57,8 @@ class BootContextTest extends TestCase {
 
        public function testGetServerContainer(): void {
                $serverContainer = $this->createMock(IServerContainer::class);
-               $this->appContainer->method('getServer')
+               $this->appContainer->method('get')
+                       ->with(IServerContainer::class)
                        ->willReturn($serverContainer);
 
                $container = $this->context->getServerContainer();