diff --git a/apps/theming/appinfo/app.php b/apps/theming/appinfo/app.php deleted file mode 100644 index 784dad7d94..0000000000 --- a/apps/theming/appinfo/app.php +++ /dev/null @@ -1,49 +0,0 @@ - - * @copyright Copyright (c) 2016 Lukas Reschke - * - * @author Bjoern Schiessle - * @author Christoph Wurst - * @author Joas Schilling - * @author Julius Härtl - * @author Lukas Reschke - * @author Robin Appelman - * - * @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 . - * - */ - -use OCA\Theming\AppInfo\Application; - -$app = \OC::$server->query(Application::class); -$app->getContainer()->registerCapability(\OCA\Theming\Capabilities::class); - -$linkToCSS = \OC::$server->getURLGenerator()->linkToRoute( - 'theming.Theming.getStylesheet', - [ - 'v' => \OC::$server->getConfig()->getAppValue('theming', 'cachebuster', '0'), - ] -); -\OCP\Util::addHeader( - 'link', - [ - 'rel' => 'stylesheet', - 'href' => $linkToCSS, - ] -); - -\OCP\Util::addScript('theming', 'theming'); diff --git a/apps/theming/lib/AppInfo/Application.php b/apps/theming/lib/AppInfo/Application.php index 5d722a9627..2fc752f73a 100644 --- a/apps/theming/lib/AppInfo/Application.php +++ b/apps/theming/lib/AppInfo/Application.php @@ -2,6 +2,7 @@ /** * @copyright Copyright (c) 2019 Robin Appelman * + * @author Morris Jobke * @author Robin Appelman * @author Roeland Jago Douma * @@ -24,28 +25,26 @@ namespace OCA\Theming\AppInfo; -use OCA\Theming\Service\JSDataService; -use OCP\AppFramework\IAppContainer; -use OCP\IInitialStateService; +use OCA\Theming\Capabilities; +use OCA\Theming\Listener\BeforeTemplateRenderedListener; +use OCP\AppFramework\App; +use OCP\AppFramework\Bootstrap\IBootContext; +use OCP\AppFramework\Bootstrap\IBootstrap; +use OCP\AppFramework\Bootstrap\IRegistrationContext; +use OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent; -class Application extends \OCP\AppFramework\App { +class Application extends App implements IBootstrap { public const APP_ID = 'theming'; public function __construct() { parent::__construct(self::APP_ID); - - $container = $this->getContainer(); - $this->registerInitialState($container); } - private function registerInitialState(IAppContainer $container) { - /** @var IInitialStateService $initialState */ - $initialState = $container->query(IInitialStateService::class); + public function register(IRegistrationContext $context): void { + $context->registerCapability(Capabilities::class); + $context->registerEventListener(BeforeTemplateRenderedEvent::class, BeforeTemplateRenderedListener::class); + } - $initialState->provideLazyInitialState(self::APP_ID, 'data', function () use ($container) { - /** @var JSDataService $data */ - $data = $container->query(JSDataService::class); - return $data; - }); + public function boot(IBootContext $context): void { } } diff --git a/apps/theming/lib/Listener/BeforeTemplateRenderedListener.php b/apps/theming/lib/Listener/BeforeTemplateRenderedListener.php new file mode 100644 index 0000000000..1d84f4eae8 --- /dev/null +++ b/apps/theming/lib/Listener/BeforeTemplateRenderedListener.php @@ -0,0 +1,83 @@ + + * + * @author Morris Jobke + * + * @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\Theming\Listener; + +use OCA\Theming\AppInfo\Application; +use OCA\Theming\Service\JSDataService; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventListener; +use OCP\IConfig; +use OCP\IInitialStateService; +use OCP\IServerContainer; +use OCP\IURLGenerator; + +class BeforeTemplateRenderedListener implements IEventListener { + + /** @var IInitialStateService */ + private $initialStateService; + /** @var IURLGenerator */ + private $urlGenerator; + /** @var IConfig */ + private $config; + /** @var IServerContainer */ + private $serverContainer; + + public function __construct( + IInitialStateService $initialStateService, + IURLGenerator $urlGenerator, + IConfig $config, + IServerContainer $serverContainer + ) { + $this->initialStateService = $initialStateService; + $this->urlGenerator = $urlGenerator; + $this->config = $config; + $this->serverContainer = $serverContainer; + } + + public function handle(Event $event): void { + $serverContainer = $this->serverContainer; + $this->initialStateService->provideLazyInitialState(Application::APP_ID, 'data', function () use ($serverContainer) { + return $serverContainer->query(JSDataService::class); + }); + + $linkToCSS = $this->urlGenerator->linkToRoute( + 'theming.Theming.getStylesheet', + [ + 'v' => $this->config->getAppValue('theming', 'cachebuster', '0'), + ] + ); + \OCP\Util::addHeader( + 'link', + [ + 'rel' => 'stylesheet', + 'href' => $linkToCSS, + ] + ); + + \OCP\Util::addScript('theming', 'theming'); + } +}