diff options
author | Morris Jobke <hey@morrisjobke.de> | 2020-07-13 18:04:49 +0300 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2020-07-24 13:23:16 +0300 |
commit | 340cd81d2f9acd5c866638618c6a894f0b3de2d4 (patch) | |
tree | e77519a7f9fc50228795d48bda3f4d48cbe5cc9c /apps | |
parent | 6ef029d6f34da238a0a4119c00b8c1f699958e09 (diff) |
Use IBootstrap for the app theming
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/theming/appinfo/app.php | 49 | ||||
-rw-r--r-- | apps/theming/lib/AppInfo/Application.php | 29 | ||||
-rw-r--r-- | apps/theming/lib/Listener/BeforeTemplateRenderedListener.php | 83 |
3 files changed, 97 insertions, 64 deletions
diff --git a/apps/theming/appinfo/app.php b/apps/theming/appinfo/app.php deleted file mode 100644 index 784dad7d945..00000000000 --- a/apps/theming/appinfo/app.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org> - * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch> - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Julius Härtl <jus@bitgrid.net> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Robin Appelman <robin@icewind.nl> - * - * @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 <http://www.gnu.org/licenses/>. - * - */ - -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 5d722a96276..2fc752f73a8 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 <robin@icewind.nl> * + * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> * @author Roeland Jago Douma <roeland@famdouma.nl> * @@ -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 00000000000..1d84f4eae83 --- /dev/null +++ b/apps/theming/lib/Listener/BeforeTemplateRenderedListener.php @@ -0,0 +1,83 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2020 Morris Jobke <hey@morrisjobke.de> + * + * @author Morris Jobke <hey@morrisjobke.de> + * + * @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 <http://www.gnu.org/licenses/>. + * + */ + +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'); + } +} |