diff --git a/CHANGELOG.md b/CHANGELOG.md index 05b761d..4e03725 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,42 +1,91 @@ -# Changelog +# Changelog — varlog -Toutes les modifications notables sont documentées ici. -Format : [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) +## [Unreleased] — 2026-05-12 -## [Unreleased] +### Fonctionnalités -### Fixed -- Permissions du fichier `.env` corrigées (`chown cedrix:www-data`) pour que PHP-FPM (`www-data`) puisse le lire (erreur 500) -- PHPStan : namespaces manquants `\PDOException` et `\InvalidArgumentException` dans `UserRepository` (#1) -- PHPStan : `UserRepository` instancié sans argument PDO dans `AuthService::changePassword()` (#2) -- PHPStan : `MailQueue` et `MailService` injectent désormais un `PDO` directement au lieu d'appeler `Database::getConnection()` inexistante (#3) -- PHPStan : bootstrap `phpstan-bootstrap.php` ajouté pour définir `BASE_PATH` lors de l'analyse statique (#4) -- PHPStan : comparaison `200 > 0` toujours vraie supprimée dans `MailService` ; `addScope()` reçoit désormais un array dans `auth.php` (#5) +- **URLs propres** : toutes les routes internes migrent vers des chemins lisibles. + Les anciennes URLs `/?action=…` restent fonctionnelles (compatibilité). + | Ancienne URL | Nouvelle URL | + |---|---| + | `/?action=edit&uuid=` | `/edit/` | + | `/?action=sources&uuid=` | `/sources/` | + | `/?action=diff&uuid=&rev=` | `/diff//` | + | `/?action=create` | `/new` | + | `/?action=admin[&tab=]` | `/admin[/]` | + | `/?action=categories` | `/categories` | + | `/?action=profile` | `/profile` | + | `/?action=about\|legal\|licenses\|contact` | `/about`, `/legal`… | + | `/?action=regen_thumbs` | `/admin/regen-thumbs` | + | `/?action=add_files&uuid=` | `/files//add` | + | `/?action=import_image&uuid=` | `/import/` | + | `/?cat=` | `/categorie/` | + | `/?cursor=` | `/page/` | -### Removed -- Méthode privée inutilisée `UserRepository::nullIfEmpty()` (#1) -- Chargement de la police Inter depuis `fonts.googleapis.com` remplacé par un auto-hébergement local (#7) -- Tags `` vers Google Fonts supprimés du layout (#7) +- **Moteur de recherche** : index trigram+substring pré-construit (`search_index.json`, + reconstruit à chaque écriture), accessible depuis la navbar. -### Added -- Police Inter auto-hébergée dans `public/assets/fonts/` (woff2, latin + latin-ext, OFL-1.1) (#7) -- Favicon SVG `public/assets/favicon.svg` aux couleurs du site (#8) -- Page `/route.php?action=licenses` listant les licences des composants tiers (Bootstrap, PHPMailer, Inter, Claude Code…) -- Moteur renommé **Folio** (MIT) — `LICENSE` et `public/LICENSE` ajoutés, `composer.json` mis à jour +### Corrections -### Added -- Initialisation du dépôt git sur le serveur -- Réorganisation des dossiers (`includes/` → `src/` et `templates/`, `docs/`, `database/`) -- Scripts de déploiement (`sync.sh`, `commit.sh`, `deploy.sh`, `sync-server-config.sh`) -- Copie locale des configs serveur Apache et PHP-FPM +- **Métadonnées fichiers (sources)** : `addFileMeta()` ne sauvegardait pas l'auteur et + l'URL source en raison d'un guard `file_exists()` trop strict — supprimé. +- **Authentification OIDC** (`State invalide.`) : `session_start()` était appelé avant + `bootstrap.php` dans les fichiers OIDC, écrasant les paramètres de cookie + (`SameSite=Lax`, `Secure`, `HttpOnly`) — corrigé dans `start.php`, `callback.php` + et `me.php`. +- **Sidebar droite de l'article** : classe Bootstrap `flex-nowrap-lg` inexistante, + remplacée par `flex-lg-nowrap` — la sidebar ne tombe plus en bas de page. +- **Date d'affichage en liste** : `created_at` affiché à la place de `published_at` + — corrigé avec fallback approprié. +- **Formulaire d'édition** : "Fichiers existants" déplacé dans la colonne de droite ; + attribution auteur/source étendue à tous les types de fichiers (pas seulement images). +- **Historique des révisions** : plus de révision créée si le contenu et le titre + sont inchangés. Ajout des boutons de suppression par révision et suppression globale. +- **Canonical URL catégorie** : passe de `/?cat=…` à `/categorie/…`. + +### Chore + +- `data/` retiré du suivi git et ajouté au `.gitignore` (le contenu du blog + n'a pas vocation à être versionné avec le moteur). --- - +## 2026-05-09 + +### Fonctionnalités + +- **SEO** : balises canonical, `sitemap.xml`, `robots.txt`, JSON-LD (`BlogPosting` / + `WebSite`), `noindex` sur les pages d'administration. +- **Recherche** : page de résultats avec score de pertinence, mise en évidence des + termes, lien vers la catégorie depuis les résultats. +- **Support HEIC/HEIF** : conversion automatique en JPEG à l'upload. +- **Support SVG** : upload autorisé, servi avec Content-Type correct. +- **Avant-première** : article visible en liste mais verrouillé avant sa date de + publication. +- **Pagination curseur** : navigation par UUID de dernier article vu, sans offset SQL. +- **Layout article 3 colonnes** : sidebar gauche (catégorie), contenu central, + sidebar droite (pièces jointes, liens externes, articles liés). +- **Import depuis URL** : téléchargement de fichiers distants avec extraction + automatique des métadonnées (EXIF, OpenGraph, PDF). +- **Gestion des pièces jointes** dans le formulaire d'édition, avec attribution + auteur/source affichée dans la vue article. + +### Corrections + +- Login intégré dans `layout.php`, chemins CSS en absolu. +- Redéclaration de `url()` dans `config.php` — fatal error corrigée. +- Correction permissions `www-data` sur `data/`. + +--- + +## 2026-04 et antérieur + +- Flux RSS paginé (`/feed`, `/rss`, `/rss.xml`) avec autodiscovery. +- Stockage des articles en fichiers Markdown (migration depuis base de données). +- SSO via Keycloak/OIDC avec PKCE. +- Images de couverture (liste, vue article, `og:image`). +- Brouillons visibles uniquement par l'auteur. +- Formulaire de contact (CSRF, honeypot, rate-limit). +- Pages : mentions légales (LCEN/RGPD), licences, à propos. +- Auto-hébergement Bootstrap 5, police Inter, favicon SVG. +- Headers HTTP de sécurité, CSP stricte.