diff --git a/src/Sylius/Bundle/AdminBundle/Menu/AdministrationMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/AdministrationMenuBuilder.php new file mode 100644 index 0000000000..80b25e934e --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/AdministrationMenuBuilder.php @@ -0,0 +1,45 @@ +menuBuilder->createMenu($options); + + $administration = $menu + ->addChild('sylius.ui.administration') + ->setLabel('sylius.ui.administration') + ->setLabelAttribute('icon', 'tabler:lock') + ; + + $administration + ->addChild('roles') + ->setUri('https://sylius.com/plus/?utm_source=product&utm_medium=placeholder&utm_campaign=rbac-placeholder') + ->setLinkAttribute('target', '_blank') + ->setLabel('sylius.ui.roles') + ->setExtra('plus_logo', true) + ; + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/CatalogMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/CatalogMenuBuilder.php new file mode 100644 index 0000000000..d3170f6bde --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/CatalogMenuBuilder.php @@ -0,0 +1,95 @@ +menuBuilder->createMenu($options); + + $catalog = $menu + ->addChild('catalog') + ->setLabel('sylius.menu.admin.main.catalog.header') + ->setLabelAttribute('icon', 'tabler:list-details') + ->setExtra('always_open', true) + ; + + $catalog + ->addChild('taxons', ['route' => 'sylius_admin_taxon_create', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_taxon_create_for_parent'], + ['route' => 'sylius_admin_taxon_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.catalog.taxons') + ->setLabelAttribute('icon', 'tabler:folder') + ; + + $catalog + ->addChild('products', ['route' => 'sylius_admin_product_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_product_create'], + ['route' => 'sylius_admin_product_create_simple'], + ['route' => 'sylius_admin_product_update'], + ['route' => 'sylius_admin_product_show'], + ['route' => 'sylius_admin_product_variant_index'], + ['route' => 'sylius_admin_product_variant_create'], + ['route' => 'sylius_admin_product_variant_update'], + ['route' => 'sylius_admin_product_variant_generate'], + ]]]) + ->setLabel('sylius.menu.admin.main.catalog.products') + ->setLabelAttribute('icon', 'tabler:cube') + ; + + $catalog + ->addChild('inventory', ['route' => 'sylius_admin_inventory_index']) + ->setLabel('sylius.menu.admin.main.catalog.inventory') + ->setLabelAttribute('icon', 'tabler:history') + ; + + $catalog + ->addChild('attributes', ['route' => 'sylius_admin_product_attribute_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_product_attribute_create'], + ['route' => 'sylius_admin_product_attribute_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.catalog.attributes') + ->setLabelAttribute('icon', 'tabler:cube-spark') + ; + + $catalog + ->addChild('options', ['route' => 'sylius_admin_product_option_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_product_option_create'], + ['route' => 'sylius_admin_product_option_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.catalog.options') + ->setLabelAttribute('icon', 'tabler:settings') + ; + + $catalog + ->addChild('association_types', ['route' => 'sylius_admin_product_association_type_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_product_association_type_create'], + ['route' => 'sylius_admin_product_association_type_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.catalog.association_types') + ->setLabelAttribute('icon', 'tabler:subtask') + ; + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/ConfigurationMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/ConfigurationMenuBuilder.php new file mode 100644 index 0000000000..6a55ecebc4 --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/ConfigurationMenuBuilder.php @@ -0,0 +1,145 @@ +menuBuilder->createMenu($options); + + $configuration = $menu + ->addChild('configuration') + ->setLabel('sylius.menu.admin.main.configuration.header') + ->setLabelAttribute('icon', 'tabler:adjustments') + ; + + $configuration + ->addChild('channels', ['route' => 'sylius_admin_channel_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_channel_create'], + ['route' => 'sylius_admin_channel_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.channels') + ->setLabelAttribute('icon', 'tabler:arrows-shuffle') + ; + + $configuration + ->addChild('countries', ['route' => 'sylius_admin_country_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_country_create'], + ['route' => 'sylius_admin_country_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.countries') + ->setLabelAttribute('icon', 'tabler:flag') + ; + + $configuration + ->addChild('zones', ['route' => 'sylius_admin_zone_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_zone_create'], + ['route' => 'sylius_admin_zone_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.zones') + ->setLabelAttribute('icon', 'tabler:world') + ; + + $configuration + ->addChild('currencies', ['route' => 'sylius_admin_currency_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_currency_create'], + ['route' => 'sylius_admin_currency_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.currencies') + ->setLabelAttribute('icon', 'tabler:currency-dollar') + ; + + $configuration + ->addChild('exchange_rates', ['route' => 'sylius_admin_exchange_rate_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_exchange_rate_create'], + ['route' => 'sylius_admin_exchange_rate_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.exchange_rates') + ->setLabelAttribute('icon', 'tabler:adjustments') + ; + + $configuration + ->addChild('locales', ['route' => 'sylius_admin_locale_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_locale_create'], + ['route' => 'sylius_admin_locale_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.locales') + ->setLabelAttribute('icon', 'tabler:bubble-text') + ; + + $configuration + ->addChild('payment_methods', ['route' => 'sylius_admin_payment_method_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_payment_method_create'], + ['route' => 'sylius_admin_payment_method_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.payment_methods') + ->setLabelAttribute('icon', 'tabler:credit-card-pay') + ; + + $configuration + ->addChild('shipping_methods', ['route' => 'sylius_admin_shipping_method_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_shipping_method_create'], + ['route' => 'sylius_admin_shipping_method_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.shipping_methods') + ->setLabelAttribute('icon', 'tabler:truck') + ; + + $configuration + ->addChild('shipping_categories', ['route' => 'sylius_admin_shipping_category_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_shipping_category_create'], + ['route' => 'sylius_admin_shipping_category_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.shipping_categories') + ->setLabelAttribute('icon', 'tabler:layout-list') + ; + + $configuration + ->addChild('tax_categories', ['route' => 'sylius_admin_tax_category_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_tax_category_create'], + ['route' => 'sylius_admin_tax_category_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.tax_categories') + ->setLabelAttribute('icon', 'tabler:tags') + ; + + $configuration + ->addChild('tax_rates', ['route' => 'sylius_admin_tax_rate_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_tax_rate_create'], + ['route' => 'sylius_admin_tax_rate_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.tax_rates') + ->setLabelAttribute('icon', 'tabler:coins') + ; + + $configuration + ->addChild('admin_users', ['route' => 'sylius_admin_admin_user_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_admin_user_create'], + ['route' => 'sylius_admin_admin_user_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.configuration.admin_users') + ->setLabelAttribute('icon', 'tabler:lock') + ; + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/CustomersMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/CustomersMenuBuilder.php new file mode 100644 index 0000000000..7d88f7398d --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/CustomersMenuBuilder.php @@ -0,0 +1,57 @@ +menuBuilder->createMenu($options); + + $customers = $menu + ->addChild('customers') + ->setLabel('sylius.menu.admin.main.customers.header') + ->setLabelAttribute('icon', 'tabler:users') + ->setExtra('always_open', true) + ; + + $customers + ->addChild('customers', ['route' => 'sylius_admin_customer_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_customer_create'], + ['route' => 'sylius_admin_customer_update'], + ['route' => 'sylius_admin_customer_show'], + ]]]) + ->setLabel('sylius.menu.admin.main.customers.customers') + ->setLabelAttribute('icon', 'tabler:users') + ; + + $customers + ->addChild('groups', ['route' => 'sylius_admin_customer_group_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_customer_group_create'], + ['route' => 'sylius_admin_customer_group_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.customers.groups') + ->setLabelAttribute('icon', 'tabler:archive') + ; + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/DashboardMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/DashboardMenuBuilder.php new file mode 100644 index 0000000000..7bb111a8a2 --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/DashboardMenuBuilder.php @@ -0,0 +1,37 @@ +menuBuilder->createMenu($options); + + $menu + ->addChild('dashboard', ['route' => 'sylius_admin_dashboard']) + ->setLabel('sylius.ui.dashboard') + ->setLabelAttribute('icon', 'tabler:dashboard') + ; + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/EventMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/EventMenuBuilder.php new file mode 100644 index 0000000000..73bea0ba6d --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/EventMenuBuilder.php @@ -0,0 +1,39 @@ +menuBuilder->createMenu($options); + + $this->eventDispatcher->dispatch(new MenuBuilderEvent($this->factory, $menu), MainMenuBuilder::EVENT_NAME); + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/MainMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/MainMenuBuilder.php index afc2058a5a..f4d2b3205c 100644 --- a/src/Sylius/Bundle/AdminBundle/Menu/MainMenuBuilder.php +++ b/src/Sylius/Bundle/AdminBundle/Menu/MainMenuBuilder.php @@ -15,400 +15,40 @@ namespace Sylius\Bundle\AdminBundle\Menu; use Knp\Menu\FactoryInterface; use Knp\Menu\ItemInterface; -use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Routing\RouterInterface; -final readonly class MainMenuBuilder +final readonly class MainMenuBuilder implements MenuBuilderInterface { public const EVENT_NAME = 'sylius.menu.admin.main'; public function __construct( private FactoryInterface $factory, - private EventDispatcherInterface $eventDispatcher, - private RouterInterface $router, + private ?EventDispatcherInterface $eventDispatcher = null, + private ?RouterInterface $router = null, ) { + if (null !== $this->eventDispatcher) { + trigger_deprecation( + 'sylius/admin-bundle', + '2.3', + 'Passing an instance of "%s" as second argument is deprecated and will be removed in Sylius 3.0.', + EventDispatcherInterface::class, + ); + } + + if (null !== $this->router) { + trigger_deprecation( + 'sylius/admin-bundle', + '2.3', + 'Passing an instance of "%s" as third argument is deprecated and will be removed in Sylius 3.0.', + RouterInterface::class, + ); + } } /** @param array $options */ public function createMenu(array $options): ItemInterface { - $menu = $this->factory->createItem('root'); - - $this->addDashboardItem($menu); - $this->addCatalogSubMenu($menu); - $this->addSalesSubMenu($menu); - $this->addCustomersSubMenu($menu); - $this->addMarketingSubMenu($menu); - $this->addConfigurationSubMenu($menu); - $this->addOfficialSupportSubMenu($menu); - $this->addAdministrationSubMenu($menu); - - $this->eventDispatcher->dispatch(new MenuBuilderEvent($this->factory, $menu), self::EVENT_NAME); - - return $menu; - } - - private function addDashboardItem(ItemInterface $menu): void - { - $menu - ->addChild('dashboard') - ->setLabel('sylius.ui.dashboard') - ->setLabelAttribute('icon', 'tabler:dashboard') - ->setUri($this->router->generate('sylius_admin_dashboard')) - ; - } - - private function addCatalogSubMenu(ItemInterface $menu): void - { - $catalog = $menu - ->addChild('catalog') - ->setLabel('sylius.menu.admin.main.catalog.header') - ->setLabelAttribute('icon', 'tabler:list-details') - ->setExtra('always_open', true) - ; - - $catalog - ->addChild('taxons', ['route' => 'sylius_admin_taxon_create', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_taxon_create_for_parent'], - ['route' => 'sylius_admin_taxon_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.catalog.taxons') - ->setLabelAttribute('icon', 'tabler:folder') - ; - - $catalog - ->addChild('products', ['route' => 'sylius_admin_product_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_product_create'], - ['route' => 'sylius_admin_product_create_simple'], - ['route' => 'sylius_admin_product_update'], - ['route' => 'sylius_admin_product_show'], - ['route' => 'sylius_admin_product_variant_index'], - ['route' => 'sylius_admin_product_variant_create'], - ['route' => 'sylius_admin_product_variant_update'], - ['route' => 'sylius_admin_product_variant_generate'], - ]]]) - ->setLabel('sylius.menu.admin.main.catalog.products') - ->setLabelAttribute('icon', 'tabler:cube') - ; - - $catalog - ->addChild('inventory', ['route' => 'sylius_admin_inventory_index']) - ->setLabel('sylius.menu.admin.main.catalog.inventory') - ->setLabelAttribute('icon', 'tabler:history') - ; - - $catalog - ->addChild('attributes', ['route' => 'sylius_admin_product_attribute_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_product_attribute_create'], - ['route' => 'sylius_admin_product_attribute_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.catalog.attributes') - ->setLabelAttribute('icon', 'tabler:cube-spark') - ; - - $catalog - ->addChild('options', ['route' => 'sylius_admin_product_option_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_product_option_create'], - ['route' => 'sylius_admin_product_option_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.catalog.options') - ->setLabelAttribute('icon', 'tabler:settings') - ; - - $catalog - ->addChild('association_types', ['route' => 'sylius_admin_product_association_type_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_product_association_type_create'], - ['route' => 'sylius_admin_product_association_type_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.catalog.association_types') - ->setLabelAttribute('icon', 'tabler:subtask') - ; - } - - private function addCustomersSubMenu(ItemInterface $menu): void - { - $customers = $menu - ->addChild('customers') - ->setLabel('sylius.menu.admin.main.customers.header') - ->setLabelAttribute('icon', 'tabler:users') - ->setExtra('always_open', true) - ; - - $customers - ->addChild('customers', ['route' => 'sylius_admin_customer_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_customer_create'], - ['route' => 'sylius_admin_customer_update'], - ['route' => 'sylius_admin_customer_show'], - ]]]) - ->setLabel('sylius.menu.admin.main.customers.customers') - ->setLabelAttribute('icon', 'tabler:users') - ; - - $customers - ->addChild('groups', ['route' => 'sylius_admin_customer_group_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_customer_group_create'], - ['route' => 'sylius_admin_customer_group_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.customers.groups') - ->setLabelAttribute('icon', 'tabler:archive') - ; - } - - private function addMarketingSubMenu(ItemInterface $menu): void - { - $marketing = $menu - ->addChild('marketing') - ->setLabel('sylius.menu.admin.main.marketing.header') - ->setLabelAttribute('icon', 'tabler:percentage') - ; - - $marketing - ->addChild('promotions', ['route' => 'sylius_admin_promotion_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_promotion_create'], - ['route' => 'sylius_admin_promotion_update'], - ['route' => 'sylius_admin_promotion_coupon_index'], - ['route' => 'sylius_admin_promotion_coupon_create'], - ['route' => 'sylius_admin_promotion_coupon_update'], - ['route' => 'sylius_admin_promotion_coupon_generate'], - ]]]) - ->setLabel('sylius.menu.admin.main.marketing.cart_promotions') - ->setLabelAttribute('icon', 'tabler:shopping-cart-down') - ; - - $marketing - ->addChild('catalog_promotions', ['route' => 'sylius_admin_catalog_promotion_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_catalog_promotion_create'], - ['route' => 'sylius_admin_catalog_promotion_update'], - ['route' => 'sylius_admin_catalog_promotion_show'], - ]]]) - ->setLabel('sylius.menu.admin.main.marketing.catalog_promotions') - ->setLabelAttribute('icon', 'tabler:bookmark') - ; - - $marketing - ->addChild('product_reviews', ['route' => 'sylius_admin_product_review_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_product_review_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.marketing.product_reviews') - ->setLabelAttribute('icon', 'tabler:news') - ; - } - - private function addSalesSubMenu(ItemInterface $menu): void - { - $sales = $menu - ->addChild('sales') - ->setLabel('sylius.menu.admin.main.sales.header') - ->setLabelAttribute('icon', 'tabler:shopping-bag') - ->setExtra('always_open', true) - ; - - $sales - ->addChild('orders', ['route' => 'sylius_admin_order_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_order_update'], - ['route' => 'sylius_admin_order_show'], - ['route' => 'sylius_admin_order_history'], - ]]]) - ->setLabel('sylius.menu.admin.main.sales.orders') - ->setLabelAttribute('icon', 'tabler:shopping-cart') - ; - - $sales - ->addChild('payments', ['route' => 'sylius_admin_payment_index']) - ->setLabel('sylius.ui.payments') - ->setLabelAttribute('icon', 'tabler:credit-card-pay') - ; - - $sales - ->addChild('shipments', ['route' => 'sylius_admin_shipment_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_shipment_show'], - ]]]) - ->setLabel('sylius.ui.shipments') - ->setLabelAttribute('icon', 'tabler:truck') - ; - } - - private function addConfigurationSubMenu(ItemInterface $menu): void - { - $configuration = $menu - ->addChild('configuration') - ->setLabel('sylius.menu.admin.main.configuration.header') - ->setLabelAttribute('icon', 'tabler:adjustments') - ; - - $configuration - ->addChild('channels', ['route' => 'sylius_admin_channel_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_channel_create'], - ['route' => 'sylius_admin_channel_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.channels') - ->setLabelAttribute('icon', 'tabler:arrows-shuffle') - ; - - $configuration - ->addChild('countries', ['route' => 'sylius_admin_country_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_country_create'], - ['route' => 'sylius_admin_country_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.countries') - ->setLabelAttribute('icon', 'tabler:flag') - ; - - $configuration - ->addChild('zones', ['route' => 'sylius_admin_zone_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_zone_create'], - ['route' => 'sylius_admin_zone_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.zones') - ->setLabelAttribute('icon', 'tabler:world') - ; - - $configuration - ->addChild('currencies', ['route' => 'sylius_admin_currency_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_currency_create'], - ['route' => 'sylius_admin_currency_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.currencies') - ->setLabelAttribute('icon', 'tabler:currency-dollar') - ; - - $configuration - ->addChild('exchange_rates', ['route' => 'sylius_admin_exchange_rate_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_exchange_rate_create'], - ['route' => 'sylius_admin_exchange_rate_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.exchange_rates') - ->setLabelAttribute('icon', 'tabler:adjustments') - ; - - $configuration - ->addChild('locales', ['route' => 'sylius_admin_locale_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_locale_create'], - ['route' => 'sylius_admin_locale_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.locales') - ->setLabelAttribute('icon', 'tabler:bubble-text') - ; - - $configuration - ->addChild('payment_methods', ['route' => 'sylius_admin_payment_method_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_payment_method_create'], - ['route' => 'sylius_admin_payment_method_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.payment_methods') - ->setLabelAttribute('icon', 'tabler:credit-card-pay') - ; - - $configuration - ->addChild('shipping_methods', ['route' => 'sylius_admin_shipping_method_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_shipping_method_create'], - ['route' => 'sylius_admin_shipping_method_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.shipping_methods') - ->setLabelAttribute('icon', 'tabler:truck') - ; - - $configuration - ->addChild('shipping_categories', ['route' => 'sylius_admin_shipping_category_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_shipping_category_create'], - ['route' => 'sylius_admin_shipping_category_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.shipping_categories') - ->setLabelAttribute('icon', 'tabler:layout-list') - ; - - $configuration - ->addChild('tax_categories', ['route' => 'sylius_admin_tax_category_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_tax_category_create'], - ['route' => 'sylius_admin_tax_category_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.tax_categories') - ->setLabelAttribute('icon', 'tabler:tags') - ; - - $configuration - ->addChild('tax_rates', ['route' => 'sylius_admin_tax_rate_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_tax_rate_create'], - ['route' => 'sylius_admin_tax_rate_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.tax_rates') - ->setLabelAttribute('icon', 'tabler:coins') - ; - - $configuration - ->addChild('admin_users', ['route' => 'sylius_admin_admin_user_index', 'extras' => ['routes' => [ - ['route' => 'sylius_admin_admin_user_create'], - ['route' => 'sylius_admin_admin_user_update'], - ]]]) - ->setLabel('sylius.menu.admin.main.configuration.admin_users') - ->setLabelAttribute('icon', 'tabler:lock') - ; - } - - private function addOfficialSupportSubMenu(ItemInterface $menu): void - { - $configuration = $menu - ->addChild('official_support') - ->setLabel('sylius.menu.admin.main.official_support.header') - ->setLabelAttribute('icon', 'tabler:info-circle') - ; - - $configuration - ->addChild('sylius_plus') - ->setUri('https://sylius.com/plus/') - ->setLinkAttribute('target', '_blank') - ->setLabel('sylius.menu.admin.main.official_support.sylius_plus') - ->setLabelAttribute('icon', 'tabler:plus') - ; - - $configuration - ->addChild('browse_plugins') - ->setUri('https://store.sylius.com/') - ->setLinkAttribute('target', '_blank') - ->setLabel('sylius.menu.admin.main.official_support.browse_plugins') - ->setLabelAttribute('icon', 'tabler:plug') - ; - - $configuration - ->addChild('professional_services') - ->setUri('https://sylius.com/services/') - ->setLinkAttribute('target', '_blank') - ->setLabel('sylius.menu.admin.main.official_support.professional_services') - ->setLabelAttribute('icon', 'tabler:settings-2') - ; - - $configuration - ->addChild('find_a_partner') - ->setUri('https://sylius.com/find-a-partner/') - ->setLinkAttribute('target', '_blank') - ->setLabel('sylius.menu.admin.main.official_support.find_a_partner') - ->setLabelAttribute('icon', 'tabler:heart-handshake') - ; - - $configuration - ->addChild('sylius_certification') - ->setUri('https://sylius.com/certification/') - ->setLinkAttribute('target', '_blank') - ->setLabel('sylius.menu.admin.main.official_support.sylius_certification') - ->setLabelAttribute('icon', 'tabler:certificate') - ; - } - - private function addAdministrationSubMenu(ItemInterface $menu): void - { - $administration = $menu - ->addChild('sylius.ui.administration') - ->setLabel('sylius.ui.administration') - ->setLabelAttribute('icon', 'tabler:lock') - ; - - $administration - ->addChild('roles') - ->setUri('https://sylius.com/plus/?utm_source=product&utm_medium=placeholder&utm_campaign=rbac-placeholder') - ->setLinkAttribute('target', '_blank') - ->setLabel('sylius.ui.roles') - ->setExtra('plus_logo', true) - ; + return $this->factory->createItem('root'); } } diff --git a/src/Sylius/Bundle/AdminBundle/Menu/MarketingMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/MarketingMenuBuilder.php new file mode 100644 index 0000000000..5deacb5d7a --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/MarketingMenuBuilder.php @@ -0,0 +1,68 @@ +menuBuilder->createMenu($options); + + $marketing = $menu + ->addChild('marketing') + ->setLabel('sylius.menu.admin.main.marketing.header') + ->setLabelAttribute('icon', 'tabler:percentage') + ; + + $marketing + ->addChild('promotions', ['route' => 'sylius_admin_promotion_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_promotion_create'], + ['route' => 'sylius_admin_promotion_update'], + ['route' => 'sylius_admin_promotion_coupon_index'], + ['route' => 'sylius_admin_promotion_coupon_create'], + ['route' => 'sylius_admin_promotion_coupon_update'], + ['route' => 'sylius_admin_promotion_coupon_generate'], + ]]]) + ->setLabel('sylius.menu.admin.main.marketing.cart_promotions') + ->setLabelAttribute('icon', 'tabler:shopping-cart-down') + ; + + $marketing + ->addChild('catalog_promotions', ['route' => 'sylius_admin_catalog_promotion_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_catalog_promotion_create'], + ['route' => 'sylius_admin_catalog_promotion_update'], + ['route' => 'sylius_admin_catalog_promotion_show'], + ]]]) + ->setLabel('sylius.menu.admin.main.marketing.catalog_promotions') + ->setLabelAttribute('icon', 'tabler:bookmark') + ; + + $marketing + ->addChild('product_reviews', ['route' => 'sylius_admin_product_review_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_product_review_update'], + ]]]) + ->setLabel('sylius.menu.admin.main.marketing.product_reviews') + ->setLabelAttribute('icon', 'tabler:news') + ; + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/MenuBuilderInterface.php b/src/Sylius/Bundle/AdminBundle/Menu/MenuBuilderInterface.php new file mode 100644 index 0000000000..8298224a02 --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/MenuBuilderInterface.php @@ -0,0 +1,24 @@ + $options + */ + public function createMenu(array $options): ItemInterface; +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/OfficialSupportMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/OfficialSupportMenuBuilder.php new file mode 100644 index 0000000000..97e3c3bfd7 --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/OfficialSupportMenuBuilder.php @@ -0,0 +1,77 @@ +menuBuilder->createMenu($options); + + $officialSupport = $menu + ->addChild('official_support') + ->setLabel('sylius.menu.admin.main.official_support.header') + ->setLabelAttribute('icon', 'tabler:info-circle') + ; + + $officialSupport + ->addChild('sylius_plus') + ->setUri('https://sylius.com/plus/') + ->setLinkAttribute('target', '_blank') + ->setLabel('sylius.menu.admin.main.official_support.sylius_plus') + ->setLabelAttribute('icon', 'tabler:plus') + ; + + $officialSupport + ->addChild('browse_plugins') + ->setUri('https://store.sylius.com/') + ->setLinkAttribute('target', '_blank') + ->setLabel('sylius.menu.admin.main.official_support.browse_plugins') + ->setLabelAttribute('icon', 'tabler:plug') + ; + + $officialSupport + ->addChild('professional_services') + ->setUri('https://sylius.com/services/') + ->setLinkAttribute('target', '_blank') + ->setLabel('sylius.menu.admin.main.official_support.professional_services') + ->setLabelAttribute('icon', 'tabler:settings-2') + ; + + $officialSupport + ->addChild('find_a_partner') + ->setUri('https://sylius.com/find-a-partner/') + ->setLinkAttribute('target', '_blank') + ->setLabel('sylius.menu.admin.main.official_support.find_a_partner') + ->setLabelAttribute('icon', 'tabler:heart-handshake') + ; + + $officialSupport + ->addChild('sylius_certification') + ->setUri('https://sylius.com/certification/') + ->setLinkAttribute('target', '_blank') + ->setLabel('sylius.menu.admin.main.official_support.sylius_certification') + ->setLabelAttribute('icon', 'tabler:certificate') + ; + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Menu/SalesMenuBuilder.php b/src/Sylius/Bundle/AdminBundle/Menu/SalesMenuBuilder.php new file mode 100644 index 0000000000..1364982c6a --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/Menu/SalesMenuBuilder.php @@ -0,0 +1,62 @@ +menuBuilder->createMenu($options); + + $sales = $menu + ->addChild('sales') + ->setLabel('sylius.menu.admin.main.sales.header') + ->setLabelAttribute('icon', 'tabler:shopping-bag') + ->setExtra('always_open', true) + ; + + $sales + ->addChild('orders', ['route' => 'sylius_admin_order_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_order_update'], + ['route' => 'sylius_admin_order_show'], + ['route' => 'sylius_admin_order_history'], + ]]]) + ->setLabel('sylius.menu.admin.main.sales.orders') + ->setLabelAttribute('icon', 'tabler:shopping-cart') + ; + + $sales + ->addChild('payments', ['route' => 'sylius_admin_payment_index']) + ->setLabel('sylius.ui.payments') + ->setLabelAttribute('icon', 'tabler:credit-card-pay') + ; + + $sales + ->addChild('shipments', ['route' => 'sylius_admin_shipment_index', 'extras' => ['routes' => [ + ['route' => 'sylius_admin_shipment_show'], + ]]]) + ->setLabel('sylius.ui.shipments') + ->setLabelAttribute('icon', 'tabler:truck') + ; + + return $menu; + } +} diff --git a/src/Sylius/Bundle/AdminBundle/Resources/config/services/menu.php b/src/Sylius/Bundle/AdminBundle/Resources/config/services/menu.php index 07a4c9861c..f796ef1074 100644 --- a/src/Sylius/Bundle/AdminBundle/Resources/config/services/menu.php +++ b/src/Sylius/Bundle/AdminBundle/Resources/config/services/menu.php @@ -13,7 +13,16 @@ declare(strict_types=1); namespace Symfony\Component\DependencyInjection\Loader\Configurator; +use Sylius\Bundle\AdminBundle\Menu\AdministrationMenuBuilder; +use Sylius\Bundle\AdminBundle\Menu\CatalogMenuBuilder; +use Sylius\Bundle\AdminBundle\Menu\ConfigurationMenuBuilder; +use Sylius\Bundle\AdminBundle\Menu\CustomersMenuBuilder; +use Sylius\Bundle\AdminBundle\Menu\DashboardMenuBuilder; +use Sylius\Bundle\AdminBundle\Menu\EventMenuBuilder; use Sylius\Bundle\AdminBundle\Menu\MainMenuBuilder; +use Sylius\Bundle\AdminBundle\Menu\MarketingMenuBuilder; +use Sylius\Bundle\AdminBundle\Menu\OfficialSupportMenuBuilder; +use Sylius\Bundle\AdminBundle\Menu\SalesMenuBuilder; return static function (ContainerConfigurator $container) { $services = $container->services(); @@ -27,4 +36,78 @@ return static function (ContainerConfigurator $container) { ]) ->tag('knp_menu.menu_builder', ['method' => 'createMenu', 'alias' => 'sylius_admin.main']) ; + + $services + ->set('sylius_admin.menu_builder.main.dashboard', DashboardMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: 9999) + ->args([ + service('.inner'), + ]) + ; + + $services + ->set('sylius_admin.menu_builder.main.catalog', CatalogMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: -100) + ->args([ + service('.inner'), + ]) + ; + + $services + ->set('sylius_admin.menu_builder.main.sales', SalesMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: -200) + ->args([ + service('.inner'), + ]) + ; + + $services + ->set('sylius_admin.menu_builder.main.customers', CustomersMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: -300) + ->args([ + service('.inner'), + ]) + ; + + $services + ->set('sylius_admin.menu_builder.main.marketing', MarketingMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: -400) + ->args([ + service('.inner'), + ]) + ; + + $services + ->set('sylius_admin.menu_builder.main.configuration', ConfigurationMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: -500) + ->args([ + service('.inner'), + ]) + ; + + $services + ->set('sylius_admin.menu_builder.main.official_support', OfficialSupportMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: -600) + ->args([ + service('.inner'), + ]) + ; + + $services + ->set('sylius_admin.menu_builder.main.administration', AdministrationMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: -700) + ->args([ + service('.inner'), + ]) + ; + + $services + ->set('sylius_admin.menu_builder.main.event', EventMenuBuilder::class) + ->decorate('sylius_admin.menu_builder.main', priority: -9999) + ->args([ + service('.inner'), + service('knp_menu.factory'), + service('event_dispatcher'), + ]) + ; };