7c6e72760b
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
122 lines
11 KiB
Markdown
122 lines
11 KiB
Markdown
# 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 `<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`
|