7c6e72760b
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
11 KiB
11 KiB
Changelog
Toutes les modifications notables de MesRelevés sont documentées dans ce fichier.
Format : Keep a Changelog — versionnage Semver.
[1.0.5] — 2026-06-05
Ajouté
- Type de champ « place » (Lieu) dans les relevés — permet de sélectionner un lieu existant dans la hiérarchie lors de la saisie d'un relevé ; la valeur est stockée en JSONB
{id, nom_long}et correctement exportée en CSV - Export CSV des relevés d'une source — disponible depuis la fiche source ; colonnes générées dynamiquement à partir des champs du type de source ; valeurs de dates et lieux converties en texte lisible
- Import CSV des relevés d'une source — depuis la fiche source ; détection automatique du séparateur (
;/,) ; correspondance des colonnes par libellé (tolérant casse et accents) ; parsing des dates en grégorien ou calendrier nommé, des lieux par nom long - Import/export CSV des lieux — depuis la liste des lieux ; export UTF-8 BOM (compatible Excel) avec colonnes
nom, code, type, lieu_parent, latitude, longitude, note; import avec résolution du parent parnom_longet du type par nom - Connexion avec email ou nom d'utilisateur — le champ de connexion accepte indifféremment l'adresse e-mail ou le nom d'utilisateur
Modifié
- Carte Leaflet — passage au bundle Vite/npm — la bibliothèque Leaflet est désormais packagée localement (suppression de la dépendance au CDN externe) pour un fonctionnement sur serveurs sans accès internet
- Suppression de l'export GEDCOM — la fonctionnalité d'export au format GEDCOM 5.5.1 a été retirée
- Traductions françaises des vues d'authentification — formulaires de connexion, inscription et mot de passe oublié entièrement traduits (
lang/fr.json)
Corrigé
- Tableau de bord admin — erreur MySQL
ONLY_FULL_GROUP_BY: la requête d'activité mensuelle sélectionnaitDATE_FORMAT(created_at, ...)sans l'inclure dans leGROUP BY; corrigé en agrégeant avecMIN(created_at)et en groupant parYEAR() / MONTH() - Compatibilité MySQL —
NULLS LASTetwithCount/select:NULLS LASTn'est pas supporté en MySQL ; ajout deDbCompat::nullsLast()générant la syntaxe portable ; correction de l'ordre des clauseswithCount/selectpour MySQL strict - Bouton « Modifier » d'un champ de type de source : le formulaire inline Alpine.js ne s'ouvrait pas car
x-dataétait positionné sur le<button>et non sur le<li>parent partagé avec le formulaire - Saisie de date dans un relevé — double soumission :
x-showmasque visuellement les éléments mais ne les retire pas du DOM ; les deux inputs (grégorien et républicain) étaient soumis simultanément ; l'attribut:disabledlié à l'état Alpine résout le problème - Affichage / modification / suppression d'un relevé — erreur 500 : les routes
->shallow()suppriment{source}de l'URL pour les actions individuelles sur les relevés ; Laravel ne peut pas binder automatiquementSource $source— corrigé en chargeant la source depuis$releve->source - Menus de navigation masqués derrière la carte Leaflet : Leaflet utilise des z-index internes jusqu'à 800 ; la balise
<nav>sansposition: relativen'avait pas de contexte d'empilement ; ajout derelative z-40 RelevePolicy— signatures incompatibles :createetviewAnyrecevaient(User, Source)via le Gate (class string) mais étaient définies sans le paramètre Source, ou avec un paramètreReleveinopportun ; signatures harmonisées avec les conventions d'appel du Gate
[1.0.4] — 2026-06-05
Corrigé
- Assistant d'installation — APP_KEY vide après installation :
key:generateremplaceAPP_KEY=<clé_en_mémoire>par regex dans le.env. MaiswriteEnv()écritAPP_KEY=(vide) alors que la clé en mémoire est celle de l'auto-création (clé temporaire) — le pattern ne matche pas, la clé reste vide. Correction : la clé est générée directement en PHP (random_bytes), écrite dans le.envsans regex, puis propagée en mémoire (config(['app.key'])) et dans l'env OS (putenv). - Assistant d'installation —
MissingAppKeyExceptionlors de l'optimisation :optimizeappelle en interneconfig:cache, qui re-boostrappe une seconde instance de l'application depuisbootstrap/app.php. Ce second boot passe par tous les ServiceProviders et peut résoudre l'Encrypter avant que la clé soit accessible, levantMissingAppKeyExceptionet renvoyant une erreur 500. Correction :optimizeest supprimé de la procédure d'installation ; seuloptimize:clearest conservé pour purger tout cache résiduel. Laravel reconstruit ses caches paresseusement à la première requête. - Assistant d'installation — connexion PostgreSQL forcée après login (MySQL) :
putenv()n'était appelé que pour les variablesDB_*mais pas pourAPP_KEY. Correction : tous lesputenv()(dontAPP_KEY) sont regroupés en un bloc cohérent, garantissant que tout sous-processus futur hérite des valeurs correctes.
[1.0.3] — 2026-06-04
Ajouté
- Numéro de version dans l'assistant d'installation — affiché sous le titre « Assistant d'installation » dans le layout du wizard (lu depuis le fichier
VERSION)
Corrigé
- Assistant d'installation — conflit pgsql/mysql (correctif partiel, voir 1.0.4) : identification de la cause racine (
phpdotenvimmutable + héritageputenvpar les sous-processusexec()). Les migrations sont migrées versArtisan::call()avec reconfiguration en mémoire (config()+DB::purge()), maiskey:generateetoptimizerestaient des sous-processus — corrigé complètement en 1.0.4. .htaccess— suppression des directivesphp_flag display_errors onajoutées temporairement pour déboguer l'erreur 500 sur hébergement mutualisé.
[1.0.2] — 2026-06-04
Corrigé
- Assistant d'installation — conflit de connexion pgsql/mysql (correctif partiel, voir 1.0.3 et 1.0.4) : ajout d'un appel à
config:clearentre l'écriture du.envet l'exécution des migrations, et exclusion debootstrap/cache/*.phpdes archives de déploiement pour ne pas embarquer un cache de configuration de développement. - Archives de déploiement :
bootstrap/cache/*.phpexclu du build rsync.
[1.0.1] — 2026-06-04
Ajouté
- Page Carte — carte interactive (Leaflet + OpenStreetMap) affichant les lieux géolocalisés ayant des relevés ; marqueurs proportionnels au nombre de sources, popups avec détail des sources et lien vers la recherche ; compatible mode sombre
- Mode sombre — détection automatique de la préférence système ; sélecteur clair / sombre / automatique dans la barre de navigation (mémorisé dans
localStorage, sans flash au chargement) ; couverture complète des vues et composants - 2FA par e-mail — code PIN à 6 chiffres envoyé à la connexion dès qu'un serveur SMTP est configuré ; code valable 10 minutes, renvoi possible
- Configuration SMTP depuis l'interface — formulaire dans Administration → Paramètres du site avec test de connexion en temps réel ; activation du 2FA automatique à l'enregistrement
- Import / export CSV utilisateurs — import en masse avec détection automatique du séparateur (
;/,), validation par ligne, génération de mot de passe aléatoire ; export filtré au format CSV UTF-8 BOM (compatible Excel) - Filtre actif / inactif sur la liste des utilisateurs
- Titre du site configurable depuis les paramètres (sans éditer
.env) - Version affichée dans Administration → Paramètres du site avec indicateur de mise à jour disponible
- Option de désactivation des mises à jour automatiques dans les paramètres
- Sélecteur d'utilisateur avec recherche — fenêtre modale remplaçant les
<select>pour l'ajout de membres aux sections et sources (adapté à plusieurs centaines d'utilisateurs) public/servercheck.php— outil de diagnostic serveur autonome (PHP, extensions, répertoires, test BDD) pour les environnements de test
Modifié
- Assistant d'installation — auto-création du
.envminimal (clé temporaire, drivers fichier) à la première requête si aucun.envn'existe, évitant l'erreur 500 sur un serveur vierge .htaccess— ajout deFallbackResource /index.phpen fallback pour les hébergements sansmod_rewrite- Logo dans la navigation — contraint par
max-heightinline pour s'adapter à la hauteur de la barre sans débordement - Panneau "Paramètres généraux" remonté en première position dans la page de paramètres
- README — procédure d'installation mutualisée (PHP + MySQL) mise en avant ; procédure Docker corrigée (stack réelle : PHP-FPM + Nginx + PostgreSQL, sans Redis)
Corrigé
- Champs de formulaire illisibles en mode sombre (texte clair sur fond clair) — règle CSS globale
@layer basecouvrant tous les<input>,<select>,<textarea> - Composant
lieu-pickerentièrement sans style en mode sombre - Erreur 500 à l'ouverture de
/setupsur un serveur sans.env(MissingAppKeyException) - Menu Administration débordant hors de la zone visible en haut de l'écran
[1.0.0] — 2026-05-29
Ajouté
- Scaffold Laravel 12 + PostgreSQL + authentification Breeze
- Modèle de données complet : lieux (hiérarchie récursive), sections, dépôts, types de sources, sources, relevés (JSONB), utilisateurs et rôles
- CRUD Lieux avec arbre hiérarchique et calcul automatique de
nom_long - CRUD Sections, Dépôts, Types de sources (admin)
- CRUD Sources avec assignation de membres et workflow de statut (
à_faire → en_cours → à_valider → terminé) - Formulaire de saisie dynamique des relevés piloté par
source_type_fields - Calendriers grégorien, julien et républicain avec conversion automatique
- Recherche plein texte sur les relevés avec filtres (type, lieu, plage d'années)
- Export GEDCOM 5.5.1 par source ou par sélection de recherche
- Notifications in-app et par e-mail lors des transitions de statut
- Interface d'administration : tableau de bord, gestion utilisateurs (actifs/inactifs), sections, types de lieux
- Comptes actifs / inactifs avec statistiques de section dans le tableau de bord
- Logo du site, favicon et contrôle des inscriptions publiques
- Assistant d'installation web en 5 étapes (
/setup) - Système de versioning et de mise à jour automatique (
app:update,app:rollback) - Compatibilité MySQL / MariaDB en plus de PostgreSQL
- Déploiement Docker (PHP-FPM + Nginx + PostgreSQL) via
docker-compose.prod.yml