From a21f3f2bb461d8affe6e42e18e4e10a1d682dd71 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Tue, 8 Sep 2026 00:23:06 +0200 Subject: [PATCH] Corrige les statuts et les codes internes --- CHANGELOG.md | 28 +++++++++++++++++-------- HISTORIQUE.md | 4 ++++ VERSION | 2 +- app/Controllers/AnimalRecordActions.php | 24 ++++++++++++++------- app/Views/animal_form.php | 2 +- app/Views/evolutions.php | 8 +++---- tests/run.php | 10 +++++++++ 7 files changed, 56 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 298dbcc..2063341 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ Toutes les modifications importantes du projet sont consignées ici. Le format s’inspire de [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/) et le projet suit le [versionnage sémantique](https://semver.org/lang/fr/). +## [1.0.0-rc.10] — 2026-09-08 + +### Correction des fiches animales + +- rétablissement de l’enregistrement du statut choisi dans le formulaire d’un animal ; +- translittération des lettres accentuées lors de la génération des nouveaux codes internes (`Gérard` devient `GERARD`) ; +- conservation du code interne existant lors de la modification d’une fiche ; +- ajout d’un contrôle automatisé sur le nom du champ transmis au serveur. + +## [1.0.0-rc.9] — 2026-09-08 + +### Troisième lot de tickets + +- ajout de liens publics facultatifs vers WhatsApp, LinkedIn, X et Snapchat, sans ressource chargée depuis un service tiers (`#7`) ; +- clarification de la conservation de l’historique lors de la désactivation d’une salle (`#11`) ; +- distinction explicite entre les frais d’adoption et le catalogue des coûts vétérinaires (`#14`) ; +- rappel du routeur requis par le serveur PHP local pour rendre la recherche universelle disponible (`#19`) ; +- vérification des correctifs déjà livrés pour le lien du pied de page et l’ajout d’espèces aux références biologiques (`#8`, `#15`). + ## [1.0.0-rc.8] — 2026-09-07 ### Deuxième lot de tickets @@ -95,12 +114,3 @@ Toutes les modifications importantes du projet sont consignées ici. Le format s [1.0.0]: https://nnsprod.com/git/oversu/Globinours [0.1.0]: https://nnsprod.com/git/oversu/Globinours -## [1.0.0-rc.9] — 2026-09-08 - -### Troisième lot de tickets - -- ajout de liens publics facultatifs vers WhatsApp, LinkedIn, X et Snapchat, sans ressource chargée depuis un service tiers (`#7`) ; -- clarification de la conservation de l’historique lors de la désactivation d’une salle (`#11`) ; -- distinction explicite entre les frais d’adoption et le catalogue des coûts vétérinaires (`#14`) ; -- rappel du routeur requis par le serveur PHP local pour rendre la recherche universelle disponible (`#19`) ; -- vérification des correctifs déjà livrés pour le lien du pied de page et l’ajout d’espèces aux références biologiques (`#8`, `#15`). diff --git a/HISTORIQUE.md b/HISTORIQUE.md index 99e6be8..07ab5b7 100644 --- a/HISTORIQUE.md +++ b/HISTORIQUE.md @@ -45,3 +45,7 @@ Clarification du diagnostic système et de la santé des sauvegardes, validation ## `1.0.0-rc.9` — Troisième lot de tickets Extension des liens sociaux du site public, clarification des salles et des tarifs, et documentation du routage nécessaire à la recherche locale. + +## `1.0.0-rc.10` — Statuts des animaux + +Correction du champ de statut du formulaire animal, stabilisation des codes internes et translittération des noms accentués. diff --git a/VERSION b/VERSION index 99ebec6..82f25cf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.0-rc.9 +1.0.0-rc.10 diff --git a/app/Controllers/AnimalRecordActions.php b/app/Controllers/AnimalRecordActions.php index 450360c..0de05ca 100644 --- a/app/Controllers/AnimalRecordActions.php +++ b/app/Controllers/AnimalRecordActions.php @@ -282,12 +282,7 @@ trait AnimalRecordActions { $year = date('Y'); - $base = strtoupper(trim($name)); - $base = preg_replace('/[^A-Z0-9]+/u', '_', $base); - $base = trim($base, '_'); - if ($base === '') { - $base = 'ANIMAL'; - } + $base = str_replace('-', '_', Ids::slugifyUpper($name)); $db = DB::pdo(); $stmt = $db->prepare(' @@ -516,7 +511,22 @@ trait AnimalRecordActions // Génère le code interne lorsqu'il est absent. $internal_code = trim((string) ($_POST['internal_code'] ?? '')); - if ($internal_code === '') { + if ($internal_code === '' && $old && !empty($old['internal_code'])) { + $internal_code = (string) $old['internal_code']; + if (preg_match('/^(\d{4}-\d{3})-(.+)$/', $internal_code, $parts)) { + $legacyBase = strtoupper(trim($name)); + $legacyBase = trim((string) preg_replace('/[^A-Z0-9]+/u', '_', $legacyBase), '_'); + $normalizedBase = str_replace('-', '_', Ids::slugifyUpper($name)); + if ($parts[2] === $legacyBase && $legacyBase !== $normalizedBase) { + $candidate = $parts[1] . '-' . $normalizedBase; + $duplicate = $db->prepare('SELECT 1 FROM animals WHERE internal_code=:code AND id<>:id'); + $duplicate->execute([':code' => $candidate, ':id' => $id]); + if (!$duplicate->fetchColumn()) { + $internal_code = $candidate; + } + } + } + } elseif ($internal_code === '') { $internal_code = self::nextInternalCode($name); } diff --git a/app/Views/animal_form.php b/app/Views/animal_form.php index 26a9353..bf0d4f8 100644 --- a/app/Views/animal_form.php +++ b/app/Views/animal_form.php @@ -122,7 +122,7 @@ $estMonths = $birth_estimated_months > 0 ? ($birth_estimated_months % 12) : '';