<?php
namespace App\Listener;
use App\Service\Admin\WarehouseManager;
use App\Service\SupportChat;
use Sonata\AdminBundle\Event\ConfigureMenuEvent;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
final class MenuBuilderListener
{
private SupportChat $supportChat;
private AuthorizationCheckerInterface $securityChecker;
private WarehouseManager $warehouseManager;
public function __construct(
SupportChat $supportChat,
AuthorizationCheckerInterface $securityChecker,
WarehouseManager $warehouseManager
) {
$this->supportChat = $supportChat;
$this->securityChecker = $securityChecker;
$this->warehouseManager = $warehouseManager;
}
public function addMenuItems(ConfigureMenuEvent $event): void
{
$menu = $event->getMenu();
$menu = $menu->addChild('reports', [
'label' => 'Statistics',
'on_top' => true,
])->setExtras([
'icon' => 'bi bi-bar-chart'// html is also supported
]);
$menu->addChild('dashboard', [
'route' => 'admin_app_statistics_dashboard',
'label' => 'Dashboard',
]);
if ($this->securityChecker->isGranted('ROLE_ADMIN')
|| $this->securityChecker->isGranted('ROLE_CUSTOMER')
) {
$menu->addChild('marketing_cost', [
'route' => 'admin_app_marketingcost_list',
'label' => 'Add Cost Page',
'on_top' => true,
]);
}
$ticketCount = sprintf(' (%s)', $this->supportChat->ticketCount());
if ($this->securityChecker->isGranted('ROLE_ADMIN')) {
$menu = $event->getMenu();
$menu->addChild('Customer care', [
'label' => 'Customer care' . $ticketCount,
'roles' => ['ROLE_ADMIN'],
'on_top' => true,
])->setExtras([
'icon' => 'bi bi-envelope',
])->addChild('Tickets', [
'route' => 'admin_app_support_chat_list',
'label' => 'Tickets',
'icon' => 'bi bi-envelope',
]);
}
$warehouses = $this->warehouseManager->getList();
if ($this->securityChecker->isGranted('ROLE_ADMIN') && !empty($warehouses)) {
$menu = $event->getMenu();
$warehouseMenuItem = $menu->addChild('Warehouse', [
'label' => 'Warehouse',
'roles' => ['ROLE_ADMIN'],
'on_top' => true,
])->setExtras([
'icon' => 'bi bi-house',
]);
foreach ($warehouses as $warehouse) {
$currentRow = $warehouseMenuItem->addChild($warehouse->getName(), [
'label' => $warehouse->getName(),
'on_top' => true,
])->setExtras([
'icon' => '',
]);
$currentRow->addChild('Fulfillment Settings', [
'route' => 'admin_app_fulfillmentsettings_list',
'routeParameters' => ['warehouse_id' => $warehouse->getId()],
'label' => 'Fulfillment Settings',
]);
$currentRow->addChild('Pick&Pack Settings', [
'route' => 'admin_app_pickandpacksettings_list',
'routeParameters' => ['warehouse_id' => $warehouse->getId()],
'label' => 'Pick&Pack Settings',
]);
$currentRow->addChild('Shipping Providers', [
'route' => 'admin_app_shippingprovider_list',
'routeParameters' => ['warehouse_id' => $warehouse->getId()],
'label' => 'Shipping Providers',
]);
}
}
if ($this->securityChecker->isGranted('ROLE_ADMIN')) {
$menu = $event->getMenu();
$trackingMenuItem = $menu->addChild('Tracking', [
'label' => 'Tracking',
'roles' => ['ROLE_ADMIN'],
'on_top' => true,
])->setExtras([
'icon' => 'bi bi-share-fill',
]);
$trackingMenuItem->addChild('Source', [
'label' => 'Source',
'route' => 'admin_app_tracker_list',
])->setExtras([
'icon' => '',
]);
$trackingMenuItem->addChild('Funnel', [
'label' => 'Funnel',
'route' => 'admin_app_funnel_list',
])->setExtras([
'icon' => '',
]);
$trackingMenuItem->addChild('Funnel Step', [
'label' => 'Funnel Steps',
'route' => 'admin_app_funnelstep_list',
])->setExtras([
'icon' => '',
]);
$trackingMenuItem->addChild('Dashboard', [
'label' => 'Dashboard',
'route' => 'admin_app_funnel_statistics_dashboard',
])->setExtras([
'icon' => '',
]);
$productGroup = $menu->getChild('Product');
if ($productGroup) {
$productGroup->addChild('Stock History', [
'label' => 'Stock History',
'route' => 'admin_app_productstocktransaction_list',
])->setExtras([
'icon' => '',
'routes' => [
['route' => 'admin_app_productstocktransaction_list'],
],
]);
$productGroup->addChild('Inventory', [
'label' => 'Inventory',
'route' => 'admin_app_productstocktransaction_inventory',
])->setExtras([
'icon' => '',
'routes' => [
['route' => 'admin_app_productstocktransaction_inventory'],
],
]);
}
}
}
}