<?php
/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
declare(strict_types=1);
namespace Ibexa\Bundle\OrderManagement\EventSubscriber;
use Ibexa\AdminUi\Menu\Event\ConfigureMenuEvent;
use Ibexa\Contracts\OrderManagement\Policy\Order\View;
use Ibexa\Contracts\ProductCatalog\PermissionResolverInterface;
use JMS\TranslationBundle\Model\Message;
use JMS\TranslationBundle\Translation\TranslationContainerInterface;
use Knp\Menu\ItemInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
final class MainMenuSubscriber implements EventSubscriberInterface, TranslationContainerInterface
{
public const ITEM_COMMERCE = 'main__commerce';
public const ITEM_COMMERCE_ORDERS = 'main__commerce__orders';
private PermissionResolverInterface $permissionResolver;
public function __construct(PermissionResolverInterface $permissionResolver)
{
$this->permissionResolver = $permissionResolver;
}
public static function getSubscribedEvents(): array
{
return [
ConfigureMenuEvent::MAIN_MENU => ['onConfigureMainMenu', 15],
];
}
public function onConfigureMainMenu(ConfigureMenuEvent $event): void
{
$menu = $event->getMenu();
$this->addCommerceMenu($menu);
$rootElement = $menu->getChild(self::ITEM_COMMERCE);
if ($rootElement === null || !$this->permissionResolver->canUser(new View())) {
return;
}
$rootElement->addChild(
self::ITEM_COMMERCE_ORDERS,
[
'route' => 'ibexa.order_management.list',
'extras' => [
'orderNumber' => 10,
'routes' => [
[
'pattern' => '~^ibexa\.order_management\.~',
],
],
],
]
);
}
public static function getTranslationMessages(): array
{
return [
(new Message(self::ITEM_COMMERCE, 'ibexa_menu'))->setDesc('Commerce'),
(new Message(self::ITEM_COMMERCE_ORDERS, 'ibexa_menu'))->setDesc('Orders'),
];
}
private function addCommerceMenu(ItemInterface $menu): void
{
$menu->addChild(
self::ITEM_COMMERCE,
[
'attributes' => [
'data-tooltip-placement' => 'right',
'data-tooltip-extra-class' => 'ibexa-tooltip--navigation',
],
'extras' => [
'icon' => 'cart-full',
'orderNumber' => 100,
],
]
);
}
}