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)) + '';