GetGraded @php $authenticatedUser = auth()->user(); $isCustomerUser = $authenticatedUser?->hasRole('customer') ?? false; $isPartnerUser = $authenticatedUser?->hasRole('partner') ?? false; $isSuperAdminUser = $authenticatedUser?->hasRole('super_admin') ?? false; $isAdminUser = $isSuperAdminUser || ($authenticatedUser?->hasRole('admin') ?? false); $isStaffUser = ! $isAdminUser && ($authenticatedUser?->hasPermission('submission.read.assigned_operational') ?? false); $isGraderUser = $authenticatedUser?->hasPermission('grading.session.claim') ?? false; $isOperationalPortalUser = $isAdminUser || $isStaffUser || $isGraderUser; $isPortalArea = request()->routeIs('portal.*'); // Build the nav items once so desktop and the mobile menu // render from the same source (stays neatly in sync). // Nav items whose route isn't registered yet (e.g. a not-yet // deployed route file / stale route cache) are safely skipped // instead of throwing a 500. $navItems = []; $addNav = function (string $label, ?string $url, bool $active, ?string $routeName = null) use (&$navItems): void { if ($routeName !== null && ! \Illuminate\Support\Facades\Route::has($routeName)) { return; } if ($url === null || $url === '') { return; } $navItems[] = ['label' => $label, 'url' => $url, 'active' => $active]; }; $portalNavGroups = []; $addPortalNav = function (string $group, string $label, string $routeName, string $activePattern) use (&$portalNavGroups): void { if (! \Illuminate\Support\Facades\Route::has($routeName)) { return; } $portalNavGroups[$group][] = [ 'label' => $label, 'url' => route($routeName), 'active' => request()->routeIs($activePattern), ]; }; if ($isPortalArea && $isAdminUser) { $addPortalNav('Overview', 'Admin home', 'portal.admin', 'portal.admin'); if ($authenticatedUser?->hasPermission('submission.read.assigned_operational')) { $addPortalNav('Overview', 'Orders', 'portal.admin.submitted-orders', 'portal.admin.submitted-orders'); } if ($authenticatedUser?->hasPermission('grading.queue.read')) { $addPortalNav('Work queues', 'Grading oversight', 'portal.admin.grading-oversight', 'portal.admin.grading-oversight'); $addPortalNav('Work queues', 'Grader dashboard', 'portal.staff.grading.dashboard', 'portal.staff.grading.dashboard'); } if ($authenticatedUser?->hasPermission('certificate.read.internal')) { $addPortalNav('Work queues', 'Certification queue', 'portal.staff.certification.index', 'portal.staff.certification.*'); } if ($authenticatedUser?->hasPermission('label.queue.read')) { $addPortalNav('Work queues', 'Label queue', 'portal.staff.labels.index', 'portal.staff.labels.*'); } if ($authenticatedUser?->hasPermission('dispatch.queue.read')) { $addPortalNav('Work queues', 'Dispatch', 'portal.staff.dispatch.index', 'portal.staff.dispatch.*'); } if ($authenticatedUser?->hasAnyPermission(['catalog.manage', 'catalog.view.grader'])) { $addPortalNav('Catalogue & content', 'Card catalogue', 'portal.admin.catalog.index', 'portal.admin.catalog.*'); if ($authenticatedUser?->hasPermission('catalog.manage')) { $addPortalNav('Catalogue & content', 'Languages & print names', 'portal.admin.catalog.language-print-names.index', 'portal.admin.catalog.language-print-names.*'); } } $addPortalNav('Catalogue & content', 'Label designer', 'portal.admin.label-layouts.index', 'portal.admin.label-layouts.*'); if ($authenticatedUser?->hasPermission('cms.page.read')) { $addPortalNav('Catalogue & content', 'Content manager', 'portal.staff.content.index', 'portal.staff.content.*'); } if ($authenticatedUser?->hasPermission('admin.system.config.manage')) { $addPortalNav('Administration', 'Sales', 'portal.admin.sales.index', 'portal.admin.sales.*'); if (\Illuminate\Support\Facades\Route::has('portal.admin.partner-pricing.index')) { $addPortalNav('Administration', 'Partner pricing', 'portal.admin.partner-pricing.index', 'portal.admin.partner-pricing.*'); } } if ($authenticatedUser?->hasRole('admin') || $authenticatedUser?->hasRole('super_admin')) { $addPortalNav('Administration', 'Email designer', 'portal.admin.email-templates.index', 'portal.admin.email-templates.*'); } if ($authenticatedUser?->hasPermission('admin.user.read')) { $addPortalNav('Administration', 'User control', 'portal.admin.user-control', 'portal.admin.user-control*'); $addPortalNav('Administration', 'Reviews', 'portal.admin.reviews.index', 'portal.admin.reviews.*'); $addPortalNav('Administration', 'GG Points', 'portal.admin.points-store.index', 'portal.admin.points-store.*'); $addPortalNav('Administration', 'Discount codes', 'portal.admin.discount-codes.index', 'portal.admin.discount-codes.*'); } if ($authenticatedUser?->hasPermission('partner.webhook.admin')) { $addPortalNav('Administration', 'Partner webhooks', 'portal.admin.webhooks.index', 'portal.admin.webhooks.*'); } if ($authenticatedUser?->hasPermission('cache.manage')) { $addPortalNav('Administration', 'Cache', 'portal.admin.cache.index', 'portal.admin.cache.*'); } if ($authenticatedUser?->hasPermission('audit.read.security')) { $addPortalNav('Administration', 'Operational logs', 'portal.admin.observability.index', 'portal.admin.observability.*'); } if ($authenticatedUser?->hasPermission('admin.partner.api_credential.manage')) { $addPortalNav('Administration', 'Create partner API', 'portal.admin.partner-api.create', 'portal.admin.partner-api.*'); } if ($authenticatedUser?->