MOON
Server: Apache
System: Linux u18017238.onlinehome-server.com 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User: emblazeone (1003)
PHP: 7.3.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/emblazeone/public_html/lyyt/backend/widgets/Menu.php
<?php
namespace backend\widgets;

use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\helpers\Url;

class Menu extends \yii\widgets\Menu{

    public $dropDownTemplate='
        <a class="has-arrow" href="#" aria-expanded="false">
            <i class="{class}"></i>
            <span>{label}</span>
        </a>
        {items}
    ';
    public $spanlabelTemplate='<li class="sidebar-header"><span>{label}</span></li>';
    public $submenuTemplate = "\n<ul class=\"nav-sub collapse\" aria-expanded=\"false\">\n{items}\n</ul>\n";
    public $linkSubTemplate = '<a href="{url}" class="has-arrow"><i class="{class}"></i><span>{label}</span></a>';

    protected function renderItem($item)
    {
        if (isset($item['url'])) {
            $template = ArrayHelper::getValue($item, 'template', $this->linkTemplate);

            return strtr($template, [
                '{url}' => Html::encode(Url::to($item['url'])),
                '{class}' => isset($item['class'])?$item['class']:'',
                '{label}' => $item['label'],
            ]);
        } elseif($item['submenu']) {
            $template = ArrayHelper::getValue($item, 'dropdown_template', $this->dropDownTemplate);

            return strtr($template, [
                '{label}' => $item['label'],
                '{class}' => isset($item['class'])?$item['class']:'',
                '{items}' => $item['submenu'],
            ]);
        } else {
            $template = ArrayHelper::getValue($item, 'span_template', $this->spanlabelTemplate);

            return strtr($template, [
                '{label}' => $item['label']
            ]);
        }
    }

    /**
     * Recursively renders the menu items (without the container tag).
     * @param array $items the menu items to be rendered recursively
     * @return string the rendering result
     */
    protected function renderItems($items)
    {
        $n = count($items);
        $lines = [];
        foreach ($items as $i => $item) {
            $options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'options', []));
            $tag = ArrayHelper::remove($options, 'tag', 'li');
            $class = [];
            if ($item['active']) {
                $class[] = $this->activeCssClass;
//                if($parent_item) $parent_item['active']=$this->activeCssClass;
            }
            if ($i === 0 && $this->firstItemCssClass !== null) {
                $class[] = $this->firstItemCssClass;
            }
            if ($i === $n - 1 && $this->lastItemCssClass !== null) {
                $class[] = $this->lastItemCssClass;
            }
            if (!empty($class)) {
                if (empty($options['class'])) {
                    $options['class'] = implode(' ', $class);
                } else {
                    $options['class'] .= ' ' . implode(' ', $class);
                }
            }

            /*Added submenu class and id*/
            $item['submenu'] ='';
            if (!empty($item['items'])) {
                $item['template']=$this->linkSubTemplate;

                $submenuTemplate = ArrayHelper::getValue($item, 'submenuTemplate', $this->submenuTemplate);
                $submenuClass = ArrayHelper::getValue($item, 'submenuClass', '');
                if($item['active']) $submenuClass.=' in';
                $submenuId = ArrayHelper::getValue($item, 'submenuId', '');
                $item['submenu'] = strtr($submenuTemplate, [
                    '{items}' => $this->renderItems($item['items']),
                    '{class}' => $submenuClass,
                    '{id}' => $submenuId,
                ]);
                if(!isset($options['class'])) $options['class']='';
                $options['class'] .= ' nav-dropdown';
            }
            $menu = $this->renderItem($item);
            /*END change*/

            if ($tag === false) {
                $lines[] = $menu;
            } else {
                $lines[] = Html::tag($tag, $menu, $options);
            }
        }

        return implode("\n", $lines);
    }
}