Signed-off-by: Julius Härtl <jus@bitgrid.net>tags/v20.0.0beta1
@@ -32,8 +32,8 @@ use OCP\AppFramework\Controller; | |||
use OCP\AppFramework\Http\JSONResponse; | |||
use OCP\AppFramework\Http\TemplateResponse; | |||
use OCP\Dashboard\IManager; | |||
use OCP\Dashboard\IPanel; | |||
use OCP\Dashboard\RegisterPanelEvent; | |||
use OCP\Dashboard\IWidget; | |||
use OCP\Dashboard\RegisterWidgetEvent; | |||
use OCP\EventDispatcher\IEventDispatcher; | |||
use OCP\IConfig; | |||
use OCP\IInitialStateService; | |||
@@ -76,18 +76,18 @@ class DashboardController extends Controller { | |||
* @return TemplateResponse | |||
*/ | |||
public function index(): TemplateResponse { | |||
$this->eventDispatcher->dispatchTyped(new RegisterPanelEvent($this->dashboardManager)); | |||
$this->eventDispatcher->dispatchTyped(new RegisterWidgetEvent($this->dashboardManager)); | |||
$userLayout = explode(',', $this->config->getUserValue($this->userId, 'dashboard', 'layout', 'recommendations,spreed,mail,calendar')); | |||
$panels = array_map(function (IPanel $panel) { | |||
$widgets = array_map(function (IWidget $widget) { | |||
return [ | |||
'id' => $panel->getId(), | |||
'title' => $panel->getTitle(), | |||
'iconClass' => $panel->getIconClass(), | |||
'url' => $panel->getUrl() | |||
'id' => $widget->getId(), | |||
'title' => $widget->getTitle(), | |||
'iconClass' => $widget->getIconClass(), | |||
'url' => $widget->getUrl() | |||
]; | |||
}, $this->dashboardManager->getPanels()); | |||
$this->inititalStateService->provideInitialState('dashboard', 'panels', $panels); | |||
}, $this->dashboardManager->getWidgets()); | |||
$this->inititalStateService->provideInitialState('dashboard', 'panels', $widgets); | |||
$this->inititalStateService->provideInitialState('dashboard', 'layout', $userLayout); | |||
$this->inititalStateService->provideInitialState('dashboard', 'firstRun', $this->config->getUserValue($this->userId, 'dashboard', 'firstRun', '1') === '1'); | |||
$this->config->setUserValue($this->userId, 'dashboard', 'firstRun', '0'); |
@@ -100,10 +100,10 @@ class RegistrationContext { | |||
); | |||
} | |||
public function registerDashboardPanel(string $panelClass): void { | |||
public function registerDashboardWidget(string $widgetClass): void { | |||
$this->context->registerDashboardPanel( | |||
$this->appId, | |||
$panelClass | |||
$widgetClass | |||
); | |||
} | |||
@@ -282,7 +282,7 @@ class RegistrationContext { | |||
public function delegateDashboardPanelRegistrations(array $apps, IManager $dashboardManager): void { | |||
foreach ($this->dashboardPanels as $panel) { | |||
try { | |||
$dashboardManager->lazyRegisterPanel($panel['class']); | |||
$dashboardManager->lazyRegisterWidget($panel['class']); | |||
} catch (Throwable $e) { | |||
$appId = $panel['appId']; | |||
$this->logger->logException($e, [ |
@@ -29,7 +29,7 @@ namespace OC\Dashboard; | |||
use InvalidArgumentException; | |||
use OCP\AppFramework\QueryException; | |||
use OCP\Dashboard\IManager; | |||
use OCP\Dashboard\IPanel; | |||
use OCP\Dashboard\IWidget; | |||
use OCP\ILogger; | |||
use OCP\IServerContainer; | |||
use Throwable; | |||
@@ -37,10 +37,10 @@ use Throwable; | |||
class Manager implements IManager { | |||
/** @var array */ | |||
private $lazyPanels = []; | |||
private $lazyWidgets = []; | |||
/** @var IPanel[] */ | |||
private $panels = []; | |||
/** @var IWidget[] */ | |||
private $widgets = []; | |||
/** @var IServerContainer */ | |||
private $serverContainer; | |||
@@ -49,31 +49,31 @@ class Manager implements IManager { | |||
$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'); | |||
private function registerWidget(IWidget $widget): void { | |||
if (array_key_exists($widget->getId(), $this->widgets)) { | |||
throw new InvalidArgumentException('Dashboard widget with this id has already been registered'); | |||
} | |||
$this->panels[$panel->getId()] = $panel; | |||
$this->widgets[$widget->getId()] = $widget; | |||
} | |||
public function lazyRegisterPanel(string $panelClass): void { | |||
$this->lazyPanels[] = $panelClass; | |||
public function lazyRegisterWidget(string $widgetClass): void { | |||
$this->lazyWidgets[] = $widgetClass; | |||
} | |||
public function loadLazyPanels(): void { | |||
$classes = $this->lazyPanels; | |||
$classes = $this->lazyWidgets; | |||
foreach ($classes as $class) { | |||
try { | |||
/** @var IPanel $panel */ | |||
$panel = $this->serverContainer->query($class); | |||
/** @var IWidget $widget */ | |||
$widget = $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(), | |||
'message' => 'Could not load lazy dashbaord widget: ' . $e->getMessage(), | |||
'level' => ILogger::FATAL, | |||
]); | |||
} | |||
@@ -82,32 +82,32 @@ class Manager implements IManager { | |||
* type, so we might get a TypeError here that we should catch. | |||
*/ | |||
try { | |||
$this->registerPanel($panel); | |||
$this->registerWidget($widget); | |||
} 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(), | |||
'message' => 'Could not register lazy dashboard widget: ' . $e->getMessage(), | |||
'level' => ILogger::FATAL, | |||
]); | |||
} | |||
try { | |||
$panel->load(); | |||
$widget->load(); | |||
} catch (Throwable $e) { | |||
\OC::$server->getLogger()->logException($e, [ | |||
'message' => 'Error during dashboard panel loading: ' . $e->getMessage(), | |||
'message' => 'Error during dashboard widget loading: ' . $e->getMessage(), | |||
'level' => ILogger::FATAL, | |||
]); | |||
} | |||
} | |||
$this->lazyPanels = []; | |||
$this->lazyWidgets = []; | |||
} | |||
public function getPanels(): array { | |||
public function getWidgets(): array { | |||
$this->loadLazyPanels(); | |||
return $this->panels; | |||
return $this->widgets; | |||
} | |||
} |
@@ -59,11 +59,11 @@ interface IRegistrationContext { | |||
* Register an implementation of \OCP\Dashboard\IPanel that | |||
* will handle the implementation of a dashboard panel | |||
* | |||
* @param string $panelClass | |||
* @param string $widgetClass | |||
* @return void | |||
* @since 20.0.0 | |||
*/ | |||
public function registerDashboardPanel(string $panelClass): void; | |||
public function registerDashboardWidget(string $widgetClass): void; | |||
/** | |||
* Register a service | |||
* |
@@ -35,15 +35,15 @@ namespace OCP\Dashboard; | |||
interface IManager { | |||
/** | |||
* @param string $panelClass | |||
* @param string $widgetClass | |||
* @since 20.0.0 | |||
*/ | |||
public function lazyRegisterPanel(string $panelClass): void; | |||
public function lazyRegisterWidget(string $widgetClass): void; | |||
/** | |||
* @since 20.0.0 | |||
* | |||
* @return IPanel[] | |||
* @return IWidget[] | |||
*/ | |||
public function getPanels(): array; | |||
public function getWidgets(): array; | |||
} |
@@ -27,33 +27,33 @@ declare(strict_types=1); | |||
namespace OCP\Dashboard; | |||
/** | |||
* Interface IPanel | |||
* Interface IWidget | |||
* | |||
* @package OCP\Dashboard | |||
* @since 20.0.0 | |||
*/ | |||
interface IPanel { | |||
interface IWidget { | |||
/** | |||
* @return string Unique id that identifies the panel, e.g. the app id | |||
* @return string Unique id that identifies the widget, e.g. the app id | |||
* @since 20.0.0 | |||
*/ | |||
public function getId(): string; | |||
/** | |||
* @return string User facing title of the panel | |||
* @return string User facing title of the widget | |||
* @since 20.0.0 | |||
*/ | |||
public function getTitle(): string; | |||
/** | |||
* @return int Initial order for panel sorting | |||
* @return int Initial order for widget sorting | |||
* @since 20.0.0 | |||
*/ | |||
public function getOrder(): int; | |||
/** | |||
* @return string css class that displays an icon next to the panel title | |||
* @return string css class that displays an icon next to the widget title | |||
* @since 20.0.0 | |||
*/ | |||
public function getIconClass(): string; | |||
@@ -65,7 +65,7 @@ interface IPanel { | |||
public function getUrl(): ?string; | |||
/** | |||
* Execute panel bootstrap code like loading scripts and providing initial state | |||
* Execute widget bootstrap code like loading scripts and providing initial state | |||
* @since 20.0.0 | |||
*/ | |||
public function load(): void; |
@@ -40,7 +40,7 @@ use OCP\EventDispatcher\Event; | |||
* @since 20.0.0 | |||
* @deprecated 20.0.0 | |||
*/ | |||
class RegisterPanelEvent extends Event { | |||
class RegisterWidgetEvent extends Event { | |||
private $manager; | |||
public function __construct(IManager $manager) { | |||
@@ -53,7 +53,7 @@ class RegisterPanelEvent extends Event { | |||
* @param string $panelClass | |||
* @since 20.0.0 | |||
*/ | |||
public function registerPanel(string $panelClass) { | |||
$this->manager->lazyRegisterPanel($panelClass); | |||
public function registerWidget(string $panelClass) { | |||
$this->manager->lazyRegisterWidget($panelClass); | |||
} | |||
} |