@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']))