# Changelog Toutes les modifications notables de MesRelevés sont documentées dans ce fichier. Format : [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) — versionnage [Semver](https://semver.org/lang/fr/). --- ## [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 par `nom_long` et 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électionnait `DATE_FORMAT(created_at, ...)` sans l'inclure dans le `GROUP BY` ; corrigé en agrégeant avec `MIN(created_at)` et en groupant par `YEAR() / MONTH()` - **Compatibilité MySQL — `NULLS LAST` et `withCount/select`** : `NULLS LAST` n'est pas supporté en MySQL ; ajout de `DbCompat::nullsLast()` générant la syntaxe portable ; correction de l'ordre des clauses `withCount` / `select` pour 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 `