# Changelog — varlog ## [Unreleased] — 2026-05-12 ### Fonctionnalités - **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/` | - **Moteur de recherche** : index trigram+substring pré-construit (`search_index.json`, reconstruit à chaque écriture), accessible depuis la navbar. ### Corrections - **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.