Completed
Push — menu-builders ( e205db )
by Kamil
20:26
created

MenuBuilder::addCatalogSubMenu()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 37
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 37
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 24
nc 1
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Sylius\Bundle\AdminBundle\Menu;
13
14
use Knp\Menu\FactoryInterface;
15
use Knp\Menu\ItemInterface;
16
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
17
use Symfony\Component\EventDispatcher\EventDispatcher;
18
19
/**
20
 * @author Paweł Jędrzejewski <[email protected]>
21
 */
22
final class MenuBuilder
23
{
24
    const MAIN_MENU_EVENT = 'sylius.menu.admin.main';
25
26
    /**
27
     * @var FactoryInterface
28
     */
29
    private $factory;
30
31
    /**
32
     * @var EventDispatcher
33
     */
34
    private $eventDispatcher;
35
36
    /**
37
     * @param FactoryInterface $factory
38
     * @param EventDispatcher $eventDispatcher
39
     */
40
    public function __construct(FactoryInterface $factory, EventDispatcher $eventDispatcher)
41
    {
42
        $this->factory = $factory;
43
        $this->eventDispatcher = $eventDispatcher;
44
    }
45
46
    /**
47
     * @param array $options
48
     *
49
     * @return ItemInterface
50
     */
51
    public function createMainMenu(array $options)
0 ignored issues
show
Unused Code introduced by
The parameter $options is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
52
    {
53
        $menu = $this->factory->createItem('root');
54
55
        $this->addCatalogSubMenu($menu);
56
        $this->addSalesSubMenu($menu);
57
        $this->addCustomersSubMenu($menu);
58
        $this->addMarketingSubMenu($menu);
59
        $this->addConfigurationSubMenu($menu);
60
61
        $this->eventDispatcher->dispatch(self::MAIN_MENU_EVENT, new MenuBuilderEvent($this->factory, $menu));
62
63
        return $menu;
64
    }
65
66
    /**
67
     * @param ItemInterface $menu
68
     */
69
    private function addCatalogSubMenu(ItemInterface $menu)
70
    {
71
        $catalog = $menu
72
            ->addChild('catalog')
73
            ->setLabel('sylius.menu.admin.main.catalog.header')
74
        ;
75
76
        $catalog
77
            ->addChild('taxons', ['route' => 'sylius_admin_taxon_create'])
78
            ->setLabel('sylius.menu.admin.main.catalog.taxons')
79
            ->setLabelAttribute('icon', 'folder')
80
        ;
81
82
        $catalog
83
            ->addChild('products', ['route' => 'sylius_admin_product_index'])
84
            ->setLabel('sylius.menu.admin.main.catalog.products')
85
            ->setLabelAttribute('icon', 'cube')
86
        ;
87
88
        $catalog
89
            ->addChild('attributes', ['route' => 'sylius_admin_product_attribute_index'])
90
            ->setLabel('sylius.menu.admin.main.catalog.attributes')
91
            ->setLabelAttribute('icon', 'cubes')
92
        ;
93
94
        $catalog
95
            ->addChild('options', ['route' => 'sylius_admin_product_option_index'])
96
            ->setLabel('sylius.menu.admin.main.catalog.options')
97
            ->setLabelAttribute('icon', 'options')
98
        ;
99
100
        $catalog
101
            ->addChild('association_types', ['route' => 'sylius_admin_product_association_type_index'])
102
            ->setLabel('sylius.menu.admin.main.catalog.association_types')
103
            ->setLabelAttribute('icon', 'tasks')
104
        ;
105
    }
106
107
    /**
108
     * @param ItemInterface $menu
109
     */
110
    private function addCustomersSubMenu(ItemInterface $menu)
111
    {
112
        $customers = $menu
113
            ->addChild('customers')
114
            ->setLabel('sylius.menu.admin.main.customers.header')
115
        ;
116
117
        $customers
118
            ->addChild('customers', ['route' => 'sylius_admin_customer_index'])
119
            ->setLabel('sylius.menu.admin.main.customers.customers')
120
            ->setLabelAttribute('icon', 'users')
121
        ;
122
123
        $customers
124
            ->addChild('groups', ['route' => 'sylius_admin_customer_group_index'])
125
            ->setLabel('sylius.menu.admin.main.customers.groups')
126
            ->setLabelAttribute('icon', 'archive')
127
        ;
128
    }
129
130
    /**
131
     * @param ItemInterface $menu
132
     */
133
    private function addMarketingSubMenu(ItemInterface $menu)
134
    {
135
        $marketing = $menu
136
            ->addChild('marketing')
137
            ->setLabel('sylius.menu.admin.main.marketing.header')
138
        ;
139
140
        $marketing
141
            ->addChild('promotions', ['route' => 'sylius_admin_promotion_index'])
142
            ->setLabel('sylius.menu.admin.main.marketing.promotions')
143
            ->setLabelAttribute('icon', 'in cart')
144
        ;
145
146
        $marketing
147
            ->addChild('product_reviews', ['route' => 'sylius_admin_product_review_index'])
148
            ->setLabel('sylius.menu.admin.main.marketing.product_reviews')
149
            ->setLabelAttribute('icon', 'newspaper')
150
        ;
151
    }
152
153
    /**
154
     * @param ItemInterface $menu
155
     */
156
    private function addSalesSubMenu(ItemInterface $menu)
157
    {
158
        $sales = $menu
159
            ->addChild('sales')
160
            ->setLabel('sylius.menu.admin.main.sales.header')
161
        ;
162
163
        $sales
164
            ->addChild('orders', ['route' => 'sylius_admin_order_index'])
165
            ->setLabel('sylius.menu.admin.main.sales.orders')
166
            ->setLabelAttribute('icon', 'cart')
167
        ;
168
    }
169
170
    /**
171
     * @param ItemInterface $menu
172
     */
173
    private function addConfigurationSubMenu(ItemInterface $menu)
174
    {
175
        $configuration = $menu
176
            ->addChild('configuration')
177
            ->setLabel('sylius.menu.admin.main.configuration.header')
178
        ;
179
180
        $configuration
181
            ->addChild('channels', ['route' => 'sylius_admin_channel_index'])
182
            ->setLabel('sylius.menu.admin.main.configuration.channels')
183
            ->setLabelAttribute('icon', 'random')
184
        ;
185
186
        $configuration
187
            ->addChild('countries', ['route' => 'sylius_admin_country_index'])
188
            ->setLabel('sylius.menu.admin.main.configuration.countries')
189
            ->setLabelAttribute('icon', 'flag')
190
        ;
191
192
        $configuration
193
            ->addChild('zones', ['route' => 'sylius_admin_zone_index'])
194
            ->setLabel('sylius.menu.admin.main.configuration.zones')
195
            ->setLabelAttribute('icon', 'world')
196
        ;
197
198
        $configuration
199
            ->addChild('currencies', ['route' => 'sylius_admin_currency_index'])
200
            ->setLabel('sylius.menu.admin.main.configuration.currencies')
201
            ->setLabelAttribute('icon', 'dollar')
202
        ;
203
204
        $configuration
205
            ->addChild('exchange_rates', ['route' => 'sylius_admin_exchange_rate_index'])
206
            ->setLabel('sylius.menu.admin.main.configuration.exchange_rates')
207
            ->setLabelAttribute('icon', 'sliders')
208
        ;
209
210
        $configuration
211
            ->addChild('locales', ['route' => 'sylius_admin_locale_index'])
212
            ->setLabel('sylius.menu.admin.main.configuration.locales')
213
            ->setLabelAttribute('icon', 'translate')
214
        ;
215
216
        $configuration
217
            ->addChild('payment_methods', ['route' => 'sylius_admin_payment_method_index'])
218
            ->setLabel('sylius.menu.admin.main.configuration.payment_methods')
219
            ->setLabelAttribute('icon', 'payment')
220
        ;
221
222
        $configuration
223
            ->addChild('shipping_methods', ['route' => 'sylius_admin_shipping_method_index'])
224
            ->setLabel('sylius.menu.admin.main.configuration.shipping_methods')
225
            ->setLabelAttribute('icon', 'shipping')
226
        ;
227
228
        $configuration
229
            ->addChild('shipping_categories', ['route' => 'sylius_admin_shipping_category_index'])
230
            ->setLabel('sylius.menu.admin.main.configuration.shipping_categories')
231
            ->setLabelAttribute('icon', 'list layout')
232
        ;
233
234
        $configuration
235
            ->addChild('tax_categories', ['route' => 'sylius_admin_tax_category_index'])
236
            ->setLabel('sylius.menu.admin.main.configuration.tax_categories')
237
            ->setLabelAttribute('icon', 'tags')
238
        ;
239
240
        $configuration
241
            ->addChild('tax_rates', ['route' => 'sylius_admin_tax_rate_index'])
242
            ->setLabel('sylius.menu.admin.main.configuration.tax_rates')
243
            ->setLabelAttribute('icon', 'money')
244
        ;
245
246
        $configuration
247
            ->addChild('admin_users', ['route' => 'sylius_admin_admin_user_index'])
248
            ->setLabel('sylius.menu.admin.main.configuration.admin_users')
249
            ->setLabelAttribute('icon', 'lock')
250
        ;
251
    }
252
}
253