diff --git a/Admin/View/MenuTitleWidget.php b/Admin/View/MenuTitleWidget.php new file mode 100644 index 0000000..b9b1a4e --- /dev/null +++ b/Admin/View/MenuTitleWidget.php @@ -0,0 +1,66 @@ + + * @copyright Copyright (c) 2020, Darvin Studio + * @link https://www.darvin-studio.ru + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Darvin\MenuBundle\Admin\View; + +use Darvin\AdminBundle\Security\Permissions\Permission; +use Darvin\AdminBundle\View\Widget\Widget\AbstractWidget; +use Darvin\MenuBundle\Configuration\MenuConfigurationInterface; +use Darvin\MenuBundle\Entity\Menu\Item; + +/** + * Menu title admin view widget + */ +class MenuTitleWidget extends AbstractWidget +{ + /** + * @var \Darvin\MenuBundle\Configuration\MenuConfigurationInterface + */ + private $menuConfig; + + /** + * @param \Darvin\MenuBundle\Configuration\MenuConfigurationInterface $menuConfig Menu config + */ + public function __construct(MenuConfigurationInterface $menuConfig) + { + $this->menuConfig = $menuConfig; + } + + /** + * {@inheritDoc} + */ + protected function createContent(object $entity, array $options): ?string + { + /** @var \Darvin\MenuBundle\Entity\Menu\Item $item */ + $item = $entity; + + if ($this->menuConfig->hasMenu($item->getMenu())) { + return $this->menuConfig->getMenu($item->getMenu())->getTitle(); + } + + return $item->getMenu(); + } + + /** + * {@inheritDoc} + */ + protected function getAllowedEntityClasses(): iterable + { + yield Item::class; + } + + /** + * {@inheritDoc} + */ + protected function getRequiredPermissions(): iterable + { + yield Permission::VIEW; + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 2efc236..55e38b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -123,3 +123,5 @@ equals to ``` but in the last case alias may be defined in runtime. + +7.1.2: Add "menu_title" admin view widget. diff --git a/Configuration/MenuConfiguration.php b/Configuration/MenuConfiguration.php index f2448d1..84f14e8 100644 --- a/Configuration/MenuConfiguration.php +++ b/Configuration/MenuConfiguration.php @@ -50,6 +50,16 @@ public function getMenu(string $alias): Menu return $menus[$alias]; } + /** + * {@inheritDoc} + */ + public function hasMenu(string $alias): bool + { + $menus = $this->getMenus(); + + return isset($menus[$alias]); + } + /** * {@inheritDoc} */ diff --git a/Configuration/MenuConfigurationInterface.php b/Configuration/MenuConfigurationInterface.php index 9aab156..58a9ade 100644 --- a/Configuration/MenuConfigurationInterface.php +++ b/Configuration/MenuConfigurationInterface.php @@ -23,6 +23,13 @@ interface MenuConfigurationInterface */ public function getMenu(string $alias): Menu; + /** + * @param string $alias Menu alias + * + * @return bool + */ + public function hasMenu(string $alias): bool; + /** * @return \Darvin\MenuBundle\Configuration\Menu[] * diff --git a/Resources/config/admin/menu/item.yaml b/Resources/config/admin/menu/item.yaml index ec57af6..fd1e2c2 100644 --- a/Resources/config/admin/menu/item.yaml +++ b/Resources/config/admin/menu/item.yaml @@ -26,7 +26,8 @@ view: index: fields: menuTitle: - size: sm + size: sm + widget: menu_title position: type: position enabled: @@ -34,7 +35,7 @@ view: showChildren: type: checkbox slugMapItem: - size: xxxl + size: xxxl widget: slug_map_item_link image: size: xxs diff --git a/Resources/config/services/admin.yaml b/Resources/config/services/admin.yaml index 40fbc35..6fc741c 100644 --- a/Resources/config/services/admin.yaml +++ b/Resources/config/services/admin.yaml @@ -11,7 +11,9 @@ parameters: darvin_menu.admin.menu_item_sorter.class: Darvin\MenuBundle\Admin\Sorter\MenuItemSorter - darvin_menu.admin.slug_map_item_link_view_widget.class: Darvin\MenuBundle\Admin\View\SlugMapItemLinkWidget + darvin_menu.admin.view.widget.menu_title.class: Darvin\MenuBundle\Admin\View\MenuTitleWidget + + darvin_menu.admin.view.widget.slug_map_item_link.class: Darvin\MenuBundle\Admin\View\SlugMapItemLinkWidget services: darvin_menu.admin.form_type.menu: @@ -72,8 +74,16 @@ services: - '@darvin_menu.slug_map.object_loader' - '@darvin_utils.tree.sorter' - darvin_menu.admin.slug_map_item_link_view_widget: - class: '%darvin_menu.admin.slug_map_item_link_view_widget.class%' + darvin_menu.admin.view.widget.menu_title: + class: '%darvin_menu.admin.view.widget.menu_title.class%' + parent: darvin_admin.view.widget.abstract + arguments: + - '@darvin_menu.configuration.menu' + tags: + - { name: darvin_admin.view_widget } + + darvin_menu.admin.view.widget.slug_map_item_link: + class: '%darvin_menu.admin.view.widget.slug_map_item_link.class%' parent: darvin_admin.view.widget.abstract arguments: - '@darvin_admin.entity_namer'