328 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			328 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
use App\Models\Master\Menu;
 | 
						|
use App\Models\Master\AccessMenu;
 | 
						|
use App\Models\User;
 | 
						|
use App\Models\Master\Group;
 | 
						|
use App\Models\Log;
 | 
						|
 | 
						|
if (!function_exists('taskLabel')) {
 | 
						|
    /**
 | 
						|
     * @param $val
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    function taskLabel($val)
 | 
						|
    {
 | 
						|
        if ($val == 'store') {
 | 
						|
            $task = 'save';
 | 
						|
        } elseif ($val == 'save_permission') {
 | 
						|
            $task = 'save group access';
 | 
						|
        } elseif ($val == 'destroy') {
 | 
						|
            $task = 'delete';
 | 
						|
        } elseif ($val == 'batch') {
 | 
						|
            $task = 'delete';
 | 
						|
        } else {
 | 
						|
            $task = $val;
 | 
						|
        }
 | 
						|
 | 
						|
        return $task;
 | 
						|
    }
 | 
						|
}
 | 
						|
if (!function_exists('logActivity')) {
 | 
						|
    /**
 | 
						|
     * @param $request
 | 
						|
     * @param $note
 | 
						|
     */
 | 
						|
    function logActivity($request, $note)
 | 
						|
    {
 | 
						|
        $repository = app(\App\Models\Log::class);
 | 
						|
        $data = [
 | 
						|
            'module' => $request->route()->getAction('prefix'),
 | 
						|
            'task' => taskLabel($request->route()->getActionMethod()),
 | 
						|
            'user_id' => session('uid'),
 | 
						|
            'ipaddress' => $request->getClientIp(),
 | 
						|
            'useragent' => $request->header('User-Agent'),
 | 
						|
            'note' => $note,
 | 
						|
            'created_at' => \Carbon\Carbon::now()
 | 
						|
        ];
 | 
						|
 | 
						|
        if (session('superuser') == false)
 | 
						|
            $repository->create($data);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
if (!function_exists('trimId')) {
 | 
						|
    /**
 | 
						|
     * @param $val
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    function trimId($val)
 | 
						|
    {
 | 
						|
        $string = explode('+', $val);
 | 
						|
        return $string;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
if (!function_exists('dateTime')) {
 | 
						|
    /**
 | 
						|
     * make secure id
 | 
						|
     *
 | 
						|
     * @param string|null $val
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    function dateTime($date)
 | 
						|
    {
 | 
						|
        return date('d-m-Y H:i:s',strtotime(@$date));
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (!function_exists('encode_id')) {
 | 
						|
    /**
 | 
						|
     * make secure id
 | 
						|
     *
 | 
						|
     * @param string|null $val
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    function encode_id(?string $val = ''): string
 | 
						|
    {
 | 
						|
        $params = ['val' => $val];
 | 
						|
        return rtrim(base64_encode(serialize($params)), "=");
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (!function_exists('decode_id')) {
 | 
						|
    /**
 | 
						|
     * @param string|null $val
 | 
						|
     * ${STATIC}
 | 
						|
     *
 | 
						|
     * @return      mixed|null
 | 
						|
     * @author      alex.gz <amqit.consultant@gmail.com>
 | 
						|
     * @created     02/12/2023 4:28
 | 
						|
     *
 | 
						|
     */
 | 
						|
    function decode_id(?string $val = ''): mixed
 | 
						|
    {
 | 
						|
        $secure = unserialize(base64_decode($val));
 | 
						|
        return $secure ? $secure['val'] : null;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (!function_exists('permission')) {
 | 
						|
    /**
 | 
						|
     * @param        $access
 | 
						|
     * @param        $key
 | 
						|
     * @param string $method
 | 
						|
     * @param bool   $view
 | 
						|
     *
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    function permission($access, $key, string $method = 'menu', bool $view = false): mixed
 | 
						|
    {   
 | 
						|
        if (@session('group_id') != 1) {
 | 
						|
            if ($method == 'module') {
 | 
						|
                if (is_array($access)) {
 | 
						|
                    $model = AccessMenu::where('module', 'LIKE', "{$key}%")->where('ms_group_id', session('group_id'))->first();
 | 
						|
                    $query = count(array_intersect((array)$access, (array)$model->access));
 | 
						|
                } else {
 | 
						|
                    $query = AccessMenu::where($access, true)->where('module', 'LIKE', $key.'%')->where('ms_group_id', session('group_id'))->count();
 | 
						|
                    if ($query > 0) {
 | 
						|
                        return true;
 | 
						|
                    } else {
 | 
						|
                        return abort('401');
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                $query = AccessMenu::where($access, true)->where('ms_menu_id', $key)->where('ms_group_id', session('group_id'))->count();
 | 
						|
            }
 | 
						|
 | 
						|
            if ($query > 0) {
 | 
						|
                return true;
 | 
						|
            } else {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (!function_exists('access')) {
 | 
						|
    /**
 | 
						|
     * @param $access
 | 
						|
     * @param $key
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    function access($access, $key)
 | 
						|
    {
 | 
						|
        if (session('group_alias') != 'administrator') {
 | 
						|
            $query = AccessMenu::where($access, 1)->where('module', $key)->where('ms_group_id', session('group_id'))->count();
 | 
						|
            if ($query > 0) {
 | 
						|
                return true;
 | 
						|
            } else if (session('group_alias') == 'administrator') {
 | 
						|
                return true;
 | 
						|
            } else {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (!function_exists('activeMenuClass')) {
 | 
						|
    /**
 | 
						|
     * Helper to grab the application version.
 | 
						|
     *
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    function activeMenuClass($route){
 | 
						|
        // dd(request()->route()->getName());
 | 
						|
        // if(request()->route()->getName() == $route){
 | 
						|
        //     return true;
 | 
						|
        // }else{
 | 
						|
        //     return false;
 | 
						|
        // }
 | 
						|
 | 
						|
        if (\Str::is($route, request()->route()->getName())) {
 | 
						|
            return true;
 | 
						|
        } else {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
if (!function_exists('renderMenu')) {
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Loops through a folder and requires all PHP files
 | 
						|
     * Searches sub-directories as well.
 | 
						|
     *
 | 
						|
     * @param $folder
 | 
						|
     */
 | 
						|
    function renderMenu()
 | 
						|
    {
 | 
						|
        
 | 
						|
        $parent = Menu::where('status',true)->where('menu_type','sidebar')->where('parent_id',0)->orderBy('ordering','ASC')->get();
 | 
						|
        $html = '';
 | 
						|
        foreach ($parent as $p1) {
 | 
						|
            // echo $p1->MsMenuId.'<br>';
 | 
						|
            $child2 = Menu::where('status',true)->where('menu_type','sidebar')->where('parent_id',$p1->MsMenuId)->get();
 | 
						|
            $access1 = permission('is_read', $p1->MsMenuId, 'menu', true);
 | 
						|
 | 
						|
            $ch1 = count($child2) > 0 ? '' : '';
 | 
						|
            $link1 = count($child2) > 0 ? '' : 'menu-link';
 | 
						|
            $collapse1 = count($child2) > 0 ? 'data-fc-type="collapse"' : '';
 | 
						|
            $active = activeMenuClass($p1->module) ? 'active' : '';
 | 
						|
            // dd($p1->route);
 | 
						|
 | 
						|
            if ($access1) {
 | 
						|
                $active1 = activeMenuClass($p1->module) ? 'active' : '';
 | 
						|
 | 
						|
                $html .= '<li class=" menu-item ' . $ch1 . '">
 | 
						|
                <a '.$collapse1.' class=" menu-link '.$active1.'" href="' . url($p1->url) . '">
 | 
						|
                <span class="menu-icon"><i class="' . $p1->menu_icons . '"></i>
 | 
						|
                </span> <span class="menu-text">' . @$p1->title.'</span>';
 | 
						|
                if (count($child2) > 0) {
 | 
						|
                    $html .= '<span class="menu-arrow"></span>';
 | 
						|
                    $html .= '</a>';
 | 
						|
                    $html .= '<ul class="sub-menu hidden">';
 | 
						|
                    foreach ($child2 as $p2) {
 | 
						|
                        $child3 = Menu::where('status',true)->where('menu_type','sidebar')->where('parent_id',$p2->MsMenuId)->get();
 | 
						|
                        $access2 = permission('is_read', $p2->MsMenuId, 'menu', true);
 | 
						|
                        $ch2 = count($child3) > 0 ? '' : '';
 | 
						|
                        $collapse2 = count($child3) > 0 ? 'data-fc-type="collapse"' : '';
 | 
						|
                        $link2 = count($child3) > 0 ? '' : 'menu-link';
 | 
						|
                        if ($access2) {
 | 
						|
                            $active2 = activeMenuClass($p2->module) ? 'active' : '';
 | 
						|
                            $html .= '<li class=" menu-item ' . $ch2 . '"><a '.$collapse2.' class="menu-link '.$active2.'" href="' . url($p2->url) . '"><span class="menu-icon"><i class="' . $p2->menu_icons . '"></i></span> <span class="menu-text">' . @$p2->title.'<span>';
 | 
						|
                            if (count($child3) > 0) {
 | 
						|
                                $html .= '<span class="menu-arrow"></span>';
 | 
						|
                                $html .= '</a>';
 | 
						|
                                $html .= '<ul class="sub-menu hidden">';
 | 
						|
                                foreach ($child3 as $p3) {
 | 
						|
                                    $child4 = Menu::where('status',true)->where('menu_type','sidebar')->where('parent_id',$p3->MsMenuId)->get();
 | 
						|
                                    $access3 = permission('is_read', $p3->MsMenuId, 'menu', true);
 | 
						|
                                    $collapse3 = count($child4) > 0 ? 'data-fc-type="collapse"' : '';
 | 
						|
                                    $ch3 = count($child4) > 0 ? '' : '';
 | 
						|
                                    $link3 = count($child4) > 0 ? '' : 'menu-link';
 | 
						|
                                    if ($access3) {
 | 
						|
                                        $active3 = activeMenuClass($p3->module) ? 'active' : '';
 | 
						|
                                        // $active3 = $active ? ' ' . null : null;
 | 
						|
                                        $html .= '<li class=" menu-item ' . $ch3 .'"><a '.$collapse3.' class="menu-link '.$active3.'" href="' . url($p3->url) . '"> <span class="menu-text">' . @$p3->title.'</span>';
 | 
						|
                                        if (count($child4) > 0) {
 | 
						|
                                            $html .= '<span class="menu-arrow"></span>';
 | 
						|
                                            $html .= '</a>';
 | 
						|
                                            $html .= '<ul class="sub-menu hidden">';
 | 
						|
                                            foreach ($child4 as $p4) {
 | 
						|
                                                $html .= '<li class=" ' . null . '"><a class="menu-link" href="' . url($p4->url) . '"> <span class="menu-text">' . @$p4->title.'<span>';
 | 
						|
                                            }
 | 
						|
                                            $html .= '</ul>';
 | 
						|
                                        } else {
 | 
						|
                                            $html .= '</a>';
 | 
						|
                                        }
 | 
						|
                                        $html .= '</li>';
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                                $html .= '</ul>';
 | 
						|
                            } else {
 | 
						|
                                $html .= '</a>';
 | 
						|
                            }
 | 
						|
                            $html .= '</li>';
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    $html .= '</ul>';
 | 
						|
                } else {
 | 
						|
                    $html .= '</a>';
 | 
						|
                }
 | 
						|
                $html .= '</li>';
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return $html;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (!function_exists('include_route_files')) {
 | 
						|
    /**
 | 
						|
     * Loops through a folder and requires all PHP files
 | 
						|
     * Searches sub-directories as well.
 | 
						|
     *
 | 
						|
     * @param $folder
 | 
						|
     */
 | 
						|
    function include_route_files($folder)
 | 
						|
    {
 | 
						|
        include_files_in_folder($folder);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (!function_exists('include_files_in_folder')) {
 | 
						|
    /**
 | 
						|
     * Loops through a folder and requires all PHP files
 | 
						|
     * Searches sub-directories as well.
 | 
						|
     *
 | 
						|
     * @param $folder
 | 
						|
     */
 | 
						|
    function include_files_in_folder($folder)
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $rdi = new RecursiveDirectoryIterator($folder);
 | 
						|
            $it = new RecursiveIteratorIterator($rdi);
 | 
						|
 | 
						|
            while ($it->valid()) {
 | 
						|
                if (!$it->isDot() && $it->isFile() && $it->isReadable() && $it->current()->getExtension() === 'php') {
 | 
						|
                    require $it->key();
 | 
						|
                }
 | 
						|
 | 
						|
                $it->next();
 | 
						|
            }
 | 
						|
        } catch (Exception $e) {
 | 
						|
            echo $e->getMessage();
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |