Signed-off-by: Julius Härtl <jus@bitgrid.net>tags/v20.0.0beta1
use OCP\AppFramework\Http\TemplateResponse; | use OCP\AppFramework\Http\TemplateResponse; | ||||
use OCP\Dashboard\IManager; | use OCP\Dashboard\IManager; | ||||
use OCP\Dashboard\IPanel; | use OCP\Dashboard\IPanel; | ||||
use OCP\Dashboard\IRegisterPanelEvent; | |||||
use OCP\Dashboard\RegisterPanelEvent; | |||||
use OCP\EventDispatcher\IEventDispatcher; | use OCP\EventDispatcher\IEventDispatcher; | ||||
use OCP\IInitialStateService; | use OCP\IInitialStateService; | ||||
use OCP\IRequest; | use OCP\IRequest; | ||||
/** @var IManager */ | /** @var IManager */ | ||||
private $dashboardManager; | private $dashboardManager; | ||||
public function __construct($appName, IRequest $request, IInitialStateService $initialStateService, IEventDispatcher $eventDispatcher, IManager $dashboardManager) { | |||||
public function __construct( | |||||
$appName, | |||||
IRequest $request, | |||||
IInitialStateService $initialStateService, | |||||
IEventDispatcher $eventDispatcher, | |||||
IManager $dashboardManager | |||||
) { | |||||
parent::__construct($appName, $request); | parent::__construct($appName, $request); | ||||
$this->inititalStateService = $initialStateService; | $this->inititalStateService = $initialStateService; | ||||
* @return TemplateResponse | * @return TemplateResponse | ||||
*/ | */ | ||||
public function index(): TemplateResponse { | public function index(): TemplateResponse { | ||||
$this->eventDispatcher->dispatchTyped(new IRegisterPanelEvent($this->dashboardManager)); | |||||
$this->eventDispatcher->dispatchTyped(new RegisterPanelEvent($this->dashboardManager)); | |||||
$dashboardManager = $this->dashboardManager; | $dashboardManager = $this->dashboardManager; | ||||
$panels = array_map(function (IPanel $panel) { | $panels = array_map(function (IPanel $panel) { |
use OCP\AppFramework\QueryException; | use OCP\AppFramework\QueryException; | ||||
use OCP\Dashboard\IManager; | use OCP\Dashboard\IManager; | ||||
use OCP\Dashboard\IPanel; | use OCP\Dashboard\IPanel; | ||||
use OCP\ILogger; | |||||
use OCP\IServerContainer; | use OCP\IServerContainer; | ||||
class Manager implements IManager { | class Manager implements IManager { | ||||
$this->serverContainer = $serverContainer; | $this->serverContainer = $serverContainer; | ||||
} | } | ||||
/** | |||||
* @inheritDoc | |||||
*/ | |||||
public function registerPanel(IPanel $panel): void { | |||||
private function registerPanel(IPanel $panel): void { | |||||
if (array_key_exists($panel->getId(), $this->panels)) { | if (array_key_exists($panel->getId(), $this->panels)) { | ||||
throw new \InvalidArgumentException('Dashboard panel with this id has already been registered'); | throw new \InvalidArgumentException('Dashboard panel with this id has already been registered'); | ||||
} | } | ||||
* we can not inject it. Thus the static call. | * we can not inject it. Thus the static call. | ||||
*/ | */ | ||||
\OC::$server->getLogger()->logException($e, [ | \OC::$server->getLogger()->logException($e, [ | ||||
'message' => 'Could not register lazy crash reporter: ' . $e->getMessage(), | |||||
'message' => 'Could not register lazy dashboard panel: ' . $e->getMessage(), | |||||
'level' => ILogger::FATAL, | 'level' => ILogger::FATAL, | ||||
]); | ]); | ||||
} | } |
*/ | */ | ||||
interface IManager { | interface IManager { | ||||
/** | |||||
* @param IPanel $panel | |||||
* @since 20.0.0 | |||||
*/ | |||||
public function registerPanel(IPanel $panel): void; | |||||
/** | /** | ||||
* @param string $panelClass | * @param string $panelClass | ||||
* @since 20.0.0 | * @since 20.0.0 |
*/ | */ | ||||
public function getIconClass(): string; | 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 | * @return string The absolute url to the apps own view | ||||
* @since 20.0.0 | * @since 20.0.0 |
use OCP\EventDispatcher\Event; | use OCP\EventDispatcher\Event; | ||||
/** | /** | ||||
* Class IRegisterPanelEvent | |||||
* Class RegisterPanelEvent | |||||
* | * | ||||
* This event is dispatched to allow apps supporting older Nextcloud versions to | * This event is dispatched to allow apps supporting older Nextcloud versions to | ||||
* still register their dashboard panels so that they are only constructed when | * still register their dashboard panels so that they are only constructed when | ||||
* @since 20.0.0 | * @since 20.0.0 | ||||
* @deprecated 20.0.0 | * @deprecated 20.0.0 | ||||
*/ | */ | ||||
class IRegisterPanelEvent extends Event { | |||||
class RegisterPanelEvent extends Event { | |||||
private $manager; | private $manager; | ||||
public function __construct(IManager $manager) { | public function __construct(IManager $manager) { | ||||
} | } | ||||
/** | /** | ||||
* @param IPanel $panel | |||||
* @param string $panelClass | |||||
* @since 20.0.0 | * @since 20.0.0 | ||||
*/ | */ | ||||
public function registerPanel(IPanel $panel) { | |||||
$this->manager->registerPanel($panel); | |||||
public function registerPanel(string $panelClass) { | |||||
$this->manager->lazyRegisterPanel($panelClass); | |||||
} | } | ||||
} | } |