diff --git a/app/routers/snapshots.py b/app/routers/snapshots.py
index 2846977..fa2a1e7 100644
--- a/app/routers/snapshots.py
+++ b/app/routers/snapshots.py
@@ -49,12 +49,19 @@ async def snapshots_page(request: Request, db=Depends(get_db)):
vcenters = db.execute(text(
"SELECT id, name, endpoint FROM vcenters WHERE is_active = true ORDER BY name"
)).fetchall()
+ # Liste des intervenants disponibles : users actifs non-admin (cf table users)
+ intervenants = db.execute(text("""
+ SELECT username, display_name FROM users
+ WHERE is_active = true AND role <> 'admin'
+ ORDER BY username
+ """)).fetchall()
ctx = base_context(request, db, user)
ctx.update({
"app_name": APP_NAME,
"intervenant_default": intervenant,
"vcenters": vcenters,
+ "intervenants_list": intervenants,
"can_delete": _can_delete_snaps(perms),
})
return templates.TemplateResponse("snapshots.html", ctx)
diff --git a/app/templates/snapshots.html b/app/templates/snapshots.html
index f0d9619..eee8047 100644
--- a/app/templates/snapshots.html
+++ b/app/templates/snapshots.html
@@ -58,9 +58,14 @@
-
Liste alimentée après chargement (auteurs détectés dans les snapshots PatchCenter).
+
Users actifs (hors admins) — défaut = toi.
@@ -150,29 +155,10 @@
});
}
- function rebuildIntervenantDropdown() {
- // Liste des auteurs distincts des snapshots PatchCenter trouvés
- const authors = Array.from(new Set(
- allSnaps.filter(s => s.origin === 'patchcenter' && s.author).map(s => s.author)
- )).sort((a,b) => a.localeCompare(b, 'fr', {sensitivity:'base'}));
- // Conserve la sélection courante (ou défaut user connecté)
- const current = fIntervenant.value || intervenantDefault;
- let opts = '';
- // Si user connecté pas dans la liste (= aucun snap encore), on l'ajoute en tête
- const haveCurrent = authors.some(a => a.toLowerCase() === current.toLowerCase());
- if (intervenantDefault && !authors.some(a => a.toLowerCase() === intervenantDefault.toLowerCase())) {
- opts += ``;
- }
- for (const a of authors) {
- const isYou = a.toLowerCase() === intervenantDefault.toLowerCase();
- const sel = (a.toLowerCase() === current.toLowerCase()) ? ' selected' : '';
- opts += ``;
- }
- if (!opts) opts = '';
- fIntervenant.innerHTML = opts;
- // Re-sélectionne current ou défaut si présent
- if (haveCurrent) fIntervenant.value = current;
- }
+ // Note: la liste des intervenants est désormais figée au pageload (cf template,
+ // alimentée depuis la table users actifs hors admin). On ne la reconstruit plus
+ // dynamiquement après scan vCenter — un user qui aurait fait un snapshot mais
+ // serait inactif/admin ne sera pas filtrable nominativement, tant pis pour ce cas.
function fmtDateFR(iso) {
// ISO 8601 -> 'jj/mm/aaaa HH:MM' (heure locale du navigateur)
@@ -296,7 +282,6 @@
(errs ? ` ⚠ ${escapeHTML(errs)}` : '');
status.dataset.baseMsg = baseMsg;
status.innerHTML = baseMsg;
- rebuildIntervenantDropdown();
render();
} catch (e) {
status.innerHTML = 'Erreur réseau : ' + escapeHTML(String(e)) + '';