From fd732b23a47f4070db943615d32750289b668e85 Mon Sep 17 00:00:00 2001 From: Jagad R R Date: Mon, 3 Feb 2025 16:47:05 +0700 Subject: [PATCH] Update MenuMiddleware.php --- app/Http/Middleware/MenuMiddleware.php | 110 +++++++++++-------------- 1 file changed, 49 insertions(+), 61 deletions(-) diff --git a/app/Http/Middleware/MenuMiddleware.php b/app/Http/Middleware/MenuMiddleware.php index 14e0c69..27c9d66 100644 --- a/app/Http/Middleware/MenuMiddleware.php +++ b/app/Http/Middleware/MenuMiddleware.php @@ -9,7 +9,6 @@ use Illuminate\Support\Facades\Auth; class MenuMiddleware { - public function handle($request, Closure $next) { $menu = Menu::new() @@ -19,76 +18,34 @@ class MenuMiddleware 'data-widget' => 'treeview', 'role' => 'menu', 'data-accordion' => 'false' - ]); - - $menu->html(''); - // Ambil data menu utama $user = Auth::guard('admin')->user(); $role = $user->roles->first(); $currentRoleId = $role ? $role->id : null; - $menus = DB::select(" - SELECT m.*, rm.menu_id AS assigned_menu_id - FROM menus m - LEFT JOIN role_menu rm - ON m.id = rm.menu_id - WHERE m.parent_id IS NULL AND rm.role_id = '".$currentRoleId."' - ORDER BY m.id - "); - - foreach ($menus as $item) { - // Ambil submenu jika ada - $children = DB::select(" - SELECT m.*, rm.menu_id AS assigned_menu_id - FROM menus m - LEFT JOIN role_menu rm - ON m.id = rm.menu_id - WHERE m.parent_id = '".$item->id."' AND rm.role_id = '".$currentRoleId."' - ORDER BY m.id - "); + if ($currentRoleId) { + // Single query to get all authorized menus + $allMenus = DB::table('menus') + ->join('role_menu', 'menus.id', '=', 'role_menu.menu_id') + ->where('role_menu.role_id', $currentRoleId) + ->select('menus.*') + ->orderBy('order', 'ASC') + ->get(); - + // Organize menus into parents and children + $parents = $allMenus->where('parent_id', null); + $childrenByParent = $allMenus->whereNotNull('parent_id') + ->groupBy('parent_id'); - if (isset($children)) { - // Menu dengan child - $submenu = Menu::new()->addClass('nav nav-treeview'); - - foreach ($children as $child) { - - $submenu->html( - '' - ); - } - $menu->html( - '' - ); - } else { - // Menu tanpa child - $menu->html( - '' - ); + foreach ($parents as $parent) { + $this->addMenuItems($menu, $parent, $childrenByParent->get($parent->id)); } } @@ -96,5 +53,36 @@ class MenuMiddleware return $next($request); } - -} + + protected function addMenuItems($menu, $item, $children) + { + if ($children && $children->isNotEmpty()) { + $submenu = Menu::new()->addClass('nav nav-treeview'); + foreach ($children as $child) { + $submenu->html($this->createMenuItem($child)); + } + + $menu->html( + '' + ); + } else { + $menu->html($this->createMenuItem($item)); + } + } + + protected function createMenuItem($item) + { + return ''; + } +} \ No newline at end of file