91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace kernel\modules\menu\service;
 | 
						|
 | 
						|
use kernel\FormModel;
 | 
						|
use kernel\models\Menu;
 | 
						|
use kernel\Request;
 | 
						|
 | 
						|
class MenuService
 | 
						|
{
 | 
						|
    public function create(FormModel $form_model): false|Menu
 | 
						|
    {
 | 
						|
        $model = new Menu();
 | 
						|
        $model->parent_id = $form_model->getItem('parent_id');
 | 
						|
        $model->icon_file = $form_model->getItem('icon_file');
 | 
						|
        $model->icon_font = $form_model->getItem('icon_font');
 | 
						|
        $model->label = $form_model->getItem('label');
 | 
						|
        $model->url = $form_model->getItem('url');
 | 
						|
        $model->status = $form_model->getItem('status');
 | 
						|
        if ($model->save()){
 | 
						|
            return $model;
 | 
						|
        }
 | 
						|
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    public function update(FormModel $form_model, Menu $menuItem): false|Menu
 | 
						|
    {
 | 
						|
        $menuItem->parent_id = $form_model->getItem('parent_id');
 | 
						|
        $menuItem->icon_file = $form_model->getItem('icon_file');
 | 
						|
        $menuItem->icon_font = $form_model->getItem('icon_font');
 | 
						|
        $menuItem->label = $form_model->getItem('label');
 | 
						|
        $menuItem->url = $form_model->getItem('url');
 | 
						|
        $menuItem->status = $form_model->getItem('status');
 | 
						|
        if ($menuItem->save()){
 | 
						|
            return $menuItem;
 | 
						|
        }
 | 
						|
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function createLabelArr(): array
 | 
						|
    {
 | 
						|
        $labelArr[0] = "Корневой пункт меню";
 | 
						|
        foreach (Menu::where("parent_id", 0)->get()->toArray() as $menuItem) {
 | 
						|
            $labelArr[$menuItem['id']] = $menuItem['label'];
 | 
						|
        }
 | 
						|
        if (!empty($labelArr)) {
 | 
						|
            return $labelArr;
 | 
						|
        }
 | 
						|
        return [];
 | 
						|
    }
 | 
						|
    public static function getChild(int $id)
 | 
						|
    {
 | 
						|
        $collection = Menu::where("parent_id", $id)->get();
 | 
						|
        if (!$collection->isEmpty()){
 | 
						|
            return $collection;
 | 
						|
        }
 | 
						|
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function hasActiveChild(int $id): bool
 | 
						|
    {
 | 
						|
        $child = self::getChild($id);
 | 
						|
        if (!$child->isEmpty()){
 | 
						|
            foreach ($child as $item){
 | 
						|
//                if ($item->url === \kernel\Request::getUrlPath()){
 | 
						|
//                    return true;
 | 
						|
//                }
 | 
						|
                if (strripos(Request::getUrlPath(), $item->url) !== false) {
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function isActive($url): bool
 | 
						|
    {
 | 
						|
        if ($url === Request::getUrlPath()){
 | 
						|
            return true;
 | 
						|
        } else {
 | 
						|
            if (strripos(\kernel\Request::getUrlPath(), ($url . "/page")) !== false) {
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
} |