<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\Core\Shop;
use BitBag\OpenMarketplace\Component\Acl\Checker\PrivilegeCheckerInterface;
use BitBag\OpenMarketplace\Component\Vendor\Entity\ShopUserInterface;
use Sylius\Bundle\ApiBundle\Context\UserContextInterface;
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
class MenuListener
{
public function __construct(
private UserContextInterface $userContext,
private PrivilegeCheckerInterface $privilegeChecker,
) {
}
public function addAccountMenuItems(MenuBuilderEvent $event): void
{
$menu = $event->getMenu();
$menu->removeChild('organization_orders');
$menu->removeChild('address_book');
$menu->removeChild('order_history');
$menu->removeChild('dashboard');
$menu
->addChild('logout', ['route' => 'sylius_shop_logout'])
->setLabel('sylius.ui.logout')
->setLabelAttribute('icon', 'sign-out')
;
}
public function addBuyerMenu(MenuBuilderEvent $event): void
{
$menu = $event->getMenu();
$menu->removeChild('organization_orders');
/** @var ShopUserInterface $shopUser */
$shopUser = $this->userContext->getUser();
$menu->removeChild('address_book');
$menu->removeChild('order_history');
if ($shopUser->isOrganizationAdmin()) {
$menu
->addChild('organization_management', [
'route' => 'bitbag_sylius_organization_plugin_shop_account_organization_index',
])
->setLabel('bitbag_sylius_organization_plugin.ui.manage_your_organization')
->setLabelAttribute('icon', 'briefcase');
$menu
->addChild('organization_billing_address', [
'route' => 'bitbag_sylius_organization_plugin_shop_account_organization_billing_data_update',
])
->setLabel('sylius.ui.billing_address')
->setLabelAttribute('icon', 'world');
$menu
->addChild('organization_update', [
'route' => 'bitbag_sylius_organization_plugin_shop_account_organization_update',
])
->setLabel('open_marketplace.menu.shop.account.organization_update.header')
->setLabelAttribute('icon', 'book');
$menu
->addChild('organization_address_book', [
'route' => 'bitbag_sylius_organization_plugin_shop_account_organization_address_book_index',
])
->setLabel('bitbag_sylius_organization_plugin.ui.organization_address_book')
->setLabelAttribute('icon', 'book');
}
if ($this->privilegeChecker->hasPrivilege('sylius_shop_account_order_index')) {
$menu
->addChild('organization_orders', [
'route' => 'sylius_shop_account_order_index',
])
->setLabel('bitbag_sylius_organization_plugin.ui.organization_orders')
->setLabelAttribute('icon', 'shopping bag');
}
if ($this->privilegeChecker->hasPrivilege('app_shop_rfq_index')) {
$menu
->addChild('rfq', ['route' => 'app_shop_rfq_index'])
->setLabel('app.ui.rfq')
->setLabelAttribute('icon', 'handshake');
}
if ($this->privilegeChecker->hasPrivilege('app_shop_inquiry_index')) {
$menu
->addChild('inquiry', ['route' => 'app_shop_inquiry_index'])
->setLabel('app.ui.inquiry')
->setLabelAttribute('icon', 'question circle');
}
$menu
->addChild('logout', ['route' => 'sylius_shop_logout'])
->setLabel('sylius.ui.logout')
->setLabelAttribute('icon', 'sign-out')
;
}
}