Ajout des vérifications des types dans les formulaires (adresses, email, telephone)

This commit is contained in:
PTA
2026-08-21 13:50:05 +02:00
parent b3e53f83b8
commit 44730eefca
15 changed files with 898 additions and 17 deletions

View File

@@ -51,10 +51,10 @@ window.PTA_PAGE_CONFIG = <?= json_encode([
'params' => $pageConfig,
], JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE) ?>;
</script>
<script src="assets/js/core.js?v=7.24"></script>
<script src="assets/js/core.js?v=7.26"></script>
<?php foreach ($scripts as $script): ?>
<script src="assets/js/<?= htmlspecialchars($script) ?>?v=7.24"></script>
<script src="assets/js/<?= htmlspecialchars($script) ?>?v=7.26"></script>
<?php endforeach; ?>
<script src="assets/js/page-bootstrap.js?v=7.24"></script>
<script src="assets/js/page-bootstrap.js?v=7.26"></script>
</body>
</html>

View File

@@ -104,7 +104,7 @@ $showHelpTab = in_array('faq', $allowedPages, true);
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= htmlspecialchars($pageTitle) ?> — PTA</title>
<link rel="stylesheet" href="assets/style.css?v=7.24">
<link rel="stylesheet" href="assets/style.css?v=7.26">
</head>
<body>
<main class="app-shell">

View File

@@ -43,7 +43,7 @@ $titre = $titres[$etape] ?? 'Connexion';
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= htmlspecialchars($titre) ?> — PTA</title>
<link rel="stylesheet" href="assets/style.css?v=7.24">
<link rel="stylesheet" href="assets/style.css?v=7.26">
</head>
<body class="role-page-body">
<main class="role-page-shell">

View File

@@ -151,6 +151,8 @@ $sommaire = [
<li><strong>Dates de contrat</strong> : information RH. Attention, la date de début <em>ne décale pas</em> l’année de référence, qui reste l’année civile complète.</li>
<li><strong>Qualification et diplôme</strong> : le champ « Diplôme » ne s’active que si l’agent est déclaré diplômé. Cette information alimente le contrôle du taux de diplômés dans les équipes.</li>
<li><strong>Droit à l’enveloppe de formation de 14 h</strong> : coché par défaut. Décoché, le motif « Formation » ne sera pas proposé pour cet agent lors de la saisie.</li>
<li><strong>E-mail et téléphone</strong> : facultatifs, mais contrôlés au format dès la saisie. Le téléphone accepte les séparateurs habituels (<code>06 12 34 56 78</code>, <code>06.12.34.56.78</code>, <code>+33 6 12 34 56 78</code>) ; une saisie mal formée est signalée sous le champ et bloque l’enregistrement.</li>
<li><strong>Adresse personnelle</strong> : facultative et purement informative. Dès trois caractères saisis, une liste d’adresses officielles est proposée sous le champ (source : Base Adresse Nationale) — cliquez sur la bonne, ou continuez à écrire librement si l’adresse n’y figure pas.</li>
<li><strong>Observations utiles à la construction du PTA</strong> : disponibilités particulières, organisation connue… Ces notes se retrouvent sur l’écran « PTA détaillé ».</li>
<li>Cliquez sur <strong>Ajouter l’agent</strong>.</li>
</ol>

View File

@@ -13,6 +13,17 @@
*
* L'ordre est celui du travail réel : on crée un agent, puis on consulte ou
* corrige sa fiche dans le tableau qui suit.
*
* V7.25 : les deux champs d'adresse (création et fiche) sont enveloppés dans un
* conteneur `[data-address-autocomplete]` que le module `addressAutocomplete`
* branche sur la Base Adresse Nationale. La structure attendue est fixe —
* champ + `[data-address-suggestions]` + `[data-address-status]` — mais aucun
* identifiant n'est connu du module.
*
* Même principe pour l'e-mail et le téléphone : `data-format="email|phone"` sur
* le champ et un `[data-format-status]` frère suffisent au module `fieldFormat`
* à contrôler la saisie. Ce contrôle ne fait que PRÉVENIR : c'est
* App\Core\ContactFormat qui refuse pour de bon, côté serveur.
*/
?>
<section id="manage-agents-view" class="app-view page-content">
@@ -66,11 +77,13 @@
</label>
<label class="field">
<span>E-mail</span>
<input id="new-agent-email" name="email" type="email" maxlength="255" placeholder="prenom.nom@exemple.fr">
<input id="new-agent-email" name="email" type="email" maxlength="255" placeholder="prenom.nom@exemple.fr" data-format="email">
<p class="field-format-status" role="status" aria-live="polite" data-format-status></p>
</label>
<label class="field">
<span>Téléphone</span>
<input id="new-agent-phone" name="telephone" type="tel" maxlength="30" placeholder="Ex. 06 12 34 56 78">
<input id="new-agent-phone" name="telephone" type="tel" maxlength="30" placeholder="Ex. 06 12 34 56 78" data-format="phone">
<p class="field-format-status" role="status" aria-live="polite" data-format-status></p>
</label>
<label class="field">
<span>Qualification</span>
@@ -85,7 +98,11 @@
</label>
<label class="field admin-field-wide">
<span>Adresse personnelle</span>
<textarea id="new-agent-address" name="adresse" maxlength="255" rows="2" placeholder="Adresse de l’agent"></textarea>
<div class="address-autocomplete" data-address-autocomplete>
<textarea id="new-agent-address" name="adresse" maxlength="255" rows="2" placeholder="Ex. 12 rue de la Liberté, Dijon"></textarea>
<ul id="new-agent-address-suggestions" class="address-suggestions" role="listbox" aria-label="Adresses proposées" data-address-suggestions hidden></ul>
<p class="address-autocomplete-status" role="status" aria-live="polite" data-address-status></p>
</div>
</label>
<label class="field">
<span>Quotité de travail <strong>*</strong></span>
@@ -219,11 +236,13 @@
</label>
<label class="field">
<span>E-mail</span>
<input id="edit-agent-profile-email" type="email" maxlength="255">
<input id="edit-agent-profile-email" type="email" maxlength="255" placeholder="prenom.nom@exemple.fr" data-format="email">
<p class="field-format-status" role="status" aria-live="polite" data-format-status></p>
</label>
<label class="field">
<span>Téléphone</span>
<input id="edit-agent-profile-phone" type="tel" maxlength="30" placeholder="Ex. 06 12 34 56 78">
<input id="edit-agent-profile-phone" type="tel" maxlength="30" placeholder="Ex. 06 12 34 56 78" data-format="phone">
<p class="field-format-status" role="status" aria-live="polite" data-format-status></p>
</label>
<label class="field">
<span>Qualification</span>
@@ -238,7 +257,11 @@
</label>
<label class="field admin-field-wide">
<span>Adresse personnelle</span>
<textarea id="edit-agent-profile-address" maxlength="255" rows="3"></textarea>
<div class="address-autocomplete" data-address-autocomplete>
<textarea id="edit-agent-profile-address" maxlength="255" rows="3" placeholder="Ex. 12 rue de la Liberté, Dijon"></textarea>
<ul id="edit-agent-profile-address-suggestions" class="address-suggestions" role="listbox" aria-label="Adresses proposées" data-address-suggestions hidden></ul>
<p class="address-autocomplete-status" role="status" aria-live="polite" data-address-status></p>
</div>
</label>
<label class="field">
<span>Date de début du contrat <strong>*</strong></span>