Files
2026-06-05 20:15:49 +02:00

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 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 <button> et non sur le <li> parent partagé avec le formulaire
  • Saisie de date dans un relevé — double soumission : x-show masque 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 :disabled lié à 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 automatiquement Source $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> sans position: relative n'avait pas de contexte d'empilement ; ajout de relative z-40
  • RelevePolicy — signatures incompatibles : create et viewAny recevaient (User, Source) via le Gate (class string) mais étaient définies sans le paramètre Source, ou avec un paramètre Releve inopportun ; 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:generate remplace APP_KEY=<clé_en_mémoire> par regex dans le .env. Mais writeEnv() écrit APP_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 .env sans regex, puis propagée en mémoire (config(['app.key'])) et dans l'env OS (putenv).
  • Assistant d'installation — MissingAppKeyException lors de l'optimisation : optimize appelle en interne config:cache, qui re-boostrappe une seconde instance de l'application depuis bootstrap/app.php. Ce second boot passe par tous les ServiceProviders et peut résoudre l'Encrypter avant que la clé soit accessible, levant MissingAppKeyException et renvoyant une erreur 500. Correction : optimize est supprimé de la procédure d'installation ; seul optimize:clear est 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 variables DB_* mais pas pour APP_KEY. Correction : tous les putenv() (dont APP_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 (phpdotenv immutable + héritage putenv par les sous-processus exec()). Les migrations sont migrées vers Artisan::call() avec reconfiguration en mémoire (config() + DB::purge()), mais key:generate et optimize restaient des sous-processus — corrigé complètement en 1.0.4.
  • .htaccess — suppression des directives php_flag display_errors on ajouté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:clear entre l'écriture du .env et l'exécution des migrations, et exclusion de bootstrap/cache/*.php des archives de déploiement pour ne pas embarquer un cache de configuration de développement.
  • Archives de déploiement : bootstrap/cache/*.php exclu 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 .env minimal (clé temporaire, drivers fichier) à la première requête si aucun .env n'existe, évitant l'erreur 500 sur un serveur vierge
  • .htaccess — ajout de FallbackResource /index.php en fallback pour les hébergements sans mod_rewrite
  • Logo dans la navigation — contraint par max-height inline 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 base couvrant tous les <input>, <select>, <textarea>
  • Composant lieu-picker entièrement sans style en mode sombre
  • Erreur 500 à l'ouverture de /setup sur 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