From 673d70dfc5ac5cab63bda1c0d0d5d7a21bf420e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Julius=20H=C3=A4rtl?= Date: Wed, 27 May 2020 09:07:17 +0200 Subject: [PATCH] Add new dashboard public API MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/composer/composer/autoload_classmap.php | 3 + lib/composer/composer/autoload_static.php | 3 + lib/private/Dashboard/Manager.php | 46 +++++++++++++ lib/private/Server.php | 1 + lib/public/Dashboard/IManager.php | 46 +++++++++++++ lib/public/Dashboard/IPanel.php | 69 ++++++++++++++++++++ lib/public/Dashboard/IRegisterPanelEvent.php | 50 ++++++++++++++ 7 files changed, 218 insertions(+) create mode 100644 lib/private/Dashboard/Manager.php create mode 100644 lib/public/Dashboard/IManager.php create mode 100644 lib/public/Dashboard/IPanel.php create mode 100644 lib/public/Dashboard/IRegisterPanelEvent.php diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 54a335a7389..cfc47c7290f 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -166,6 +166,9 @@ return array( 'OCP\\Dashboard\\Exceptions\\DashboardAppNotAvailableException' => $baseDir . '/lib/public/Dashboard/Exceptions/DashboardAppNotAvailableException.php', 'OCP\\Dashboard\\IDashboardManager' => $baseDir . '/lib/public/Dashboard/IDashboardManager.php', 'OCP\\Dashboard\\IDashboardWidget' => $baseDir . '/lib/public/Dashboard/IDashboardWidget.php', + 'OCP\\Dashboard\\IManager' => $baseDir . '/lib/public/Dashboard/IManager.php', + 'OCP\\Dashboard\\IPanel' => $baseDir . '/lib/public/Dashboard/IPanel.php', + 'OCP\\Dashboard\\IRegisterPanelEvent' => $baseDir . '/lib/public/Dashboard/IRegisterPanelEvent.php', 'OCP\\Dashboard\\Model\\IWidgetConfig' => $baseDir . '/lib/public/Dashboard/Model/IWidgetConfig.php', 'OCP\\Dashboard\\Model\\IWidgetRequest' => $baseDir . '/lib/public/Dashboard/Model/IWidgetRequest.php', 'OCP\\Dashboard\\Model\\WidgetSetting' => $baseDir . '/lib/public/Dashboard/Model/WidgetSetting.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 1320041cfe6..f823712b586 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -195,6 +195,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Dashboard\\Exceptions\\DashboardAppNotAvailableException' => __DIR__ . '/../../..' . '/lib/public/Dashboard/Exceptions/DashboardAppNotAvailableException.php', 'OCP\\Dashboard\\IDashboardManager' => __DIR__ . '/../../..' . '/lib/public/Dashboard/IDashboardManager.php', 'OCP\\Dashboard\\IDashboardWidget' => __DIR__ . '/../../..' . '/lib/public/Dashboard/IDashboardWidget.php', + 'OCP\\Dashboard\\IManager' => __DIR__ . '/../../..' . '/lib/public/Dashboard/IManager.php', + 'OCP\\Dashboard\\IPanel' => __DIR__ . '/../../..' . '/lib/public/Dashboard/IPanel.php', + 'OCP\\Dashboard\\IRegisterPanelEvent' => __DIR__ . '/../../..' . '/lib/public/Dashboard/IRegisterPanelEvent.php', 'OCP\\Dashboard\\Model\\IWidgetConfig' => __DIR__ . '/../../..' . '/lib/public/Dashboard/Model/IWidgetConfig.php', 'OCP\\Dashboard\\Model\\IWidgetRequest' => __DIR__ . '/../../..' . '/lib/public/Dashboard/Model/IWidgetRequest.php', 'OCP\\Dashboard\\Model\\WidgetSetting' => __DIR__ . '/../../..' . '/lib/public/Dashboard/Model/WidgetSetting.php', diff --git a/lib/private/Dashboard/Manager.php b/lib/private/Dashboard/Manager.php new file mode 100644 index 00000000000..99d8999c24a --- /dev/null +++ b/lib/private/Dashboard/Manager.php @@ -0,0 +1,46 @@ + + * + * @author Julius Härtl + * + * @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 OC\Dashboard; + +use OCP\Dashboard\IManager; +use OCP\Dashboard\IPanel; + +class Manager implements IManager { + private $panels = []; + + /** + * @inheritDoc + */ + public function registerPanel(IPanel $panel): void { + if (array_key_exists($panel->getId(), $this->panels)) { + throw new \InvalidArgumentException('Dashboard panel with this id has already been registered'); + } + + $this->panels[$panel->getId()] = $panel; + } + + public function getPanels(): array { + return $this->panels; + } +} diff --git a/lib/private/Server.php b/lib/private/Server.php index eff190176b1..582718cd7c7 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -1357,6 +1357,7 @@ class Server extends ServerContainer implements IServerContainer { }); $this->registerAlias(IDashboardManager::class, DashboardManager::class); + $this->registerAlias(\OCP\Dashboard\IManager::class, \OC\Dashboard\Manager::class); $this->registerAlias(IFullTextSearchManager::class, FullTextSearchManager::class); $this->registerAlias(ISubAdmin::class, SubAdmin::class); diff --git a/lib/public/Dashboard/IManager.php b/lib/public/Dashboard/IManager.php new file mode 100644 index 00000000000..a5185ae22a7 --- /dev/null +++ b/lib/public/Dashboard/IManager.php @@ -0,0 +1,46 @@ + + * + * @author Julius Härtl + * + * @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 OCP\Dashboard; + +/** + * Interface IManager + * + * @package OCP\Dashboard + * @since 20.0.0 + */ +interface IManager { + + /** + * @param IPanel $panel + * @since 20.0.0 + */ + public function registerPanel(IPanel $panel): void; + + /** + * @since 20.0.0 + * + * @return IPanel[] + */ + public function getPanels(): array; +} diff --git a/lib/public/Dashboard/IPanel.php b/lib/public/Dashboard/IPanel.php new file mode 100644 index 00000000000..1b0e3c11d1a --- /dev/null +++ b/lib/public/Dashboard/IPanel.php @@ -0,0 +1,69 @@ + + * + * @author Julius Härtl + * + * @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 OCP\Dashboard; + +/** + * Interface IPanel + * + * @package OCP\Dashboard + * @since 20.0.0 + */ +interface IPanel { + + /** + * @return string + * @since 20.0.0 + */ + public function getId(): string; + + /** + * @return string + * @since 20.0.0 + */ + public function getTitle(): string; + + /** + * @return int + * @since 20.0.0 + */ + public function getOrder(): int; + + /** + * @return string + * @since 20.0.0 + */ + public function getIconClass(): string; + + /** + * @return string The absolute path to an icon in SVG + * @since 20.0.0 + */ + public function getIconUrl(): string; + + /** + * @return string The absolute url to the apps own view + * @since 20.0.0 + */ + public function getUrl(): string; +} diff --git a/lib/public/Dashboard/IRegisterPanelEvent.php b/lib/public/Dashboard/IRegisterPanelEvent.php new file mode 100644 index 00000000000..f322d87d82d --- /dev/null +++ b/lib/public/Dashboard/IRegisterPanelEvent.php @@ -0,0 +1,50 @@ + + * + * @author Julius Härtl + * + * @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 OCP\Dashboard; + +use OCP\EventDispatcher\Event; + +/** + * Class IRegisterPanelEvent + * + * @package OCP\Dashboard + * @since 20.0.0 + */ +class IRegisterPanelEvent extends Event { + private $manager; + + public function __construct(IManager $manager) { + parent::__construct(); + + $this->manager = $manager; + } + + /** + * @param IPanel $panel + * @since 20.0.0 + */ + public function registerPanel(IPanel $panel) { + $this->manager->registerPanel($panel); + } +} -- 2.39.5