aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2020-07-15 11:10:15 +0200
committerGitHub <noreply@github.com>2020-07-15 11:10:15 +0200
commitf04f9321dfda4c46f8473dfe711e4c97e21a15bb (patch)
tree646075b2129c66ea30fa920c757f07f257e49d4f /lib
parent24ec4a83ba8d3a490cfa3eaa97b9e64a0afdae06 (diff)
parent6b2bb32f2347ea29ec81a8f096afddfc2cc0a312 (diff)
downloadnextcloud-server-f04f9321dfda4c46f8473dfe711e4c97e21a15bb.tar.gz
nextcloud-server-f04f9321dfda4c46f8473dfe711e4c97e21a15bb.zip
Merge pull request #21346 from nextcloud/enh/20930/dashboard
Dashboard API
Diffstat (limited to 'lib')
-rw-r--r--lib/composer/composer/autoload_classmap.php4
-rw-r--r--lib/composer/composer/autoload_static.php4
-rw-r--r--lib/private/AppFramework/Bootstrap/Coordinator.php7
-rw-r--r--lib/private/AppFramework/Bootstrap/RegistrationContext.php35
-rw-r--r--lib/private/Dashboard/Manager.php113
-rw-r--r--lib/private/Server.php1
-rw-r--r--lib/public/AppFramework/Bootstrap/IRegistrationContext.php9
-rw-r--r--lib/public/Dashboard/IDashboardManager.php7
-rw-r--r--lib/public/Dashboard/IDashboardWidget.php8
-rw-r--r--lib/public/Dashboard/IManager.php49
-rw-r--r--lib/public/Dashboard/IPanel.php72
-rw-r--r--lib/public/Dashboard/Model/IWidgetConfig.php6
-rw-r--r--lib/public/Dashboard/Model/IWidgetRequest.php8
-rw-r--r--lib/public/Dashboard/Model/WidgetSetting.php13
-rw-r--r--lib/public/Dashboard/Model/WidgetSetup.php13
-rw-r--r--lib/public/Dashboard/Model/WidgetTemplate.php18
-rw-r--r--lib/public/Dashboard/RegisterPanelEvent.php59
-rw-r--r--lib/public/Dashboard/Service/IEventsService.php4
-rw-r--r--lib/public/Dashboard/Service/IWidgetsService.php2
19 files changed, 432 insertions, 0 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 54a335a7389..5e80e620d72 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -166,11 +166,14 @@ 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\\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',
'OCP\\Dashboard\\Model\\WidgetSetup' => $baseDir . '/lib/public/Dashboard/Model/WidgetSetup.php',
'OCP\\Dashboard\\Model\\WidgetTemplate' => $baseDir . '/lib/public/Dashboard/Model/WidgetTemplate.php',
+ 'OCP\\Dashboard\\RegisterPanelEvent' => $baseDir . '/lib/public/Dashboard/RegisterPanelEvent.php',
'OCP\\Dashboard\\Service\\IEventsService' => $baseDir . '/lib/public/Dashboard/Service/IEventsService.php',
'OCP\\Dashboard\\Service\\IWidgetsService' => $baseDir . '/lib/public/Dashboard/Service/IWidgetsService.php',
'OCP\\Defaults' => $baseDir . '/lib/public/Defaults.php',
@@ -942,6 +945,7 @@ return array(
'OC\\DB\\SchemaWrapper' => $baseDir . '/lib/private/DB/SchemaWrapper.php',
'OC\\DB\\SetTransactionIsolationLevel' => $baseDir . '/lib/private/DB/SetTransactionIsolationLevel.php',
'OC\\Dashboard\\DashboardManager' => $baseDir . '/lib/private/Dashboard/DashboardManager.php',
+ 'OC\\Dashboard\\Manager' => $baseDir . '/lib/private/Dashboard/Manager.php',
'OC\\DatabaseException' => $baseDir . '/lib/private/DatabaseException.php',
'OC\\DatabaseSetupException' => $baseDir . '/lib/private/DatabaseSetupException.php',
'OC\\DateTimeFormatter' => $baseDir . '/lib/private/DateTimeFormatter.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 1320041cfe6..4cffa4e4a69 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -195,11 +195,14 @@ 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\\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',
'OCP\\Dashboard\\Model\\WidgetSetup' => __DIR__ . '/../../..' . '/lib/public/Dashboard/Model/WidgetSetup.php',
'OCP\\Dashboard\\Model\\WidgetTemplate' => __DIR__ . '/../../..' . '/lib/public/Dashboard/Model/WidgetTemplate.php',
+ 'OCP\\Dashboard\\RegisterPanelEvent' => __DIR__ . '/../../..' . '/lib/public/Dashboard/RegisterPanelEvent.php',
'OCP\\Dashboard\\Service\\IEventsService' => __DIR__ . '/../../..' . '/lib/public/Dashboard/Service/IEventsService.php',
'OCP\\Dashboard\\Service\\IWidgetsService' => __DIR__ . '/../../..' . '/lib/public/Dashboard/Service/IWidgetsService.php',
'OCP\\Defaults' => __DIR__ . '/../../..' . '/lib/public/Defaults.php',
@@ -971,6 +974,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\DB\\SchemaWrapper' => __DIR__ . '/../../..' . '/lib/private/DB/SchemaWrapper.php',
'OC\\DB\\SetTransactionIsolationLevel' => __DIR__ . '/../../..' . '/lib/private/DB/SetTransactionIsolationLevel.php',
'OC\\Dashboard\\DashboardManager' => __DIR__ . '/../../..' . '/lib/private/Dashboard/DashboardManager.php',
+ 'OC\\Dashboard\\Manager' => __DIR__ . '/../../..' . '/lib/private/Dashboard/Manager.php',
'OC\\DatabaseException' => __DIR__ . '/../../..' . '/lib/private/DatabaseException.php',
'OC\\DatabaseSetupException' => __DIR__ . '/../../..' . '/lib/private/DatabaseSetupException.php',
'OC\\DateTimeFormatter' => __DIR__ . '/../../..' . '/lib/private/DateTimeFormatter.php',
diff --git a/lib/private/AppFramework/Bootstrap/Coordinator.php b/lib/private/AppFramework/Bootstrap/Coordinator.php
index 3edc0f97472..358e71d7854 100644
--- a/lib/private/AppFramework/Bootstrap/Coordinator.php
+++ b/lib/private/AppFramework/Bootstrap/Coordinator.php
@@ -30,6 +30,7 @@ use OC_App;
use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\QueryException;
+use OCP\Dashboard\IManager;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\ILogger;
use OCP\IServerContainer;
@@ -47,6 +48,9 @@ class Coordinator {
/** @var Registry */
private $registry;
+ /** @var IManager */
+ private $dashboardManager;
+
/** @var IEventDispatcher */
private $eventDispatcher;
@@ -58,10 +62,12 @@ class Coordinator {
public function __construct(IServerContainer $container,
Registry $registry,
+ IManager $dashboardManager,
IEventDispatcher $eventListener,
ILogger $logger) {
$this->serverContainer = $container;
$this->registry = $registry;
+ $this->dashboardManager = $dashboardManager;
$this->eventDispatcher = $eventListener;
$this->logger = $logger;
}
@@ -117,6 +123,7 @@ class Coordinator {
*/
$this->registrationContext->delegateCapabilityRegistrations($apps);
$this->registrationContext->delegateCrashReporterRegistrations($apps, $this->registry);
+ $this->registrationContext->delegateDashboardPanelRegistrations($apps, $this->dashboardManager);
$this->registrationContext->delegateEventListenerRegistrations($this->eventDispatcher);
$this->registrationContext->delegateContainerRegistrations($apps);
$this->registrationContext->delegateMiddlewareRegistrations($apps);
diff --git a/lib/private/AppFramework/Bootstrap/RegistrationContext.php b/lib/private/AppFramework/Bootstrap/RegistrationContext.php
index 15b1cfa51e8..270035a2908 100644
--- a/lib/private/AppFramework/Bootstrap/RegistrationContext.php
+++ b/lib/private/AppFramework/Bootstrap/RegistrationContext.php
@@ -29,6 +29,7 @@ use Closure;
use OC\Support\CrashReport\Registry;
use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
+use OCP\Dashboard\IManager;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\ILogger;
use Throwable;
@@ -42,6 +43,9 @@ class RegistrationContext {
private $crashReporters = [];
/** @var array[] */
+ private $dashboardPanels = [];
+
+ /** @var array[] */
private $services = [];
/** @var array[] */
@@ -93,6 +97,13 @@ class RegistrationContext {
);
}
+ public function registerDashboardPanel(string $panelClass): void {
+ $this->context->registerDashboardPanel(
+ $this->appId,
+ $panelClass
+ );
+ }
+
public function registerService(string $name, callable $factory, bool $shared = true): void {
$this->context->registerService(
$this->appId,
@@ -157,6 +168,13 @@ class RegistrationContext {
];
}
+ public function registerDashboardPanel(string $appId, string $panelClass): void {
+ $this->dashboardPanels[] = [
+ 'appId' => $appId,
+ 'class' => $panelClass
+ ];
+ }
+
public function registerService(string $appId, string $name, callable $factory, bool $shared = true): void {
$this->services[] = [
"appId" => $appId,
@@ -241,6 +259,23 @@ class RegistrationContext {
}
}
+ /**
+ * @param App[] $apps
+ */
+ public function delegateDashboardPanelRegistrations(array $apps, IManager $dashboardManager): void {
+ foreach ($this->dashboardPanels as $panel) {
+ try {
+ $dashboardManager->lazyRegisterPanel($panel['class']);
+ } catch (Throwable $e) {
+ $appId = $panel['appId'];
+ $this->logger->logException($e, [
+ 'message' => "Error during dashboard registration of $appId: " . $e->getMessage(),
+ 'level' => ILogger::ERROR,
+ ]);
+ }
+ }
+ }
+
public function delegateEventListenerRegistrations(IEventDispatcher $eventDispatcher): void {
foreach ($this->eventListeners as $registration) {
try {
diff --git a/lib/private/Dashboard/Manager.php b/lib/private/Dashboard/Manager.php
new file mode 100644
index 00000000000..0c285a8b53d
--- /dev/null
+++ b/lib/private/Dashboard/Manager.php
@@ -0,0 +1,113 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
+ * @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 OC\Dashboard;
+
+use InvalidArgumentException;
+use OCP\AppFramework\QueryException;
+use OCP\Dashboard\IManager;
+use OCP\Dashboard\IPanel;
+use OCP\ILogger;
+use OCP\IServerContainer;
+use Throwable;
+
+class Manager implements IManager {
+
+ /** @var array */
+ private $lazyPanels = [];
+
+ /** @var IPanel[] */
+ private $panels = [];
+
+ /** @var IServerContainer */
+ private $serverContainer;
+
+ public function __construct(IServerContainer $serverContainer) {
+ $this->serverContainer = $serverContainer;
+ }
+
+ private 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 lazyRegisterPanel(string $panelClass): void {
+ $this->lazyPanels[] = $panelClass;
+ }
+
+ public function loadLazyPanels(): void {
+ $classes = $this->lazyPanels;
+ foreach ($classes as $class) {
+ try {
+ /** @var IPanel $panel */
+ $panel = $this->serverContainer->query($class);
+ } catch (QueryException $e) {
+ /*
+ * There is a circular dependency between the logger and the registry, so
+ * we can not inject it. Thus the static call.
+ */
+ \OC::$server->getLogger()->logException($e, [
+ 'message' => 'Could not load lazy dashbaord panel: ' . $e->getMessage(),
+ 'level' => ILogger::FATAL,
+ ]);
+ }
+ /**
+ * Try to register the loaded reporter. Theoretically it could be of a wrong
+ * type, so we might get a TypeError here that we should catch.
+ */
+ try {
+ $this->registerPanel($panel);
+ } catch (Throwable $e) {
+ /*
+ * There is a circular dependency between the logger and the registry, so
+ * we can not inject it. Thus the static call.
+ */
+ \OC::$server->getLogger()->logException($e, [
+ 'message' => 'Could not register lazy dashboard panel: ' . $e->getMessage(),
+ 'level' => ILogger::FATAL,
+ ]);
+ }
+
+ try {
+ $panel->load();
+ } catch (Throwable $e) {
+ \OC::$server->getLogger()->logException($e, [
+ 'message' => 'Error during dashboard panel loading: ' . $e->getMessage(),
+ 'level' => ILogger::FATAL,
+ ]);
+ }
+ }
+ $this->lazyPanels = [];
+ }
+
+ public function getPanels(): array {
+ $this->loadLazyPanels();
+ 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/AppFramework/Bootstrap/IRegistrationContext.php b/lib/public/AppFramework/Bootstrap/IRegistrationContext.php
index 12367e5ed05..8ce140996b7 100644
--- a/lib/public/AppFramework/Bootstrap/IRegistrationContext.php
+++ b/lib/public/AppFramework/Bootstrap/IRegistrationContext.php
@@ -56,6 +56,15 @@ interface IRegistrationContext {
public function registerCrashReporter(string $reporterClass): void;
/**
+ * Register an implementation of \OCP\Dashboard\IPanel that
+ * will handle the implementation of a dashboard panel
+ *
+ * @param string $panelClass
+ * @return void
+ * @since 20.0.0
+ */
+ public function registerDashboardPanel(string $panelClass): void;
+ /**
* Register a service
*
* @param string $name
diff --git a/lib/public/Dashboard/IDashboardManager.php b/lib/public/Dashboard/IDashboardManager.php
index 812338bfb30..164a86cd8bd 100644
--- a/lib/public/Dashboard/IDashboardManager.php
+++ b/lib/public/Dashboard/IDashboardManager.php
@@ -38,6 +38,7 @@ use OCP\Dashboard\Service\IWidgetsService;
* The call can be done from any Service.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard
*/
@@ -48,6 +49,7 @@ interface IDashboardManager {
* Register a IWidgetsService.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param IWidgetsService $widgetsService
*/
@@ -58,6 +60,7 @@ interface IDashboardManager {
* Register a IEventsService.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param IEventsService $eventsService
*/
@@ -70,6 +73,7 @@ interface IDashboardManager {
* @see IWidgetConfig
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $widgetId
* @param string $userId
@@ -92,6 +96,7 @@ interface IDashboardManager {
* that are running dashboard.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $widgetId
* @param array $users
@@ -106,6 +111,7 @@ interface IDashboardManager {
* Create push notifications for groups. (ie. createUsersEvent())
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $widgetId
* @param array $groups
@@ -120,6 +126,7 @@ interface IDashboardManager {
* Create push notifications for everyone. (ie. createUsersEvent())
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $widgetId
* @param array $payload
diff --git a/lib/public/Dashboard/IDashboardWidget.php b/lib/public/Dashboard/IDashboardWidget.php
index ef8b9c74d15..4d1b0c11475 100644
--- a/lib/public/Dashboard/IDashboardWidget.php
+++ b/lib/public/Dashboard/IDashboardWidget.php
@@ -45,6 +45,7 @@ use OCP\Dashboard\Model\WidgetTemplate;
* Multiple widget can be defined in the same appinfo/info.xml.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard
*/
@@ -54,6 +55,7 @@ interface IDashboardWidget {
* Should returns the (unique) Id of the widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -64,6 +66,7 @@ interface IDashboardWidget {
* Should returns the [display] name of the widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -75,6 +78,7 @@ interface IDashboardWidget {
* This description is displayed in the listing of the available widgets.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -88,6 +92,7 @@ interface IDashboardWidget {
* @see WidgetTemplate
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return WidgetTemplate
*/
@@ -101,6 +106,7 @@ interface IDashboardWidget {
* @see WidgetSetup
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return WidgetSetup
*/
@@ -119,6 +125,7 @@ interface IDashboardWidget {
* @see IWidgetConfig
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param IWidgetConfig $settings
*/
@@ -134,6 +141,7 @@ interface IDashboardWidget {
* @see IWidgetRequest
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param IWidgetRequest $request
*/
diff --git a/lib/public/Dashboard/IManager.php b/lib/public/Dashboard/IManager.php
new file mode 100644
index 00000000000..985c8c7838f
--- /dev/null
+++ b/lib/public/Dashboard/IManager.php
@@ -0,0 +1,49 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
+ * @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 OCP\Dashboard;
+
+/**
+ * Interface IManager
+ *
+ * @package OCP\Dashboard
+ * @since 20.0.0
+ */
+interface IManager {
+
+ /**
+ * @param string $panelClass
+ * @since 20.0.0
+ */
+ public function lazyRegisterPanel(string $panelClass): 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..59d88f7a7e9
--- /dev/null
+++ b/lib/public/Dashboard/IPanel.php
@@ -0,0 +1,72 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
+ * @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 OCP\Dashboard;
+
+/**
+ * Interface IPanel
+ *
+ * @package OCP\Dashboard
+ * @since 20.0.0
+ */
+interface IPanel {
+
+ /**
+ * @return string Unique id that identifies the panel, e.g. the app id
+ * @since 20.0.0
+ */
+ public function getId(): string;
+
+ /**
+ * @return string User facing title of the panel
+ * @since 20.0.0
+ */
+ public function getTitle(): string;
+
+ /**
+ * @return int Initial order for panel sorting
+ * @since 20.0.0
+ */
+ public function getOrder(): int;
+
+ /**
+ * @return string css class that displays an icon next to the panel title
+ * @since 20.0.0
+ */
+ public function getIconClass(): string;
+
+ /**
+ * @return string|null The absolute url to the apps own view
+ * @since 20.0.0
+ */
+ public function getUrl(): ?string;
+
+ /**
+ * Execute panel bootstrap code like loading scripts and providing initial state
+ * @since 20.0.0
+ */
+ public function load(): void;
+}
diff --git a/lib/public/Dashboard/Model/IWidgetConfig.php b/lib/public/Dashboard/Model/IWidgetConfig.php
index 41c9e233177..078c14c742d 100644
--- a/lib/public/Dashboard/Model/IWidgetConfig.php
+++ b/lib/public/Dashboard/Model/IWidgetConfig.php
@@ -36,6 +36,7 @@ use OCP\Dashboard\IDashboardWidget;
* @see IDashboardWidget::loadWidget
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard\Model
*/
@@ -46,6 +47,7 @@ interface IWidgetConfig {
* Returns the userId
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -56,6 +58,7 @@ interface IWidgetConfig {
* Returns the widgetId
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -75,6 +78,7 @@ interface IWidgetConfig {
* ]
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -105,6 +109,7 @@ interface IWidgetConfig {
* Dashboard app.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -115,6 +120,7 @@ interface IWidgetConfig {
* Returns if the widget is enabled/displayed in this user's dashboard.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return bool
*/
diff --git a/lib/public/Dashboard/Model/IWidgetRequest.php b/lib/public/Dashboard/Model/IWidgetRequest.php
index 18ad855006c..5f1f2e396cf 100644
--- a/lib/public/Dashboard/Model/IWidgetRequest.php
+++ b/lib/public/Dashboard/Model/IWidgetRequest.php
@@ -38,6 +38,7 @@ use OCP\Dashboard\IDashboardWidget;
* @see IDashboardWidget::requestWidget
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard\Model
*/
@@ -47,6 +48,7 @@ interface IWidgetRequest {
* Get the widgetId.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -57,6 +59,7 @@ interface IWidgetRequest {
* Get the WidgetClass.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return IDashboardWidget
*/
@@ -76,6 +79,7 @@ interface IWidgetRequest {
* callback);
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -88,6 +92,7 @@ interface IWidgetRequest {
* @see getRequest
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -98,6 +103,7 @@ interface IWidgetRequest {
* Returns the result.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -108,6 +114,7 @@ interface IWidgetRequest {
* add a result (as string)
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $key
* @param string $result
@@ -120,6 +127,7 @@ interface IWidgetRequest {
* add a result (as array)
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $key
* @param array $result
diff --git a/lib/public/Dashboard/Model/WidgetSetting.php b/lib/public/Dashboard/Model/WidgetSetting.php
index 62429607602..406811e1f87 100644
--- a/lib/public/Dashboard/Model/WidgetSetting.php
+++ b/lib/public/Dashboard/Model/WidgetSetting.php
@@ -45,6 +45,7 @@ use JsonSerializable;
* @see WidgetTemplate::addSetting
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard\Model
*/
@@ -73,6 +74,7 @@ final class WidgetSetting implements JsonSerializable {
* WidgetSetting constructor.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $type
*/
@@ -85,6 +87,7 @@ final class WidgetSetting implements JsonSerializable {
* Set the name of the setting (full string, no space)
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $name
*
@@ -100,6 +103,7 @@ final class WidgetSetting implements JsonSerializable {
* Get the name of the setting
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -112,6 +116,7 @@ final class WidgetSetting implements JsonSerializable {
* Set the title/display name of the setting.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $title
*
@@ -127,6 +132,7 @@ final class WidgetSetting implements JsonSerializable {
* Get the title of the setting
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -139,6 +145,7 @@ final class WidgetSetting implements JsonSerializable {
* Set the type of the setting (input, checkbox, ...)
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $type
*
@@ -154,6 +161,7 @@ final class WidgetSetting implements JsonSerializable {
* Get the type of the setting.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -166,6 +174,7 @@ final class WidgetSetting implements JsonSerializable {
* Set the placeholder (in case of type=input)
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $text
*
@@ -181,6 +190,7 @@ final class WidgetSetting implements JsonSerializable {
* Get the placeholder.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -193,6 +203,7 @@ final class WidgetSetting implements JsonSerializable {
* Set the default value of the setting.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $value
*
@@ -208,6 +219,7 @@ final class WidgetSetting implements JsonSerializable {
* Get the default value.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -218,6 +230,7 @@ final class WidgetSetting implements JsonSerializable {
/**
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
diff --git a/lib/public/Dashboard/Model/WidgetSetup.php b/lib/public/Dashboard/Model/WidgetSetup.php
index 18dc0abd481..2a1fc877414 100644
--- a/lib/public/Dashboard/Model/WidgetSetup.php
+++ b/lib/public/Dashboard/Model/WidgetSetup.php
@@ -38,6 +38,7 @@ use JsonSerializable;
* @see IDashboardWidget::getWidgetSetup
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard\Model
*/
@@ -73,6 +74,7 @@ final class WidgetSetup implements JsonSerializable {
*
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $type
*
@@ -90,6 +92,7 @@ final class WidgetSetup implements JsonSerializable {
* Returns all sizes defined for the widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -101,6 +104,7 @@ final class WidgetSetup implements JsonSerializable {
* Add a new size to the setup.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $type
* @param int $width
@@ -121,6 +125,7 @@ final class WidgetSetup implements JsonSerializable {
* Returns menu entries.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -136,6 +141,7 @@ final class WidgetSetup implements JsonSerializable {
* $text is the display name of the menu entry.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $function
* @param string $icon
@@ -161,6 +167,7 @@ final class WidgetSetup implements JsonSerializable {
* $delay is the time in seconds between each call.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $function
* @param int $delay
@@ -180,6 +187,7 @@ final class WidgetSetup implements JsonSerializable {
* Get delayed jobs.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -192,6 +200,7 @@ final class WidgetSetup implements JsonSerializable {
* Get the push function, called when an event is send to the front-end
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -204,6 +213,7 @@ final class WidgetSetup implements JsonSerializable {
* frontend.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $function
*
@@ -220,6 +230,7 @@ final class WidgetSetup implements JsonSerializable {
* Returns the default settings for a widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -235,6 +246,7 @@ final class WidgetSetup implements JsonSerializable {
* @see WidgetSetting
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param array $settings
*
@@ -249,6 +261,7 @@ final class WidgetSetup implements JsonSerializable {
/**
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
diff --git a/lib/public/Dashboard/Model/WidgetTemplate.php b/lib/public/Dashboard/Model/WidgetTemplate.php
index e25abb02540..10285cfb003 100644
--- a/lib/public/Dashboard/Model/WidgetTemplate.php
+++ b/lib/public/Dashboard/Model/WidgetTemplate.php
@@ -37,6 +37,7 @@ use JsonSerializable;
* @see IDashboardWidget::getWidgetTemplate
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard\Model
*/
@@ -66,6 +67,7 @@ final class WidgetTemplate implements JsonSerializable {
* Get the icon class of the widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -80,6 +82,7 @@ final class WidgetTemplate implements JsonSerializable {
* @see addCss
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $icon
*
@@ -95,6 +98,7 @@ final class WidgetTemplate implements JsonSerializable {
* Get CSS files to be included when displaying a widget
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -106,6 +110,7 @@ final class WidgetTemplate implements JsonSerializable {
* path and name of CSS files
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param array $css
*
@@ -121,6 +126,7 @@ final class WidgetTemplate implements JsonSerializable {
* Add a CSS file to be included when displaying a widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $css
*
@@ -136,6 +142,7 @@ final class WidgetTemplate implements JsonSerializable {
* Get JS files to be included when loading a widget
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
@@ -147,6 +154,7 @@ final class WidgetTemplate implements JsonSerializable {
* Set an array of JS files to be included when loading a widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param array $js
*
@@ -162,6 +170,7 @@ final class WidgetTemplate implements JsonSerializable {
* Add a JS file to be included when loading a widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $js
*
@@ -177,6 +186,7 @@ final class WidgetTemplate implements JsonSerializable {
* Get the HTML file that contains the content of the widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -188,6 +198,7 @@ final class WidgetTemplate implements JsonSerializable {
* Set the HTML file that contains the content of the widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $content
*
@@ -203,6 +214,7 @@ final class WidgetTemplate implements JsonSerializable {
* Get the JS function to be called when loading the widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return string
*/
@@ -215,6 +227,7 @@ final class WidgetTemplate implements JsonSerializable {
* dashboard
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $function
*
@@ -232,6 +245,7 @@ final class WidgetTemplate implements JsonSerializable {
* @see WidgetSetting
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return WidgetSetting[]
*/
@@ -243,6 +257,7 @@ final class WidgetTemplate implements JsonSerializable {
* Define all WidgetSetting for the widget.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @see WidgetSetting
*
@@ -262,6 +277,7 @@ final class WidgetTemplate implements JsonSerializable {
* @see WidgetSetting
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param WidgetSetting $setting
*
@@ -279,6 +295,7 @@ final class WidgetTemplate implements JsonSerializable {
* @see WidgetSetting::setName
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $key
*
@@ -295,6 +312,7 @@ final class WidgetTemplate implements JsonSerializable {
/**
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @return array
*/
diff --git a/lib/public/Dashboard/RegisterPanelEvent.php b/lib/public/Dashboard/RegisterPanelEvent.php
new file mode 100644
index 00000000000..2bd157127fd
--- /dev/null
+++ b/lib/public/Dashboard/RegisterPanelEvent.php
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
+ * @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 OCP\Dashboard;
+
+use OCP\EventDispatcher\Event;
+
+/**
+ * Class RegisterPanelEvent
+ *
+ * This event is dispatched to allow apps supporting older Nextcloud versions to
+ * still register their dashboard panels so that they are only constructed when
+ * they are needed. Deprecated right away so we can drop it again after 19 is EOL
+ * and backward compatible apps can use OCP\AppFramework\Bootstrap\IBootstrap
+ *
+ * @package OCP\Dashboard
+ * @since 20.0.0
+ * @deprecated 20.0.0
+ */
+class RegisterPanelEvent extends Event {
+ private $manager;
+
+ public function __construct(IManager $manager) {
+ parent::__construct();
+
+ $this->manager = $manager;
+ }
+
+ /**
+ * @param string $panelClass
+ * @since 20.0.0
+ */
+ public function registerPanel(string $panelClass) {
+ $this->manager->lazyRegisterPanel($panelClass);
+ }
+}
diff --git a/lib/public/Dashboard/Service/IEventsService.php b/lib/public/Dashboard/Service/IEventsService.php
index f79d1a28e5a..0e5931878e9 100644
--- a/lib/public/Dashboard/Service/IEventsService.php
+++ b/lib/public/Dashboard/Service/IEventsService.php
@@ -35,6 +35,7 @@ use OCP\Dashboard\IDashboardManager;
* are used by the IDashboardManager when creating push event.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard\Service
*/
@@ -47,6 +48,7 @@ interface IEventsService {
* @see IDashboardManager::createUsersEvent
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $widgetId
* @param array $users
@@ -62,6 +64,7 @@ interface IEventsService {
* @see IDashboardManager::createGroupsEvent
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $widgetId
* @param array $groups
@@ -77,6 +80,7 @@ interface IEventsService {
* @see IDashboardManager::createGlobalEvent
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $widgetId
* @param array $payload
diff --git a/lib/public/Dashboard/Service/IWidgetsService.php b/lib/public/Dashboard/Service/IWidgetsService.php
index dea20489e13..059d91a6661 100644
--- a/lib/public/Dashboard/Service/IWidgetsService.php
+++ b/lib/public/Dashboard/Service/IWidgetsService.php
@@ -36,6 +36,7 @@ use OCP\Dashboard\Model\IWidgetConfig;
* configuration of a widget for a user.
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @package OCP\Dashboard\Service
*/
@@ -45,6 +46,7 @@ interface IWidgetsService {
* Returns the IWidgetConfig for a widgetId and userId
*
* @since 15.0.0
+ * @deprecated 20.0.0
*
* @param string $widgetId
* @param string $userId