| Current Path : /var/www/html/dynaweb.blunetdev.com/backend/modules/menu/components/ |
| Current File : /var/www/html/dynaweb.blunetdev.com/backend/modules/menu/components/MenuHelper.php |
<?php
namespace backend\modules\menu\components;
use Yii;
use yii\helpers\Url;
use backend\modules\menu\models\backend\RoleMapping;
class MenuHelper {
public function getAssignedMenu()
{
$app = Yii::$app;
$arr = null;
// parent
$menu = RoleMapping::find()->where(['parent_id' => 0])->orderby('sort')->all();
$role = $app->authManager->getRolesByUser($app->user->getId());
foreach ($menu as $map) {
// main menu (placeholder)
if (!array_key_exists($map->role_code, $role)) {
continue;
}
if (!$map->menu->menu_status) {
continue;
}
$arr[] = [
'id' => $map->id,
'label' => $map->menu->menu_name,
'icon' => $map->menu->menu_class,
'url' => Url::to([$map->menu->menu_link]) . $map->menu->menu_param,
'items' => $this->getChild($map->id)
];
}
return $arr;
}
public function getChild($id)
{
$app = Yii::$app;
$children = RoleMapping::find()->where(['parent_id' => $id])->orderby('sort')->all();
$role = $app->authManager->getRolesByUser($app->user->getId());
$arr = null;
if (!empty($children)) {
foreach ($children as $child) {
// access setting check
if (!array_key_exists($child->role_code, $role) || !$child->menu->menu_status) {
continue;
}
if (!$child->menu->menu_status) {
continue;
}
$arr[] = [
'id' => $child->id,
'label' => $child->menu->menu_name,
'icon' => $child->menu->menu_class,
'url' => Url::to([$child->menu->menu_link]) . $child->menu->menu_param,
'items' => $this->getChild($child->id),
'active' => $this->checkActive($child)
];
}
}
return $arr;
}
private function checkActive($child)
{
//check if item sub of route
// $match = [];
// $requested = [];
// preg_match('#([\w\-\/]+)\/index#', ltrim($child->menu->menu_link,'/'), $match);
// preg_match('#([\w\-\/]+)\/#', Yii::$app->requestedRoute, $requested);
//matching controller name
// if(isset($match[1]) && !empty($match[1]) ) {
// if(isset($requested[1]) && !empty($requested[1])) {
// return $match[1] === $requested[1];
// }
// }
//var_dump($child->menu->menu_active_route);
if(!empty($child->menu->menu_active_route)) {
foreach (json_decode($child->menu->menu_active_route) as $ar) {
if(Yii::$app->requestedRoute === ltrim($ar, '/')) {
return true;
}
}
}
return Yii::$app->requestedRoute === ltrim($child->menu->menu_link,'/');
}
}