, bandeau et barre de navigation. * * LA NAVIGATION EST DÉFINIE À DEUX ENDROITS, à tenir cohérents : * - $navigation ci-dessous, qui associe une clé de page à son URL et son libellé ; * - acces_role_page en base, qui décide des pages RÉELLEMENT autorisées. * Une page absente de $navigation n'apparaîtra jamais, même autorisée en base ; * une page absente de la base n'apparaîtra pas non plus, même déclarée ici. * * $navigationGroups n'est qu'un regroupement d'affichage : une page oubliée * dans les groupes reste atteignable via le groupe « Autres » (voir plus bas). * * VERSION DES ASSETS : le `?v=` de la feuille de style est à incrémenter après * toute modification de CSS ou de JS, ICI, dans layouts/footer.php ET dans * Views/pages/role.php, qui porte son propre . Sans cela, nginx * (expires 7d) et les navigateurs continuent de servir l'ancienne version. */ /** @var string $pageTitle */ /** @var string $pageSubtitle */ /** @var string $activePage */ /** @var array $allowedPages */ /** @var array $accessProfile */ /** @var string $csrfToken */ $isAgent = ($accessProfile['role'] ?? '') === 'AGENT'; $navigation = [ 'dashboard' => ['dashboard.php', 'Tableau de bord'], 'planning' => ['planning.php', 'Saisie'], 'pending' => ['pending.php', 'À valider'], 'coverage' => ['coverage.php', 'Couverture'], 'structures' => ['structures.php', 'Par lieu'], 'agents' => ['agents.php', $isAgent ? 'Mon planning' : 'Par agent'], 'annual' => ['annual.php', 'Vue annuelle'], 'pta' => ['pta.php', 'PTA détaillé'], 'teams' => ['teams.php', 'Équipes'], 'vacations' => ['vacations.php', 'Vacances'], 'administration' => ['administration.php', 'Administration'], ]; /** * Les onze onglets du Service Enfance étaient alignés à plat, sans hiérarchie : * rien ne distinguait une tâche quotidienne d'un référentiel modifié deux fois * par an. Ils sont désormais regroupés par intention. Les rôles qui n'ont que * quelques pages gardent une barre simple, sans titres de groupe. */ $navigationGroups = [ 'Piloter' => ['dashboard', 'pending', 'coverage'], 'Planifier' => ['planning', 'teams'], 'Consulter' => ['agents', 'structures', 'annual', 'pta'], 'Paramétrer' => ['vacations', 'administration'], ]; $visibleGroups = []; $grouped = []; foreach ($navigationGroups as $groupLabel => $keys) { $visibleKeys = array_values(array_filter( $keys, static fn (string $key): bool => in_array($key, $allowedPages, true) && isset($navigation[$key]) )); if ($visibleKeys !== []) { $visibleGroups[$groupLabel] = $visibleKeys; $grouped = array_merge($grouped, $visibleKeys); } } // Filet de sécurité : une page autorisée en base mais oubliée dans les groupes // ci-dessus reste accessible plutôt que de disparaître de la navigation. $ungrouped = array_values(array_filter( $allowedPages, static fn (string $key): bool => isset($navigation[$key]) && !in_array($key, $grouped, true) )); if ($ungrouped !== []) { $visibleGroups['Autres'] = $ungrouped; } $visiblePageCount = count($grouped) + count($ungrouped); $showGroupLabels = $visiblePageCount > 4; /** * Le guide n'appartient à aucun groupe d'intention : ce n'est pas une étape du * travail mais un secours permanent. Il est volontairement absent de * $navigation — il ne doit apparaître qu'une seule fois, ancré à droite de la * barre, et jamais repêché par le filet « Autres ». */ $showHelpTab = in_array('faq', $allowedPages, true); ?> <?= htmlspecialchars($pageTitle) ?> — PTA
Cette page n’est pas disponible avec votre rôle actuel.