@php use App\Services\PermissionService; use App\Services\CompanyService; use App\Services\SidebarSettingsService; $role = auth()->user()->role?->slug ?? 'admin'; $user = auth()->user(); $isPlatformPanel = request()->is('admin', 'admin/*'); $isCompanyPanel = request()->is('company', 'company/*'); $isStudentPanel = request()->is('learner', 'learner/*', 'alumni', 'alumni/*', 'parent', 'parent/*'); $instructorMenu = [ ['label' => 'Dashboard', 'route' => 'instructor.dashboard', 'icon' => 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6'], ]; $studentPanelRoles = ['learner', 'alumni', 'parent']; $learnerMenu = config('panel-menus.learner', []); $alumniMenu = config('panel-menus.alumni', []); $parentMenu = config('panel-menus.parent', []); $platformSections = collect(config('platform-menu.platform', [])); $companySections = collect(config('admin-menu.admin', []))->map(function ($section) use ($user) { if (isset($section['route'])) { if (!PermissionService::canAccessRoute($user, $section['permission'] ?? null)) { return null; } return $section; } $items = collect($section['items'] ?? [])->filter(function ($item) use ($user) { if (! empty($item['hidden'])) { return false; } return PermissionService::canAccessRoute($user, $item['permission'] ?? null); })->values()->all(); if (empty($items)) { return null; } $section['items'] = $items; return $section; })->filter()->values()->all(); // Show unread institute enquiry count on Website → Enquiries. if ($isCompanyPanel && $user && method_exists($user, 'isCompanyStaff') && $user->isCompanyStaff()) { try { $enquiryCompany = \App\Services\CompanyService::resolveForUser($user); $newEnquiryCount = $enquiryCompany->enquiries()->where('status', 'new')->count(); if ($newEnquiryCount > 0) { $companySections = collect($companySections)->map(function ($section) use ($newEnquiryCount) { if (! isset($section['items'])) { return $section; } $section['items'] = collect($section['items'])->map(function ($item) use ($newEnquiryCount) { if (($item['route'] ?? null) === 'admin.company-page.enquiries') { $item['badge'] = (string) $newEnquiryCount; } return $item; })->all(); return $section; })->all(); } } catch (\Throwable $e) { // Ignore — menu should still render if company resolve fails. } } $menuSections = $isPlatformPanel ? $platformSections : $companySections; $sidebarSettings = SidebarSettingsService::defaults(); if ($isCompanyPanel && $user) { try { $sidebarSettings = SidebarSettingsService::forCompany(CompanyService::resolveForUser($user)); } catch (\Throwable $e) { // keep defaults } $menuSections = SidebarSettingsService::reorderSections( $menuSections instanceof \Illuminate\Support\Collection ? $menuSections->all() : (array) $menuSections, $sidebarSettings['menu_order'] ); } $menuSections = collect($menuSections); $sidebarLayout = $isCompanyPanel ? ($sidebarSettings['layout'] ?? 'vertical') : 'vertical'; $panelSidebarFlat = SidebarSettingsService::isFlatTheme($sidebarSettings); $panelTitle = $isPlatformPanel ? 'Platform Admin' : match ($role) { 'alumni' => 'Alumni Portal', 'parent' => 'Parent Portal', default => ($isStudentPanel || in_array($role, $studentPanelRoles, true) ? 'Student Panel' : 'Institute Panel'), }; $isMenuItemActive = function (array $item) use ($menuSections): bool { $route = $item['route'] ?? null; if (! $route) { return false; } $activeRoutes = $item['active_routes'] ?? null; if (is_array($activeRoutes)) { return collect($activeRoutes)->contains( fn (string $pattern) => request()->routeIs($pattern) ); } if (! request()->routeIs($route, $route . '.*')) { return false; } $params = $item['params'] ?? []; if (! empty($params)) { foreach ($params as $key => $value) { if ((string) request($key) !== (string) $value) { return false; } } return true; } // Shared route without params: inactive when another sibling's query params match. foreach ($menuSections as $section) { $siblings = isset($section['items']) ? $section['items'] : [$section]; foreach ($siblings as $sibling) { if (($sibling['route'] ?? null) !== $route) { continue; } if (($sibling['label'] ?? null) === ($item['label'] ?? null)) { continue; } $siblingParams = $sibling['params'] ?? []; if (empty($siblingParams)) { continue; } $siblingMatches = true; foreach ($siblingParams as $key => $value) { if ((string) request($key) !== (string) $value) { $siblingMatches = false; break; } } if ($siblingMatches) { return false; } } } return true; }; $defaultOpenGroups = []; foreach ($menuSections as $section) { if (isset($section['group'])) { $defaultOpenGroups[$section['group']] = collect($section['items'])->contains( fn ($item) => $isMenuItemActive($item) ); } } @endphp @if($sidebarLayout === 'horizontal' && in_array($role, ['admin', 'sub-admin', 'counselor', 'super-admin']))
L

Learnyst

{{ $panelTitle }}

@include('layouts.partials.user-menu-dropdown', ['variant' => 'horizontal', 'panelSidebarFlat' => $panelSidebarFlat])
@foreach($menuSections as $menuIndex => $section) @if(isset($section['route'])) @php $isActive = $isMenuItemActive($section); @endphp @if(!empty($section['icon'])) @include('layouts.partials.menu-icon', ['icon' => $section['icon'], 'class' => 'w-full h-full']) @endif {{ $section['label'] }} @elseif(isset($section['group'])) @php $groupName = $section['group']; $groupActive = collect($section['items'])->contains(fn ($i) => $isMenuItemActive($i)); @endphp
@foreach($section['items'] as $item) @if(!empty($item['hidden'])) @continue @endif {{ $item['label'] }} @if(!empty($item['badge'])) {{ $item['badge'] }} @endif @endforeach
@endif @endforeach
@endif