File tree 2 files changed +62
-0
lines changed
2 files changed +62
-0
lines changed Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * @author Dmytro Karpovych
4
+ * @copyright 2018 NRE
5
+ */
6
+
7
+ namespace nullref \core \components ;
8
+
9
+
10
+ use nullref \core \interfaces \IMenuBuilder ;
11
+
12
+ abstract class MenuBuilder implements IMenuBuilder
13
+ {
14
+ /**
15
+ * Filter menu items by specified roles
16
+ *
17
+ * @param $menu
18
+ * @param $role
19
+ * @param string $paramName
20
+ * @return array
21
+ */
22
+ public function filterByRole ($ menu , $ role , $ paramName = 'roles ' )
23
+ {
24
+ if ($ role === null ) {
25
+ return [];
26
+ }
27
+ $ result = [];
28
+ foreach ($ menu as $ key => $ item ) {
29
+ if (isset ($ item [$ paramName ])) {
30
+ if (is_array ($ role ) && count (array_intersect ($ role , $ item [$ paramName ]))
31
+ || in_array ($ role , $ item [$ paramName ])) {
32
+ if (isset ($ item ['items ' ])) {
33
+ $ result [$ key ] = $ item ;
34
+ $ result [$ key ]['items ' ] = $ this ->filterByRole ($ result [$ key ]['items ' ], $ role , $ paramName );
35
+ } else {
36
+ $ result [$ key ] = $ item ;
37
+ }
38
+ }
39
+ } else {
40
+ $ result [$ key ] = $ item ;
41
+ }
42
+ }
43
+ return $ result ;
44
+ }
45
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * @author Dmytro Karpovych
4
+ * @copyright 2018 NRE
5
+ */
6
+
7
+ namespace nullref \core \interfaces ;
8
+
9
+
10
+ interface IMenuBuilder
11
+ {
12
+ /**
13
+ * @param array $items
14
+ * @return array
15
+ */
16
+ public function build ($ items );
17
+ }
You can’t perform that action at this time.
0 commit comments