diff --git a/lib/private/Dashboard/Manager.php b/lib/private/Dashboard/Manager.php index 45038b87f90..d4a9eb189ff 100644 --- a/lib/private/Dashboard/Manager.php +++ b/lib/private/Dashboard/Manager.php @@ -25,11 +25,12 @@ class Manager implements IManager { /** @var array */ private array $widgets = []; - private ContainerInterface $serverContainer; private ?IAppManager $appManager = null; - public function __construct(ContainerInterface $serverContainer) { - $this->serverContainer = $serverContainer; + public function __construct( + private ContainerInterface $serverContainer, + private LoggerInterface $logger, + ) { } private function registerWidget(IWidget $widget): void { @@ -37,6 +38,10 @@ class Manager implements IManager { throw new InvalidArgumentException('Dashboard widget with this id has already been registered'); } + if (!preg_match('/^[a-z][a-z0-9\-_]*$/', $widget->getId())) { + $this->logger->debug('Deprecated dashboard widget ID provided: "' . $widget->getId() . '" [ ' . get_class($widget) . ' ]. Please use a-z, 0-9, - and _ only, starting with a-z'); + } + $this->widgets[$widget->getId()] = $widget; } diff --git a/lib/public/Dashboard/IIconWidget.php b/lib/public/Dashboard/IIconWidget.php index c6cfd03e0ff..203a89279b0 100644 --- a/lib/public/Dashboard/IIconWidget.php +++ b/lib/public/Dashboard/IIconWidget.php @@ -14,7 +14,9 @@ namespace OCP\Dashboard; */ interface IIconWidget extends IWidget { /** - * Get the absolute url for the widget icon + * Get the absolute url for the widget icon (should be colored black or not have a color) + * + * The icon will be inverted automatically in mobile clients and when using dark mode * * @return string * @since 25.0.0 diff --git a/lib/public/Dashboard/IWidget.php b/lib/public/Dashboard/IWidget.php index 134758f02c6..c6bac98cae2 100644 --- a/lib/public/Dashboard/IWidget.php +++ b/lib/public/Dashboard/IWidget.php @@ -15,7 +15,12 @@ namespace OCP\Dashboard; */ interface IWidget { /** - * @return string Unique id that identifies the widget, e.g. the app id + * Get a unique identifier for the widget + * + * To ensure uniqueness, it is recommended to user the app id or start with the + * app id followed by a dash. + * + * @return string Unique id that identifies the widget, e.g. the app id. Only use alphanumeric characters, dash and underscore * @since 20.0.0 */ public function getId(): string; @@ -33,6 +38,13 @@ interface IWidget { public function getOrder(): int; /** + * CSS class that shows the widget icon (should be colored black or not have a color) + * + * The icon will be inverted automatically in mobile clients and when using dark mode. + * Therefore, it is NOT recommended to use a css class that sets the background with: + * `var(--icon-…)` as those will adapt to dark/bright mode in the web and still be inverted + * resulting in a dark icon on dark background. + * * @return string css class that displays an icon next to the widget title * @since 20.0.0 */