update
This commit is contained in:
229
app/Views/partials/dsi.php
Normal file
229
app/Views/partials/dsi.php
Normal file
@@ -0,0 +1,229 @@
|
||||
<?php
|
||||
/**
|
||||
* Espace DSI : comptes d'accès, jetons et journal d'activité.
|
||||
* Module JS : `dsi`.
|
||||
*
|
||||
* Partiel de contenu inclus par la vue de page homonyme. Les identifiants HTML
|
||||
* posés ici sont les points d'ancrage du module JS : les renommer casse le
|
||||
* module sans aucune erreur visible.
|
||||
*
|
||||
* Aucune donnée n'est rendue côté PHP : la page est entièrement alimentée par
|
||||
* api/dsi_comptes.php et api/dsi_journal.php. C'est ce qui permet de rafraîchir
|
||||
* le journal sans recharger l'écran, et d'éviter que le HTML servi porte la
|
||||
* moindre information sur les comptes.
|
||||
*/
|
||||
?>
|
||||
<section class="page-content dsi-page">
|
||||
<div id="dsi-installation-warning" class="message message-error dsi-installation-warning" role="alert" hidden>
|
||||
Le compte DSI utilise encore le jeton d'installation, publié en clair dans la migration SQL :
|
||||
<strong>régénérez-le maintenant</strong>, il donne un accès complet à cette page.
|
||||
</div>
|
||||
|
||||
<!--
|
||||
Panneau des jetons fraîchement produits. C'est la SEULE occasion de les
|
||||
lire : la base n'en conserve qu'une empreinte. Il reste ouvert tant que
|
||||
la DSI ne l'a pas explicitement refermé, pour laisser le temps de les
|
||||
recopier ou de les imprimer.
|
||||
-->
|
||||
<section id="dsi-token-panel" class="card dsi-token-panel" hidden>
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<h2>Jetons à transmettre</h2>
|
||||
<p class="section-subtitle">Ces jetons ne seront plus jamais affichés : la base n'en garde qu'une empreinte. Copiez-les, transmettez-les à leurs titulaires, puis refermez ce panneau.</p>
|
||||
</div>
|
||||
<div class="button-group">
|
||||
<button id="dsi-token-copy" class="button button-secondary" type="button">Tout copier</button>
|
||||
<button id="dsi-token-close" class="button button-secondary" type="button">Fermer</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="dsi-token-list" class="dsi-token-list"></div>
|
||||
<div id="dsi-token-message" class="message" role="status" aria-live="polite"></div>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<h2>Comptes d'accès</h2>
|
||||
<p class="section-subtitle">Un compte par utilisateur : agents, responsables de lieu, administrateurs du Service Enfance et DSI. Chacun se connecte avec son jeton, il n’y a aucun mot de passe dans PTA.</p>
|
||||
</div>
|
||||
<button id="dsi-generate-missing" class="button button-secondary" type="button">
|
||||
Générer les jetons manquants <span id="dsi-missing-count" class="nav-count-badge" hidden>0</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<form id="dsi-account-form" class="admin-form">
|
||||
<div class="admin-form-grid">
|
||||
<label class="field">
|
||||
<span>Type de compte</span>
|
||||
<select id="dsi-account-role" required>
|
||||
<option value="SERVICE_ENFANCE">Service Enfance (administrateur)</option>
|
||||
<option value="DSI">DSI</option>
|
||||
<option value="AGENT">Agent</option>
|
||||
<option value="RESPONSABLE_STRUCTURE">Responsable de structure</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="field" id="dsi-account-agent-field" hidden>
|
||||
<span>Agent titulaire</span>
|
||||
<select id="dsi-account-agent"><option value="">Choisir un agent sans compte</option></select>
|
||||
</label>
|
||||
<label class="field" id="dsi-account-structure-field" hidden>
|
||||
<span>Lieu titulaire</span>
|
||||
<select id="dsi-account-structure"><option value="">Choisir un lieu sans compte</option></select>
|
||||
</label>
|
||||
<label class="field" id="dsi-account-label-field">
|
||||
<span>Nom du titulaire</span>
|
||||
<input id="dsi-account-label" type="text" maxlength="180" placeholder="Ex. Service Enfance — Camille Roux">
|
||||
</label>
|
||||
<label class="field admin-field-wide">
|
||||
<span>Commentaire (facultatif)</span>
|
||||
<input id="dsi-account-comment" type="text" maxlength="255" placeholder="Ex. remplacement congé maternité, jusqu'en septembre">
|
||||
</label>
|
||||
</div>
|
||||
<p id="dsi-account-hint" class="hint"></p>
|
||||
<div class="admin-form-actions">
|
||||
<div id="dsi-account-message" class="message" role="status" aria-live="polite"></div>
|
||||
<button class="button button-primary" type="submit">Créer le compte et générer son jeton</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="selection-grid overview-filters">
|
||||
<label class="field">
|
||||
<span>Type</span>
|
||||
<select id="dsi-filter-role">
|
||||
<option value="">Tous les types</option>
|
||||
<option value="DSI">DSI</option>
|
||||
<option value="SERVICE_ENFANCE">Service Enfance</option>
|
||||
<option value="RESPONSABLE_STRUCTURE">Responsable de structure</option>
|
||||
<option value="AGENT">Agent</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="field">
|
||||
<span>État</span>
|
||||
<select id="dsi-filter-state">
|
||||
<option value="">Tous</option>
|
||||
<option value="1">Actifs</option>
|
||||
<option value="0">Désactivés</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="field">
|
||||
<span>Rechercher</span>
|
||||
<input id="dsi-filter-search" type="search" maxlength="80" placeholder="Nom, matricule ou début de jeton">
|
||||
</label>
|
||||
<div class="overview-filter-actions">
|
||||
<button id="dsi-accounts-refresh" class="button button-secondary filter-button" type="button">Actualiser</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="dsi-accounts-message" class="message" role="status" aria-live="polite"></div>
|
||||
<div class="table-scroll">
|
||||
<table class="planning-table dsi-accounts-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Titulaire</th>
|
||||
<th>Type</th>
|
||||
<th>Jeton</th>
|
||||
<th>Dernière connexion</th>
|
||||
<th>État</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="dsi-accounts-body">
|
||||
<tr><td colspan="6">Chargement des comptes…</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<h2>Journal d'activité</h2>
|
||||
<p class="section-subtitle">Connexions, écritures en base et refus d'accès. Les lectures ne sont pas tracées : elles noieraient le journal sans rien apprendre.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="dsi-journal-stats" class="summary-grid compact-summary"></div>
|
||||
|
||||
<div class="selection-grid overview-filters dsi-journal-filters">
|
||||
<label class="field">
|
||||
<span>Catégorie</span>
|
||||
<select id="dsi-journal-category">
|
||||
<option value="">Toutes</option>
|
||||
<option value="CONNEXION">Connexions</option>
|
||||
<option value="ECRITURE">Écritures</option>
|
||||
<option value="ACCES_REFUSE">Refus d'accès</option>
|
||||
<option value="ADMINISTRATION">Administration</option>
|
||||
<option value="SYSTEME">Système</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="field">
|
||||
<span>Résultat</span>
|
||||
<select id="dsi-journal-result">
|
||||
<option value="">Tous</option>
|
||||
<option value="SUCCES">Succès</option>
|
||||
<option value="REFUS">Refus</option>
|
||||
<option value="ERREUR">Erreur</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="field">
|
||||
<span>Rôle</span>
|
||||
<select id="dsi-journal-role">
|
||||
<option value="">Tous</option>
|
||||
<option value="DSI">DSI</option>
|
||||
<option value="SERVICE_ENFANCE">Service Enfance</option>
|
||||
<option value="RESPONSABLE_STRUCTURE">Responsable de structure</option>
|
||||
<option value="AGENT">Agent</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="field">
|
||||
<span>Du</span>
|
||||
<input id="dsi-journal-from" type="date">
|
||||
</label>
|
||||
<label class="field">
|
||||
<span>Au</span>
|
||||
<input id="dsi-journal-to" type="date">
|
||||
</label>
|
||||
<label class="field">
|
||||
<span>Rechercher</span>
|
||||
<input id="dsi-journal-search" type="search" maxlength="80" placeholder="Acteur, action, adresse IP">
|
||||
</label>
|
||||
<div class="overview-filter-actions">
|
||||
<button id="dsi-journal-refresh" class="button button-secondary filter-button" type="button">Actualiser</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="dsi-journal-message" class="message" role="status" aria-live="polite"></div>
|
||||
<div class="table-scroll">
|
||||
<table class="planning-table dsi-journal-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Catégorie</th>
|
||||
<th>Acteur</th>
|
||||
<th>Action</th>
|
||||
<th>Détail</th>
|
||||
<th>Origine</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="dsi-journal-body">
|
||||
<tr><td colspan="6">Chargement du journal…</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="dsi-pagination">
|
||||
<button id="dsi-journal-previous" class="button button-secondary" type="button" disabled>Page précédente</button>
|
||||
<span id="dsi-journal-page-label">Page 1</span>
|
||||
<button id="dsi-journal-next" class="button button-secondary" type="button" disabled>Page suivante</button>
|
||||
</div>
|
||||
|
||||
<form id="dsi-purge-form" class="inline-form dsi-purge-form">
|
||||
<label class="field">
|
||||
<span>Purger les entrées de plus de</span>
|
||||
<input id="dsi-purge-days" type="number" min="30" max="3650" value="365" required>
|
||||
</label>
|
||||
<span class="hint">jours (30 minimum : une purge trop courte effacerait les traces d'un incident avant qu'il soit constaté).</span>
|
||||
<button class="button button-danger" type="submit">Purger</button>
|
||||
</form>
|
||||
</section>
|
||||
</section>
|
||||
Reference in New Issue
Block a user