Files
2026-10-21 22:00:06 +02:00

79 lines
4.8 KiB
PHP

<?php
declare(strict_types=1);
function render_admin_nav(string $activePage, string $user): void
{
$isActive = static fn(string $page): string => $activePage === $page ? 'active' : '';
?>
<link rel="stylesheet" href="assets/navigation.css">
<div class="topbar admin-topbar">
<div class="brand"><span class="dot"></span>NetMonster Admin</div>
<button class="nav-toggle" type="button" aria-expanded="false" aria-controls="adminNavigation">
<span class="sr-only">Ouvrir le menu</span><span></span><span></span><span></span>
</button>
<nav id="adminNavigation" class="admin-navigation">
<a href="index.php" class="<?= $isActive('index.php') ?>">Accueil</a>
<div class="nav-dropdown">
<button type="button" class="nav-dropdown-toggle" aria-expanded="false">Donn&eacute;es <span aria-hidden="true">▾</span></button>
<div class="nav-dropdown-menu">
<a href="search_site.php" class="<?= $isActive('search_site.php') ?>">Recherche antenne</a>
<a href="data_quality.php" class="<?= $isActive('data_quality.php') ?>">Contr&ocirc;le qualit&eacute;</a>
<a href="duplicates.php" class="<?= $isActive('duplicates.php') ?>">Doublons &amp; collisions</a>
<a href="edit_site.php" class="<?= $isActive('edit_site.php') ?>&Eacute;dition de site</a>
<a href="operator_sites.php" class="<?= $isActive('operator_sites.php') ?>">Antennes par op&eacute;rateur</a>
</div>
</div>
<div class="nav-dropdown">
<button type="button" class="nav-dropdown-toggle" aria-expanded="false">Import &amp; validation <span aria-hidden="true">▾</span></button>
<div class="nav-dropdown-menu">
<a href="import_ntm.php" class="<?= $isActive('import_ntm.php') ?>">Importer un fichier .ntm</a>
<a href="cellmapper_import.php" class="<?= $isActive('cellmapper_import.php') ?>">Import CellMapper</a>
<a href="manual_add.php" class="<?= $isActive('manual_add.php') ?>">Ajout manuel</a>
<a href="review.php" class="<?= $isActive('review.php') ?>">Validation des donn&eacute;es</a>
<a href="import_history.php" class="<?= $isActive('import_history.php') ?>">Historique des imports</a>
</div>
</div>
<div class="nav-dropdown">
<button type="button" class="nav-dropdown-toggle" aria-expanded="false">Configuration <span aria-hidden="true">▾</span></button>
<div class="nav-dropdown-menu">
<a href="countries_settings.php" class="<?= $isActive('countries_settings.php') ?>">Pays &amp; op&eacute;rateurs</a>
<a href="map_layers.php" class="<?= $isActive('map_layers.php') ?>">Couches cartographiques</a>
<a href="export.php" class="<?= $isActive('export.php') ?>">Export</a>
</div>
</div>
<div class="nav-dropdown">
<button type="button" class="nav-dropdown-toggle" aria-expanded="false">Suivi &amp; s&eacute;curit&eacute; <span aria-hidden="true">▾</span></button>
<div class="nav-dropdown-menu">
<a href="statistics.php" class="<?= $isActive('statistics.php') ?>">Statistiques</a>
<a href="audit_log.php" class="<?= $isActive('audit_log.php') ?>">Journal d'audit</a>
<a href="backup.php" class="<?= $isActive('backup.php') ?>">Sauvegardes</a>
</div>
</div>
</nav>
<div class="user">Connect&eacute; : <?= htmlspecialchars($user, ENT_QUOTES, 'UTF-8') ?></div>
</div>
<script>
(() => {
const toggle = document.querySelector('.nav-toggle');
const navigation = document.getElementById('adminNavigation');
if (!toggle || !navigation) return;
toggle.addEventListener('click', () => {
const open = navigation.classList.toggle('is-open');
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
});
document.querySelectorAll('.nav-dropdown-toggle').forEach((button) => {
button.addEventListener('click', () => {
const dropdown = button.closest('.nav-dropdown');
const open = dropdown.classList.toggle('is-open');
button.setAttribute('aria-expanded', open ? 'true' : 'false');
});
});
document.addEventListener('click', (event) => {
if (!(event.target instanceof Element) || event.target.closest('.nav-dropdown')) return;
document.querySelectorAll('.nav-dropdown.is-open').forEach((dropdown) => dropdown.classList.remove('is-open'));
});
})();
</script>
<?php
}