File tree Expand file tree Collapse file tree 2 files changed +62
-0
lines changed Expand file tree Collapse file tree 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