Completed
Push — master ( d898e2...4cc160 )
by Kamil
19:55
created

MainMenuBuilder::configureConfigurationSubMenu()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 61
Code Lines 40

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 2 Features 1
Metric Value
c 4
b 2
f 1
dl 0
loc 61
rs 9.5147
cc 1
eloc 40
nc 1
nop 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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\ItemInterface;
15
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
16
17
/**
18
 * @author Paweł Jędrzejewski <[email protected]>
19
 */
20
final class MainMenuBuilder extends AbstractAdminMenuBuilder
21
{
22
    const EVENT_NAME = 'sylius.menu.admin.main';
23
24
    /**
25
     * @return ItemInterface
26
     */
27
    public function createMenu()
28
    {
29
        $menu = $this->factory->createItem('root');
30
31
        $this->addConfigurationMenu($menu);
32
33
        $this->eventDispatcher->dispatch(self::EVENT_NAME, new MenuBuilderEvent($this->factory, $menu));
34
35
        return $menu;
36
    }
37
38
    /**
39
     * @param ItemInterface $menu
40
     */
41
    private function addConfigurationMenu(ItemInterface $menu)
42
    {
43
        $this->configureMarketingSubMenu($menu);
44
        $this->configureCustomersSubMenu($menu);
45
        $this->configureCatalogSubMenu($menu);
46
        $this->configureConfigurationSubMenu($menu);
47
    }
48
49
    /**
50
     * @param ItemInterface $menu
51
     */
52
    private function configureConfigurationSubMenu(ItemInterface $menu)
53
    {
54
        $configurationSubMenu = $menu
55
            ->addChild('configuration')
56
            ->setLabel('sylius.menu.admin.main.configuration.header')
57
        ;
58
59
        $configurationSubMenu
60
            ->addChild('tax_categories', ['route' => 'sylius_admin_tax_category_index'])
61
            ->setLabel('sylius.menu.admin.main.configuration.tax_categories')
62
            ->setLabelAttribute('icon', 'tags')
63
        ;
64
65
        $configurationSubMenu
66
            ->addChild('countries', ['route' => 'sylius_admin_country_index'])
67
            ->setLabel('sylius.menu.admin.main.configuration.countries')
68
            ->setLabelAttribute('icon', 'flag')
69
        ;
70
71
        $configurationSubMenu
72
            ->addChild('locale', ['route' => 'sylius_admin_locale_index'])
73
            ->setLabel('sylius.menu.admin.main.configuration.locales')
74
            ->setLabelAttribute('icon', 'translate')
75
        ;
76
77
        $configurationSubMenu
78
            ->addChild('payment_methods', ['route' => 'sylius_admin_payment_method_index'])
79
            ->setLabel('sylius.menu.admin.main.configuration.payment_methods')
80
            ->setLabelAttribute('icon', 'payment')
81
        ;
82
83
        $configurationSubMenu
84
            ->addChild('shipping_methods', ['route' => 'sylius_admin_shipping_method_index'])
85
            ->setLabel('sylius.menu.admin.main.configuration.shipping_methods')
86
            ->setLabelAttribute('icon', 'shipping')
87
        ;
88
89
        $configurationSubMenu
90
            ->addChild('tax_rates', ['route' => 'sylius_admin_tax_rate_index'])
91
            ->setLabel('sylius.menu.admin.main.configuration.tax_rates')
92
            ->setLabelAttribute('icon', 'dollar')
93
        ;
94
95
        $configurationSubMenu
96
            ->addChild('zones', ['route' => 'sylius_admin_zone_index'])
97
            ->setLabel('sylius.menu.admin.main.configuration.zones')
98
            ->setLabelAttribute('icon', 'world')
99
        ;
100
101
        $configurationSubMenu
102
            ->addChild('currencies', ['route' => 'sylius_admin_currency_index'])
103
            ->setLabel('sylius.menu.admin.main.configuration.currencies')
104
            ->setLabelAttribute('icon', 'money')
105
        ;
106
107
        $configurationSubMenu
108
            ->addChild('channels', ['route' => 'sylius_admin_channel_index'])
109
            ->setLabel('sylius.menu.admin.main.configuration.channels')
110
            ->setLabelAttribute('icon', 'random')
111
        ;
112
    }
113
114
    /**
115
     * @param ItemInterface $menu
116
     */
117
    private function configureMarketingSubMenu(ItemInterface $menu)
118
    {
119
        $marketingSubMenu = $menu
120
            ->addChild('marketing')
121
            ->setLabel('sylius.menu.admin.main.marketing.header')
122
        ;
123
124
        $marketingSubMenu
125
            ->addChild('promotions', ['route' => 'sylius_admin_promotion_index'])
126
            ->setLabel('sylius.menu.admin.main.marketing.promotions')
127
            ->setLabelAttribute('icon', 'in cart')
128
        ;
129
    }
130
131
    /**
132
     * @param ItemInterface $menu
133
     */
134
    private function configureCustomersSubMenu(ItemInterface $menu)
135
    {
136
        $customerSubMenu = $menu
137
            ->addChild('customers')
138
            ->setLabel('sylius.menu.admin.main.customers.header')
139
        ;
140
141
        $customerSubMenu
142
            ->addChild('customers', ['route' => 'sylius_admin_customer_index'])
143
            ->setLabel('sylius.menu.admin.main.customers.customers')
144
            ->setLabelAttribute('icon', 'users')
145
        ;
146
    }
147
148
    /**
149
     * @param ItemInterface $menu
150
     */
151
    private function configureCatalogSubMenu(ItemInterface $menu)
152
    {
153
        $catalogSubMenu = $menu
154
            ->addChild('catalog')
155
            ->setLabel('sylius.menu.admin.main.catalog.header')
156
        ;
157
158
        $catalogSubMenu
159
            ->addChild('attributes', ['route' => 'sylius_admin_product_attribute_index'])
160
            ->setLabel('sylius.menu.admin.main.catalog.attributes')
161
            ->setLabelAttribute('icon', 'cubes')
162
        ;
163
164
        $catalogSubMenu
165
            ->addChild('product_options', ['route' => 'sylius_admin_product_option_index'])
166
            ->setLabel('sylius.menu.admin.main.catalog.product_options')
167
            ->setLabelAttribute('icon', 'options')
168
        ;
169
170
        $catalogSubMenu
171
            ->addChild('taxons', ['route' => 'sylius_admin_taxon_create'])
172
            ->setLabel('sylius.menu.admin.main.catalog.taxons')
173
            ->setLabelAttribute('icon', 'folder')
174
        ;
175
    }
176
}
177