in_array($page ?? '', $pages, true) ? ' aria-current="page"' : ''; $relancesDues = $u ? nombre_relances_dues() : 0; $pagesGestion = ['conservation', 'journal', 'connexions', 'utilisateurs', 'sauvegarde', 'corbeille', 'erreurs']; // Le menu Gestion est réservé au gestionnaire : conservation, journal, connexions, comptes, corbeille, sauvegarde, erreurs $admin = $u !== null && $u['role'] === 'admin'; $echus = $admin ? nombre_echus() : 0; $demandes = $admin ? nombre_demandes() : 0; // Traductions à faire : le script les traite en arrière-plan, une par une $aTraduire = $u && peut_ecrire() && Claude::configure() ? nombre_traductions_a_faire() : 0; // Page publique (guide Sécurité lu sans être connecté) : fond clair, sans menu $classeCorps = $u ? 'connecte' : (($page ?? '') === 'securite' ? 'public' : 'accueil'); $aLaCorbeille = $admin ? nombre_corbeille() : 0; // Menu du compte : initiales dans la pastille, prénom à côté $mots = $u ? (preg_split('/\s+/u', trim($u['nom_affiche'])) ?: []) : []; $initiales = mb_strtoupper(mb_substr($mots[0] ?? '', 0, 1) . (count($mots) > 1 ? mb_substr((string) end($mots), 0, 1) : '')); $prenomCompte = $mots[0] ?? ''; $ici = 'index.php?' . http_build_query(array_filter($_GET, 'is_string')); // Textes dont le JavaScript a besoin, dans la langue de l'interface $textesJs = [ 'echecEnregistrement' => t('Le changement n\'a pas été enregistré.'), 'connexionPerdue' => t('Connexion perdue. Le changement n\'a pas été enregistré.'), 'analyseEnCours' => t('Analyse en cours…'), 'lotEnAttente' => t('En attente'), 'lotPret' => t('Prêt à relire'), 'lotErreur' => t('Erreur'), 'lotTermine' => t('Analyses terminées. La page se recharge.'), 'fermer' => t('Fermer'), 'filtres' => t('Filtres'), 'copie' => t('Copié'), ]; $langues = static function () use ($ici): string { $html = '
' . champ_csrf() . ''; foreach (LANGUES_INTERFACE as $code => $nom) { $html .= ''; } return $html . '
'; }; ?> <?= e($titre ?? '') ?> · <?= e(config('nom_app')) ?>
IT Club
IT Club