MainMenuItem   A
last analyzed

Complexity

Total Complexity 23

Size/Duplication

Total Lines 259
Duplicated Lines 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 44
c 2
b 1
f 0
dl 0
loc 259
rs 10
wmc 23

16 Methods

Rating   Name   Duplication   Size   Complexity  
A isActive() 0 3 1
A getUrl() 0 3 1
A setTitle() 0 4 1
A setActive() 0 4 1
A getSubItems() 0 3 1
A setDisplay() 0 4 1
A hasSubItems() 0 3 1
A getClass() 0 3 1
A setIcon() 0 4 1
A addSubItems() 0 12 3
A run() 0 14 5
A setUrl() 0 4 1
A getIcon() 0 3 1
A getTitle() 0 3 1
A setSubItems() 0 8 2
A isDisplay() 0 3 1
1
<?php
2
3
namespace Itstructure\AdminModule\widgets\menu;
4
5
use Yii;
6
use yii\base\{Widget, InvalidConfigException};
7
8
/**
9
 * Class MainMenuItem
10
 * Widget to render menu item for main menu.
11
 *
12
 * @property string $icon Css-class for icon of menu item.
13
 * Example: fa fa-database.
14
 * @property bool $active Is menu item need to be opened (if has subitems) or selected.
15
 * @property bool $display Is menu item need to be displayed.
16
 * @property string $title Title of menu item.
17
 * @property MainMenu[] $subItems Array of subItems menu items.
18
 * @property string $url Url of menu item.
19
 * @property string $class Class for <li> tag.
20
 *
21
 * @package Itstructure\AdminModule\widgets
22
 *
23
 * @author Andrey Girnik <[email protected]>
24
 */
25
class MainMenuItem extends Widget
26
{
27
    /**
28
     * Css-class for icon of menu item.
29
     * Example: fa fa-database.
30
     *
31
     * @var string
32
     */
33
    protected $icon = '';
34
35
    /**
36
     * Is menu item need to be opened (if has subitems) or selected.
37
     *
38
     * @var bool
39
     */
40
    protected $active = false;
41
42
    /**
43
     * Is menu item need to be displayed.
44
     *
45
     * @var bool
46
     */
47
    protected $display = true;
48
49
    /**
50
     * Title of menu item.
51
     *
52
     * @var string
53
     */
54
    protected $title = '';
55
56
    /**
57
     * Array of subItems menu items.
58
     *
59
     * @var MainMenu[]
60
     */
61
    protected $subItems = [];
62
63
    /**
64
     * Url of menu item.
65
     *
66
     * @var string
67
     */
68
    protected $url = '';
69
70
    /**
71
     * Class for <li> tag.
72
     *
73
     * @var string
74
     */
75
    protected $class;
76
77
    /**
78
     * Executes the widget.
79
     *
80
     * @return string the result of widget execution to be outputted.
81
     */
82
    public function run(): string
83
    {
84
        if (false === $this->display) {
85
            return '';
86
        }
87
88
        if ($this->hasSubItems()) {
89
            $this->class = $this->isActive() ? 'active treeview' : 'treeview';
90
        } else {
91
            $this->class = $this->isActive() ? 'active' : '';
92
        }
93
94
        return $this->render('main-menu-items', [
95
            'item' => $this,
96
        ]);
97
    }
98
99
    /**
100
     * Icon getter.
101
     *
102
     * @return string
103
     */
104
    public function getIcon(): string
105
    {
106
        return $this->icon;
107
    }
108
109
    /**
110
     * Icon setter.
111
     *
112
     * @param string $icon Icon of menu item
113
     *
114
     * @return $this
115
     */
116
    public function setIcon($icon)
117
    {
118
        $this->icon = $icon;
119
        return $this;
120
    }
121
122
    /**
123
     * Url getter.
124
     *
125
     * @return string
126
     */
127
    public function getUrl(): string
128
    {
129
        return $this->url;
130
    }
131
132
    /**
133
     * Url setter.
134
     *
135
     * @param string $url Url of menu item
136
     *
137
     * @return $this
138
     */
139
    public function setUrl($url)
140
    {
141
        $this->url = $url;
142
        return $this;
143
    }
144
145
    /**
146
     * Get class for <li> tag.
147
     *
148
     * @return string
149
     */
150
    public function getClass(): string
151
    {
152
        return $this->class;
153
    }
154
155
    /**
156
     * Is menu item need to be opened (if has subitems) or selected.
157
     *
158
     * @return bool
159
     */
160
    public function isActive(): bool
161
    {
162
        return $this->active;
163
    }
164
165
    /**
166
     * Set menu item need to be opened (if has subitems) or selected.
167
     *
168
     * @param bool $active
169
     *
170
     * @return $this
171
     */
172
    public function setActive($active)
173
    {
174
        $this->active = $active;
175
        return $this;
176
    }
177
178
    /**
179
     * Is menu item need to be displayed.
180
     *
181
     * @return bool
182
     */
183
    public function isDisplay()
184
    {
185
        return $this->display;
186
    }
187
188
    /**
189
     * Set menu item need to be displayed.
190
     *
191
     * @param bool $display
192
     *
193
     * @return $this
194
     */
195
    public function setDisplay($display)
196
    {
197
        $this->display = $display;
198
        return $this;
199
    }
200
201
    /**
202
     * Get title of menu item.
203
     *
204
     * @return string
205
     */
206
    public function getTitle(): string
207
    {
208
        return $this->title;
209
    }
210
211
    /**
212
     * Set title of menu item.
213
     *
214
     * @param string $title
215
     *
216
     * @return $this
217
     */
218
    public function setTitle($title)
219
    {
220
        $this->title = $title;
221
        return $this;
222
    }
223
224
    /**
225
     * Get array of subItems menu items.
226
     *
227
     * @return MainMenu[]
228
     */
229
    public function getSubItems()
230
    {
231
        return $this->subItems;
232
    }
233
234
    /**
235
     * Set array of subItems menu items.
236
     *
237
     * @param array|MainMenu[] $subItems
238
     *
239
     * @throws InvalidConfigException
240
     *
241
     * @return $this
242
     */
243
    public function setSubItems(array $subItems)
244
    {
245
        $this->subItems = [];
246
        foreach ($subItems as $menuItem) {
247
            $this->addSubItems($menuItem);
248
        }
249
250
        return $this;
251
    }
252
253
    /**
254
     * Add to array of subItems menu items.
255
     *
256
     * @param array|MainMenu $menuItem
257
     *
258
     * @throws InvalidConfigException
259
     *
260
     * @return $this
261
     */
262
    public function addSubItems($menuItem)
263
    {
264
        if (is_array($menuItem)) {
265
            if (!array_key_exists('class', $menuItem)) {
266
                $menuItem['class'] = MainMenuItem::class;
267
            }
268
269
            $menuItem = Yii::createObject($menuItem);
270
        }
271
272
        $this->subItems[] = $menuItem;
273
        return $this;
274
    }
275
276
    /**
277
     * Check if item has subitems.
278
     *
279
     * @return bool
280
     */
281
    public function hasSubItems()
282
    {
283
        return count($this->subItems) > 0;
284
    }
285
}
286