From 8b36655b2756ff3d47f294e8cd62d188a70be187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bar=C3=A1=C5=A1ek?= Date: Mon, 26 Sep 2022 21:45:07 +0200 Subject: [PATCH] MenuItem: Fix compatbility with submenu from plugin menuItem. --- src/Menu/MenuItem.php | 33 +++++++++++++++++++++++++++++++++ src/Menu/MenuManager.php | 20 ++++---------------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/Menu/MenuItem.php b/src/Menu/MenuItem.php index 6af737b..6cd67eb 100644 --- a/src/Menu/MenuItem.php +++ b/src/Menu/MenuItem.php @@ -20,4 +20,37 @@ public function __construct( public array $child = [], ) { } + + + /** + * @param array{ + * service: string, + * type: class-string, + * name: string, + * realName: string, + * baseEntity: string|null, + * label: string, + * basePath: string, + * priority: int, + * icon: string|null, + * roles: array, + * privileges: array, + * menuItem: array|null + * } $plugin + */ + public static function fromPluginDefinition(array $plugin): self + { + return new self( + key: $plugin['service'], + title: $plugin['label'], + pluginName: $plugin['name'], + priority: $plugin['priority'], + link: sprintf( + '%s/%s', + Configuration::get()->getBaseUri(), Helpers::formatPresenterNameToUri($plugin['name']), + ), + icon: $plugin['icon'] ?? null, + child: [], + ); + } } diff --git a/src/Menu/MenuManager.php b/src/Menu/MenuManager.php index 652b8d5..e27bb71 100644 --- a/src/Menu/MenuManager.php +++ b/src/Menu/MenuManager.php @@ -43,22 +43,10 @@ public function getItems(): array if (isset($this->ignorePlugins[$plugin['type']]) === true) { continue; } - $menuItem = $plugin['menuItem'] ?? null; - if ($menuItem !== null) { - $return[] = $menuItem; - continue; - } - $route = Helpers::formatPresenterNameToUri($plugin['name']); - if ($this->authorizator->get()->isAllowedPlugin($route)) { - $return[] = new MenuItem( - key: $plugin['service'], - title: $plugin['label'], - pluginName: $plugin['name'], - priority: $plugin['priority'], - link: Configuration::get()->getBaseUri() . '/' . $route, - icon: $plugin['icon'] ?? null, - child: [], - ); + if (isset($plugin['menuItem'])) { + $return[] = MenuItem::fromPluginDefinition($plugin['menuItem']); + } elseif ($this->authorizator->get()->isAllowedPlugin(Helpers::formatPresenterNameToUri($plugin['name']))) { + $return[] = MenuItem::fromPluginDefinition($plugin); } }