Files
folio/CHANGELOG.md
cedricAbonnel 16965ee8cb feat : DATA_PATH configurable, DataGit auto-commit, UpdateChecker branche (v1.4.0)
- DATA_PATH : chemin /data hors document root, configurable via .env
  (fallback sur BASE_PATH/data si absent)
- DataGit : auto-commit git sur toutes les écritures articles/livres
  (create, update, delete, meta, tags, fichiers, liens…) sauf autosave
- UpdateChecker : getBranch() / getLastChecked() / clearCache(),
  branche configurable via FOLIO_UPDATE_BRANCH (plus de main hardcodé)
- Admin dashboard : affiche la branche suivie, date du dernier contrôle,
  bouton Vérifier pour forcer le check sans attendre le TTL
- CLAUDE.md : architecture DATA_PATH et flux de déploiement documentés

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 09:17:55 +02:00

125 lines
5.9 KiB
Markdown

# Changelog
Toutes les modifications notables sont documentées ici.
Format : [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) — versionnage [semver](https://semver.org/lang/fr/).
---
## [Unreleased]
---
## [1.4.0] - 2026-05-15
### Ajouté
- **`DATA_PATH`** : chemin des articles configurable via `.env`, indépendant du document root — permet de stocker `/data` hors de l'arborescence web (ex. `/srv/data/folio`)
- **`DataGit`** : auto-commit git sur toutes les écritures articles et livres (création, modification, suppression, métadonnées, tags, fichiers, liens…) sauf `autosave` — no-op silencieux si `DATA_PATH` n'est pas un dépôt git
- **Admin — Moteur Folio** : affiche la branche suivie pour les mises à jour (`FOLIO_UPDATE_BRANCH`, défaut `main`), la date du dernier contrôle, et un bouton **Vérifier** pour forcer la vérification sans attendre le TTL du cache (1 h)
### Modifié
- `UpdateChecker` : branche cible configurable via `FOLIO_UPDATE_BRANCH` (plus de `main` hardcodé dans l'URL Gitea)
---
## [1.3.0] - 2026-05-15
### Ajouté
- Onglet **Statistiques** dans l'admin : pages les plus visitées, livres consultés, répartition par AS (#64)
- `AccessLogParser` : lecture des logs Apache (plain, `.gz`, `.tar.gz`), cache 10 min
- `AsnLookup` : résolution ASN via ip-api.com (batch, cache 30 j), détection LAN automatique
- Filtrage des AS par groupes configurables (motifs case-insensitive, formulaire admin)
- Pattern de log configurable via l'UI (onglet Recherches) avec support glob
### Corrigé
- Permissions rsync : `--chmod=Fug+rw,Fo-w` assure la lisibilité groupe sur les fichiers déployés
- `saveSiteSettings()` et `saveSmtpSettings()` : retournent un `bool` et affichent une erreur si l'écriture échoue
- `scripts/setup.sh` : script d'initialisation Folio (composer, répertoires, droits, migrations, groupe `adm`)
---
## [1.2.2] - 2026-05-14
### Corrigé
- URL introuvable : redirige vers la page de recherche (`/search?q=…`) au lieu du premier résultat (#61)
---
## [1.2.1] - 2026-05-14
### Corrigé
- Cache article invalidé si `index.md` est plus récent que `meta.json` (migration de contenu ne se reflétait pas)
- Migration 001 : `touch(meta.json)` après écriture de `index.md` pour invalider le cache
- `post_view.php` : le `# Titre` Markdown est retiré du rendu (déjà affiché par le template)
- Wizard étape 1 : en-tête affiche « Modifier » sans répéter le titre de l'article
- `wizard.js` : suppression de `scrollToCursor` (calcul erroné sur textarea auto-resize) ; Ctrl+Home / Ctrl+End scrollent correctement via `scrollIntoView`
---
## [1.2.0] - 2026-05-14
### Ajouté
- Wizard multi-étapes pour la création (5 écrans) et l'édition (6 écrans) d'articles (#58)
- Auto-sauvegarde en brouillon (debounce 3 s) avec indicateur visible
- Étape tags : champ plat avec détection automatique depuis le texte (abréviations, CamelCase, noms propres)
- Étape SEO : aperçu moteur de recherche en temps réel
- Étape 6 (édition) : diff ligne à ligne avant confirmation
- Plan Markdown dynamique (TOC) dans la colonne droite de l'éditeur
- Titre extrait du premier `# …` du contenu Markdown (plus de champ titre séparé)
- Système de migrations de contenu (`scripts/migrate_content.php`)
- Mode maintenance automatique (`data/.maintenance` → page HTTP 503)
- Migration `001` : ajout du titre Markdown dans les articles existants
- Bouton "Mettre à jour" dans l'administration (sans accès CLI)
- `UpdateChecker` : détection de mise à jour et migrations en attente
- Bandeau d'alerte pour les administrateurs sur toutes les pages
- Dashboard `/admin` : version déployée vs version disponible
### Modifié
- `ArticleManager` : +6 méthodes pour les brouillons overlay
- `lineDiff` : normalisation `\r\n``\n`, seuil relevé à 2 000 000, fallback ligne par ligne
- `push.sh` : génère `public/version.txt` (numéro de version semver) à chaque release
### Corrigé
- Diff étape 6 "violent" (tout supprimé/ajouté) dû aux fins de ligne `\r\n` du navigateur
---
## [1.1.0] - 2026-05-13
### Ajouté
- **Réactions visiteurs** : boutons 👍 / 🔥 / 🤔 sous chaque article, toggle async avec fallback formulaire natif
- **Commentaires avec vérification email** : code 6 chiffres, honeypot + CSRF, modération dans `/admin`
- **URLs propres** : `/edit/<u>`, `/new`, `/admin`, `/categorie/<cat>`, `/files/<u>/add`, `/import/<u>`, etc.
- **Moteur de recherche** : index trigramme+substring pré-construit, résultats scorés avec mise en évidence
### Amélioré
- **Cache multi-niveaux** : chargement réduit de ~5 s à ~0,4 s sur 1 000+ articles (mémoïsation, cache disque, slug index O(1))
- **Upload fichiers** : détection et message d'erreur explicite pour les fichiers > limite PHP
### Corrigé
- Métadonnées fichiers (`addFileMeta`) : guard `file_exists()` trop strict supprimé
- Sidebar droite article : classe Bootstrap `flex-nowrap-lg``flex-lg-nowrap`
- Flux RSS : exclusion catégories privées, redirection 301 `/rss``/feed`
---
## [1.0.0] - 2026-05-09
### Ajouté
- Moteur de blog PHP Folio — première release versionnée
- Articles en Markdown avec fichiers attachés, liens externes, images de couverture
- Authentification par lien magique envoyé par email (#29)
- SSO via Keycloak/OIDC avec PKCE
- Rôles, capacités et gestion des utilisateurs
- Catégories avec swatches couleur générées algorithmiquement
- Tags par type avec suggestions
- SEO : canonical, `sitemap.xml`, `robots.txt`, JSON-LD, `og:image`
- Avant-premières (articles futurs visibles aux utilisateurs autorisés)
- Pagination curseur (sans offset SQL)
- Import depuis URL (EXIF, OpenGraph, PDF)
- Historique des révisions avec diff
- Flux RSS (`/feed`) paginé avec autodiscovery
- Formulaire de contact (CSRF, honeypot, rate-limit)
- Pages légales (LCEN/RGPD), licences, à propos
- Migrations SQL versionnées (`database/migrate.php`)
- Système de déploiement par rsync