* @copyright 2018, Maxence Lange * @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\Model; use JsonSerializable; /** * Interface WidgetSetup * * A widget must create an WidgetSetup object and returns it in the * IDashboardWidget::getWidgetSetup method. * * @see IDashboardWidget::getWidgetSetup * * @since 15.0.0 * * @package OCP\Dashboard\Model */ final class WidgetSetup implements JsonSerializable { const SIZE_TYPE_MIN = 'min'; const SIZE_TYPE_MAX = 'max'; const SIZE_TYPE_DEFAULT = 'default'; /** @var array */ private $sizes = []; /** @var array */ private $menus = []; /** @var array */ private $jobs = []; /** @var string */ private $push = ''; /** @var array */ private $settings = []; /** * Get the defined size for a specific type (min, max, default) * Returns an array: * [ * 'width' => width, * 'height' => height * ] * * * @since 15.0.0 * * @param string $type * * @return array */ public function getSize(string $type): array { if (array_key_exists($type, $this->sizes)) { return $this->sizes[$type]; } return []; } /** * Returns all sizes defined for the widget. * * @since 15.0.0 * * @return array */ public function getSizes(): array { return $this->sizes; } /** * Add a new size to the setup. * * @since 15.0.0 * * @param string $type * @param int $width * @param int $height * * @return WidgetSetup */ public function addSize(string $type, int $width, int $height): WidgetSetup { $this->sizes[$type] = [ 'width' => $width, 'height' => $height ]; return $this; } /** * Returns menu entries. * * @since 15.0.0 * * @return array */ public function getMenuEntries(): array { return $this->menus; } /** * Add a menu entry to the widget. * $function is the Javascript function to be called when clicking the * menu entry. * $icon is the css class of the icon. * $text is the display name of the menu entry. * * @since 15.0.0 * * @param string $function * @param string $icon * @param string $text * * @return WidgetSetup */ public function addMenuEntry(string $function, string $icon, string $text): WidgetSetup { $this->menus[] = [ 'function' => $function, 'icon' => $icon, 'text' => $text ]; return $this; } /** * Add a delayed job to the widget. * * $function is the Javascript function to be called. * $delay is the time in seconds between each call. * * @since 15.0.0 * * @param string $function * @param int $delay * * @return WidgetSetup */ public function addDelayedJob(string $function, int $delay): WidgetSetup { $this->jobs[] = [ 'function' => $function, 'delay' => $delay ]; return $this; } /** * Get delayed jobs. * * @since 15.0.0 * * @return array */ public function getDelayedJobs(): array { return $this->jobs; } /** * Get the push function, called when an event is send to the front-end * * @since 15.0.0 * * @return string */ public function getPush(): string { return $this->push; } /** * Set the Javascript function to be called when an event is pushed to the * frontend. * * @since 15.0.0 * * @param string $function * * @return WidgetSetup */ public function setPush(string $function): WidgetSetup { $this->push = $function; return $this; } /** * Returns the default settings for a widget. * * @since 15.0.0 * * @return array */ public function getDefaultSettings(): array { return $this->settings; } /** * Set the default settings for a widget. * This method is used by the Dashboard app, using the settings created * using WidgetSetting * * @see WidgetSetting * * @since 15.0.0 * * @param array $settings * * @return WidgetSetup */ public function setDefaultSettings(array $settings): WidgetSetup { $this->settings = $settings; return $this; } /** * @since 15.0.0 * * @return array */ public function jsonSerialize() { return [ 'size' => $this->getSizes(), 'menu' => $this->getMenuEntries(), 'jobs' => $this->getDelayedJobs(), 'push' => $this->getPush(), 'settings' => $this->getDefaultSettings() ]; } }