<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\Core\Admin\Menu;
use Knp\Menu\ItemInterface;
use Knp\Menu\Util\MenuManipulator;
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
final class MainMenuBuilder
{
public function buildMenu(MenuBuilderEvent $menuBuilderEvent): void
{
$menu = $menuBuilderEvent->getMenu();
$this->addStatisticsAndAnalyzingSection($menu);
$this->addMarketplaceSection($menu);
$this->buildCatalog($menu);
$this->buildSales($menu);
$this->buildConfiguration($menu);
}
private function addMarketplaceSection(ItemInterface $menu): void
{
$mvmRootMenuItem =
$menu
->addChild('marketplace')
->setLabel('open_marketplace.ui.marketplace');
$mvmRootMenuItem
->addChild('open_marketplace_product_listings', [
'route' => 'open_marketplace_admin_product_listing_index',
])
->setLabel('open_marketplace.ui.product_listings')
->setLabelAttribute('icon', 'list');
$mvmRootMenuItem
->addChild('vendors', [
'route' => 'open_marketplace_admin_vendor_index',
])
->setLabel('open_marketplace.ui.vendors')
->setLabelAttribute('icon', 'users');
$mvmRootMenuItem
->addChild('conversations', ['route' => 'open_marketplace_admin_messaging_conversation_index'])
->setLabel('open_marketplace.ui.menu.conversations')
->setLabelAttribute('icon', 'inbox');
$mvmRootMenuItem
->addChild('conversations_category', ['route' => 'open_marketplace_admin_messaging_conversation_category_index'])
->setLabel('open_marketplace.ui.menu.conversation_categories')
->setLabelAttribute('icon', 'inbox');
$mvmRootMenuItem
->addChild('app.seller_plans', ['route' => 'app_admin_seller_plan_index'])
->setLabel('app.ui.seller_plans')
->setLabelAttribute('icon', 'gem');
$mvmRootMenuItem
->addChild('app.subscriptions', ['route' => 'app_admin_subscription_index'])
->setLabel('app.ui.subscriptions')
->setLabelAttribute('icon', 'credit card');
$manipulator = new MenuManipulator();
$manipulator->moveChildToPosition($menu, $mvmRootMenuItem, 0);
}
private function addStatisticsAndAnalyzingSection(ItemInterface $menu): void
{
$statsAnalyzingItem =
$menu
->addChild('statistics_analyzing')
->setLabel('app.stats.statistics_analyzing');
$statsAnalyzingItem
->addChild('analytics', [
'route' => 'app_admin_analytics_index',
])
->setLabel('app.stats.analytics')
->setLabelAttribute('icon', 'chart line');
$statsAnalyzingItem
->addChild('statistics', [
'route' => 'app_admin_statistics_index',
])
->setLabel('app.stats.statistics')
->setLabelAttribute('icon', 'chart bar');
$statsAnalyzingItem
->addChild('impression_analytics', [
'route' => 'app_admin_impression_analytics_index',
])
->setLabel('app.stats.impression_analytics')
->setLabelAttribute('icon', 'chart line');
$manipulator = new MenuManipulator();
$manipulator->moveChildToPosition($menu, $statsAnalyzingItem, 2);
}
private function buildCatalog(ItemInterface $menu): void
{
$catalog = $menu->getChild('catalog');
$catalog?->addChild('app.tag', ['route' => 'app_admin_tag_index'])
->setLabel('app.ui.tags')
->setLabelAttribute('icon', 'tags');
}
private function buildSales(ItemInterface $menu): void
{
$sales = $menu->getChild('sales');
$sales?->addChild('app.rfq', ['route' => 'app_admin_rfq_index'])
->setLabel('app.ui.rfq')
->setLabelAttribute('icon', 'handshake');
$sales?->addChild('app.inquiry', ['route' => 'app_admin_inquiry_index'])
->setLabel('app.ui.inquiry')
->setLabelAttribute('icon', 'question circle');
}
private function buildConfiguration(ItemInterface $menu): void
{
$configuration = $menu->getChild('configuration');
$configuration?->addChild('app.email_configuration', ['route' => 'app_admin_email_configuration_index'])
->setLabel('app.ui.email_configuration')
->setLabelAttribute('icon', 'envelope outline');
$configuration?->addChild('app.email_scheduler', ['route' => 'app_admin_email_scheduler_index'])
->setLabel('app.ui.email_scheduler')
->setLabelAttribute('icon', 'calendar times outline');
}
}