Files
mesreleves-php/CHANGELOG.md
T
2026-06-05 07:17:51 +02:00

94 lines
7.7 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.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 (cause racine)** : lors d'un démarrage sur serveur vierge, `public/index.php` auto-crée un `.env` depuis `.env.example` (driver `pgsql`) et Laravel charge cet env via `putenv()` au niveau OS. Les sous-processus `exec()` héritent cet env ; `phpdotenv` en mode immutable refuse d'écraser une variable déjà présente dans l'env OS → le `.env` réécrit avec `DB_CONNECTION=mysql` par le wizard était ignoré par le subprocess de migration, qui tentait une connexion PostgreSQL. Correction : les migrations sont maintenant exécutées via `Artisan::call()` dans le processus courant, après reconfiguration explicite en mémoire (`config(['database.default' => ...]`) + `DB::purge()` — aucun héritage d'env parasite.
- **`.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** : un fichier `bootstrap/cache/config.php` résiduel (produit par `php artisan optimize` sur le poste de développement) était lu en priorité sur le `.env` réécrit par le wizard, forçant une connexion PostgreSQL même quand MySQL était sélectionné. Un appel à `config:clear` est maintenant effectué entre l'écriture du `.env` et l'exécution des migrations.
- **Archives de déploiement** : `bootstrap/cache/*.php` exclu du build rsync pour éviter qu'un cache de configuration de développement ne soit embarqué dans les distributables.
---
## [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`