Your IP : 216.73.216.79


Current Path : /var/www/html/learn/backend/modules/menu/components/
Upload File :
Current File : /var/www/html/learn/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,'/');
    }
}