Skip to content

Commit 3425c08

Browse files
committed
add menu builder
1 parent 15f36ce commit 3425c08

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

src/components/admin/MenuBuilder.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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+
}

src/interfaces/IMenuBuilder.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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+
}

0 commit comments

Comments
 (0)