mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-08-10 07:11:18 +02:00
Docs: ajouter nombre de commits par groupe fonctionnel dans livraisons mensuelles
This commit is contained in:
+286
-208
@@ -2,324 +2,402 @@
|
||||
|
||||
## Janvier 2026 (8 commits)
|
||||
|
||||
### Structure initiale
|
||||
### Formulaire & soumission · 5
|
||||
- Schéma SQLite : tables theses, auteurs, formats, langues, tags, fichiers
|
||||
- Système de gestion des thèses avec migrations
|
||||
- Formulaire admin : création + édition TFE
|
||||
- Formulaire étudiant via liens de partage (share links)
|
||||
|
||||
### Structure & architecture · 3
|
||||
- Monorepo : organisation en dossiers (formulaire, templates, src, admin)
|
||||
- Justfile, .gitignore, documentation (READMEs)
|
||||
- Justfile, .gitignore, READMEs
|
||||
- Nginx config + déploiement fonctionnel
|
||||
- Système de recherche sécurisé
|
||||
|
||||
---
|
||||
|
||||
## Février 2026 (29 commits)
|
||||
|
||||
### Formulaire & soumission
|
||||
- Formulaire admin (ajout/édition TFE)
|
||||
- Formulaire étudiant via liens de partage (share links)
|
||||
- Structure formulaire : champs obligatoires, validation
|
||||
- Uploads de fichiers (stockage, affichage)
|
||||
### Répertoire & recherche · 9
|
||||
- Moteur de recherche (par nom, année, orientation, AP, mot-clé)
|
||||
- Cards en grille sur la page d'accueil (3×4 responsive)
|
||||
- Footer avec années horizontales, scrollable
|
||||
- Filtres combinables, header de recherche compact
|
||||
|
||||
### Visibilité & accès
|
||||
- Système à 3 niveaux : Libre / Interne / Interdit
|
||||
- Protection par mot de passe des fichiers « Interne »
|
||||
- Authentification admin (login / session PHP)
|
||||
|
||||
### Pages statiques (début CMS)
|
||||
- Pages éditables : À propos (Markdown → HTML)
|
||||
- Templates header/footer, mise en page responsive
|
||||
- Cards en grille sur la page d'accueil
|
||||
|
||||
### Admin
|
||||
- Index admin : liste des TFE, pagination, stats
|
||||
- Export / import CSV
|
||||
### Admin & gestion des données · 7
|
||||
- Export / import CSV des TFE
|
||||
- Index admin : liste, pagination, stats
|
||||
- Navigation admin dynamique
|
||||
- CSS admin : composants réutilisables
|
||||
- CSS admin : composants réutilisables, styles standardisés
|
||||
|
||||
### Sécurité
|
||||
- Auth guard pour le panneau admin
|
||||
- Correction des failles HIGH et LOW (TODO.SECURITY.md)
|
||||
### Formulaire & soumission · 5
|
||||
- Uploads de fichiers (stockage, affichage)
|
||||
- Structure formulaire : champs obligatoires, validation
|
||||
- Extraction buildSearchConditions partagé admin/public
|
||||
|
||||
### Sécurité · 3
|
||||
- Auth guard PHP pour le panneau admin (CRITICAL)
|
||||
- Correction failles HIGH et LOW (TODO.SECURITY.md)
|
||||
|
||||
### Autre · 5
|
||||
- Renommage memoire.php → tfe.php
|
||||
- CSS fixup, serveur dev avec live-reload
|
||||
- Analyse de dépendances (TODO.md)
|
||||
|
||||
---
|
||||
|
||||
## Mars 2026 (74 commits)
|
||||
|
||||
### Contrôleurs & architecture
|
||||
- ThesisCreateController, ThesisEditController : extraction depuis add.php/edit.php (530 lignes → contrôleurs dédiés)
|
||||
- TfeController, SearchController, HomeController : extraction depuis les pages publiques
|
||||
- SystemController : unifie status + logs en un onglet système
|
||||
- App.php : classe fondation + flash messages unifiés
|
||||
|
||||
### Répertoire & recherche
|
||||
- Répertoire en 6 colonnes : années, orientations, AP, mots-clés, noms, compte
|
||||
- Filtres combinables (AP + mot-clé + orientation simultanément)
|
||||
- Filtres HTMX sans rechargement de page, URL partageable
|
||||
- Tri matched-first dans les colonnes de filtre
|
||||
- Popover étudiant·e (pré-rendu serveur, lazy load)
|
||||
|
||||
### Page TFE publique
|
||||
- Layout complet : auteur > titre > meta + synopsis > fichiers > jury
|
||||
- Jury interne / externe affiché séparément
|
||||
- Liens hypertextes vers le répertoire sur les métadonnées
|
||||
- Open Graph / Twitter Card meta tags
|
||||
|
||||
### Base de données
|
||||
- Migrations : superviseurs multi-rôles, tags renommés depuis keywords
|
||||
- Vues SQL (v_theses_full, v_smtp_active)
|
||||
- WAL mode pour SQLite
|
||||
- Index composites (is_published, year) pour la perf
|
||||
- Auto-migration au démarrage du serveur
|
||||
|
||||
### Sémantique HTML & accessibilité
|
||||
- Refactor sémantique complet de toutes les pages publiques
|
||||
- Head partagé, nav sémantique, aria-current, skip links
|
||||
### Accessibilité & sémantique HTML · 15
|
||||
- Refactor sémantique complet de toutes les pages publiques et admin
|
||||
- ARIA : nav aria-label, search role=search, aria-current, skip links
|
||||
- Status badges non dépendants de la couleur (WCAG 1.4.1)
|
||||
- Autofocus premier champ invalide (WCAG 3.3.1)
|
||||
- Sous-titres WebVTT pour vidéos (WCAG 4.1.2)
|
||||
- Cibles tactiles 44×44px (WCAG 2.5.5)
|
||||
- Open Graph / Twitter Card meta tags, meta description
|
||||
- Head partagé public, favicon
|
||||
|
||||
### CSS & design
|
||||
- Suppression de tous les assets externes (self-hosting)
|
||||
- Polices : Combined (titres) → Ductus, corps en BBBDMSans
|
||||
- Variables de couleur standardisées
|
||||
- Dark mode prefers-color-scheme
|
||||
- Header plus dense, recherche pleine largeur
|
||||
- Remplacement EasyMDE (333KB) → OverType (118KB)
|
||||
- Cache-busting par filemtime
|
||||
### Architecture code · 16
|
||||
- ThesisCreateController, ThesisEditController : extraction depuis add.php/edit.php (530 lignes → contrôleurs dédiés)
|
||||
- TfeController, SearchController, HomeController : extraction depuis les pages publiques
|
||||
- SystemController : unifie status + logs en onglet système
|
||||
- App.php : classe fondation + flash messages unifiés
|
||||
- Partials de formulaire réutilisables (jury-fieldset, etc.)
|
||||
- Nettoyage code mort, suppression alias Database
|
||||
|
||||
### Admin
|
||||
### Répertoire & recherche · 15
|
||||
- Répertoire en 6 colonnes : années, orientations, AP, mots-clés, noms, compte
|
||||
- Filtres HTMX sans rechargement, URL partageable
|
||||
- Tri matched-first dans les colonnes de filtre
|
||||
- Popover étudiant·e (pré-rendu serveur, lazy load)
|
||||
- Page TFE publique : layout auteur > titre > meta+synopsis 2-col > fichiers > jury
|
||||
- Liens hypertextes vers le répertoire sur les métadonnées
|
||||
|
||||
### Admin & gestion des données · 8
|
||||
- Pagination serveur (25/page)
|
||||
- Tri des colonnes dans l'index
|
||||
- Merge status + logs → system.php avec onglets fetch()
|
||||
- Paramètres : maintenance + compte
|
||||
- Paramètres admin : maintenance + compte
|
||||
- Dialogue d'import CSV inline
|
||||
- Gestion des fichiers dans l'édition TFE (couverture, TFE, etc.)
|
||||
|
||||
### Formulaire
|
||||
- Partials de champs de formulaire réutilisables (fieldset-academic, fieldset-metadata, etc.)
|
||||
- Jury fieldset partagé add/edit
|
||||
- Aide contextuelle Markdown dans le formulaire
|
||||
### Formulaire & soumission · 6
|
||||
- Jury : interne/externe, président·e, promoteurices, lecteurices
|
||||
- Mode étudiant simulé dans l'admin (?mode=student)
|
||||
- Aide contextuelle Markdown dans le formulaire
|
||||
|
||||
### Email & SMTP
|
||||
### Email / SMTP · 7
|
||||
- SmtpRelay : client SMTP natif (socket), AUTH PLAIN, TLS
|
||||
- Test SMTP, vérification des credentials à la sauvegarde
|
||||
- Champs from_name, notify_email
|
||||
- Email de notification admin après soumission
|
||||
|
||||
### Ops
|
||||
### Base de données · 5
|
||||
- Migrations : superviseurs multi-rôles, tags renommés depuis keywords
|
||||
- Vues SQL (v_theses_full, v_smtp_active)
|
||||
- WAL mode pour SQLite
|
||||
- Index composites (is_published, year)
|
||||
- Auto-migration au démarrage du serveur
|
||||
|
||||
### CSS & design · 3
|
||||
- Suppression de tous les assets externes (self-hosting)
|
||||
- Polices : Combined → Ductus (titres), BBBDMSans (corps)
|
||||
- Variables de couleur standardisées, dark mode
|
||||
|
||||
### Ops · 5
|
||||
- Déploiement : scripts unifiés, justfile
|
||||
- Renommage Posterg → XAMXAM (code, nginx, docs)
|
||||
- Rate limiting sur les endpoints partage
|
||||
- Exclusion du fichier DB et des uploads du rsync
|
||||
|
||||
### Autre · 4
|
||||
- Analyse architecture PHP vs Flask, recommandations refactoring
|
||||
- flake.nix pour shell de dev Nix
|
||||
- Instructions DEV.md pour macOS
|
||||
|
||||
---
|
||||
|
||||
## Avril 2026 (207 commits)
|
||||
|
||||
### Uploads & fichiers
|
||||
### Répertoire & recherche · 28
|
||||
- Répertoire 6 colonnes : fixed headers, colonnes différenciées, scroll contenu
|
||||
- Alignement baseline, padding minimal, police conforme maquette
|
||||
- AP entre crochets (ex: Design et Politique du Multiple [DPM])
|
||||
- Résultats : cartes sans couverture → gradient placeholder
|
||||
- Popover étudiant·e : lazy via HTMX, Cache-Control
|
||||
- Split search.php / repertoire.php (index seul)
|
||||
- HTMX filter colonnes : contrôle scroll, swap sans perte d'état
|
||||
|
||||
### Admin & gestion des données · 34
|
||||
- Tags admin : search, rename inline, merge bulk, delete
|
||||
- Langues admin : search, rename, merge, delete, dédoublonnage
|
||||
- Sidebar TOC (IntersectionObserver), lazy load HTMX
|
||||
- Bulk actions : merge, delete, export (CSV + fichiers ZIP)
|
||||
- Colonnes triables (Auteur, Accès)
|
||||
- Dialogue <dialog> remplace alert/confirm navigateur
|
||||
- Toasts repositionnés, durée plus longue
|
||||
- Export DB → paramètres, bouton Mots-clés retiré
|
||||
- Checkboxes auto-save admin en HTMX
|
||||
- Import CSV : AP aliases, OUI/NON sanitization
|
||||
- Index : sticky thead, colspan stats, barre de sélection bulk
|
||||
|
||||
### Formulaire & soumission · 45
|
||||
- Partials de champs unifiés : text-field, select-field, checkbox-list, file-field
|
||||
- Jury : promoteurices multiples avec ajout/suppression dynamique
|
||||
- Jury ULB conditionnel (finalité Approfondi)
|
||||
- Annexes : checkbox + fichier conditionnel dans Fichiers
|
||||
- Contact visible / contact interne découplés
|
||||
- Formulaire partage : rate limiting, flash messages, StudentEmail
|
||||
- CC4r → CC2r renommé
|
||||
- Fragments HTMX partagés admin / partage : formats+fichiers, licence, langue-autre
|
||||
- Fragments conditionnels selon formats cochés
|
||||
- Aide contextuelle Markdown via HTMX
|
||||
- Identifiant TFE régénéré automatiquement au changement d'année
|
||||
- Récapitulatif exhaustif admin + étudiant (tous les champs)
|
||||
- Mode étudiant simulé dans l'admin
|
||||
|
||||
### Uploads & fichiers · 25
|
||||
- **FilePond** remplace les queues custom (495 lignes de JS supprimées)
|
||||
- Architecture upload asynchrone : process / revert / load / remove
|
||||
- Pool unique TFE (tous formats : PDF, vidéo, audio)
|
||||
- Barre de progression d'upload
|
||||
- Intégration **PeerTube** : upload API, OAuth2, embed iframe
|
||||
- Vidéos/audio auto-upload vers PeerTube quand activé
|
||||
- Chiffrement credentials PeerTube + SMTP (AES-256-GCM)
|
||||
|
||||
### Fragments HTMX
|
||||
- Fragments partagés admin / partage : formats + fichiers, licence, langue-autre
|
||||
- Fragments conditionnels selon les formats cochés (Site web → URL, Vidéo → upload ou PeerTube)
|
||||
- Aide contextuelle Markdown via HTMX
|
||||
- Fragments admin wrappés avec auth guard
|
||||
|
||||
### Formulaire
|
||||
- Partials de champs unifiés : text-field, select-field, checkbox-list
|
||||
- Jury : promoteurices multiples avec ajout/suppression dynamique
|
||||
- Jury ULB conditionnel (finalité Approfondi)
|
||||
- Annexes : checkbox + fichier conditionnel
|
||||
- Contact visible / contact interne découplés
|
||||
- CC4r → CC2r renommé
|
||||
- Identifiant TFE régénéré automatiquement au changement d'année
|
||||
- Validation inline des fichiers (MIME, taille) via HTMX
|
||||
- Contraintes : 100 MB PDF, 500 MB autres, bentopdf.com
|
||||
- Bannières mergées dans covers (suppression banner_path)
|
||||
- FilePond dans partage (endpoints, auth session)
|
||||
- Prévisualisation des fichiers existants dans FilePond
|
||||
|
||||
### Pages statiques CMS
|
||||
### PeerTube · 8
|
||||
- Intégration API PeerTube : upload vidéo/audio, OAuth2
|
||||
- Feature flag (désactivé par défaut, en attente de quota)
|
||||
- Embed iframe dans tfe.php
|
||||
- Gestion des fichiers vidéo/audio → PeerTube OU upload direct
|
||||
|
||||
### Pages statiques / CMS · 10
|
||||
- À propos, Charte, Licence : Markdown → HTML, édition admin
|
||||
- TOC sticky dans la sidebar
|
||||
- Contenus-edit : OverType, auto-save, liens sidebar dynamiques
|
||||
- Contacts admin : grille 3 colonnes, ajout/suppression
|
||||
- Contenus-edit : remplacement EasyMDE → OverType (333→118KB)
|
||||
- Aide formulaire : blocs d'aide éditables en admin
|
||||
|
||||
### Accessibilité
|
||||
- aria-errormessage, aria-invalid, aria-describedby sur tout le formulaire
|
||||
- Cibles tactiles 44×44px minimum (WCAG 2.5.5)
|
||||
- Formulaire responsive mobile (colonnes empilées)
|
||||
|
||||
### Gestion des données
|
||||
- Mots-clés : recherche, rename, merge, delete dans l'admin
|
||||
- Langues : recherche, rename, merge bulk, dédoublonnage
|
||||
- Tri des colonnes Auteur et Accès dans l'index admin
|
||||
- Liens de partage : nom éditable, expiration, dialogue d'édition
|
||||
|
||||
### Sécurité
|
||||
- Obfuscation des emails en entités HTML (EmailObfuscator)
|
||||
- Content-Security-Policy, HSTS, SameSite cookies, COOP/CORP
|
||||
- Script de scan passif de sécurité
|
||||
- Rate limiting, flash messages sur partage
|
||||
- Corrections non-constant-time (hash_equals)
|
||||
|
||||
### CSS & refactoring
|
||||
### CSS & design · 21
|
||||
- Architecture CSS en couches : reset → colors → typography → base → components
|
||||
- Suppression de toutes les classes BEM au profit de sélecteurs sémantiques
|
||||
- Suppression de toutes les classes BEM → sélecteurs sémantiques
|
||||
- Tokens de design unifiés (couleurs, typographie, espacement)
|
||||
- Échelle fluide utopia pour typographie et espacement
|
||||
- Suppression du dark mode, unification des thèmes
|
||||
- Extraction de tous les styles inline vers CSS
|
||||
- Polices : Ductus (display), BBBDMSans (body), @font-face corrigé
|
||||
- Header plus haut, texte plus grand, text-shadow violet
|
||||
- Cache-busting par filemtime
|
||||
|
||||
### Logs & monitoring
|
||||
- Logging structuré pour les soumissions admin/partage
|
||||
- AdminLogger : JSON-lines
|
||||
### Accessibilité · 10
|
||||
- ARIA complet sur le formulaire : aria-errormessage, aria-invalid, aria-describedby
|
||||
- WCAG 2.5.5 : cibles tactiles 44×44px
|
||||
- Formulaire responsive mobile (colonnes empilées à 600px)
|
||||
- Sémantique HTML admin : dl stats, section cards, th scope, landmarks
|
||||
|
||||
### Ops & déploiement
|
||||
### Sécurité · 9
|
||||
- Obfuscation des emails en entités HTML (EmailObfuscator)
|
||||
- Content-Security-Policy (admin + public), HSTS, SameSite cookies
|
||||
- COOP / CORP headers
|
||||
- Rate limiting, flash messages partage
|
||||
- Chiffrement credentials PeerTube + SMTP (AES-256-GCM)
|
||||
|
||||
### Architecture code · 18
|
||||
- Extraction des contrôleurs (create, edit, search, TFE, system)
|
||||
- Partials de formulaire réutilisables, fragments HTMX partagés
|
||||
- Dispatcher + front controller (index.php)
|
||||
- Configuration externalisée (config/apropos.php → SQLite)
|
||||
- Nettoyage code mort, suppression Parsedown, déduplication
|
||||
- Tests unitaires + intégration (Phase 0–4 PHPUnit)
|
||||
- Linting : PHPStan, PHP-CS-Fixer, Biome
|
||||
|
||||
### Email / SMTP · 5
|
||||
- SmtpRelay : TLS peer verification, envelope injection fix, dot-stuffing
|
||||
- SMTP test button, credentials probe on save (connect+auth+quit)
|
||||
- notify_email, email de notification remanié
|
||||
|
||||
### Ops & déploiement · 15
|
||||
- Déploiement automatisé (justfile) : code, dépendances, migrations
|
||||
- Vérification des permissions post-déploiement
|
||||
- Backups SQLite cron (horaire + quotidien)
|
||||
- Merge de toutes les migrations dans schema.sql
|
||||
- Renommage Posterg → XAMXAM complet
|
||||
- Exclusion DB/fichiers/backups/logs du rsync
|
||||
- Maintenance.flag, rate limit cache, .env permissions
|
||||
- Script de scan passif de sécurité (pentest)
|
||||
- Scripts de migration, merge schema.sql
|
||||
|
||||
### Architecture code
|
||||
- Extraction des contrôleurs (create, edit, search, TFE, system)
|
||||
- Partials de formulaire réutilisables
|
||||
- Dispatcher + front controller (index.php)
|
||||
- Configuration externalisée (config/apropos.php → SQLite)
|
||||
### Logs · 5
|
||||
- AdminLogger : JSON-lines
|
||||
- Logging structuré pour les soumissions admin/partage
|
||||
- Log viewer dans system.php avec tail
|
||||
- Exclusion des logs du git et du déploiement
|
||||
|
||||
---
|
||||
|
||||
## Mai 2026 (156 commits)
|
||||
|
||||
### FilePond — corrections & hardening
|
||||
- Correction crash « can't access property main, n.status is undefined »
|
||||
- Tailles de fichiers en bytes (plus de confusion toInt('1GB') = 1)
|
||||
- Fichiers temporaires survivent au rechargement de page (session-track)
|
||||
### FilePond & uploads · 30
|
||||
- Correction crash « can't access property main, n.status is undefined » (triple root cause)
|
||||
- Tailles en bytes (plus de confusion toInt('1GB') = 1)
|
||||
- Fichiers temporaires survivent au rechargement (session-track)
|
||||
- Guard no-JS : filepond_mode désactivé par défaut, fallback serveur
|
||||
- Relink fichiers orphelins (file browser + intégration FilePond)
|
||||
- Relink fichiers orphelins : file browser + intégration FilePond
|
||||
- Trash policy : suppression → tmp/_trash avec traçabilité DB
|
||||
- Storage prefix : theses/ → documents/
|
||||
- Nettoyage modal : fichiers orphelins listés, suppression
|
||||
- Recap admin : suppressions figures, fichiers en table
|
||||
- FilePond CSV import (storeAsFile, no async)
|
||||
- Tous les inputs fichiers → FilePond standardisés
|
||||
- Prévisualisation existante dans FilePond en mode édition
|
||||
|
||||
### Autosave & brouillons
|
||||
### Formulaire & soumission · 42
|
||||
- Brouillon automatique formulaire partage (HTMX POST/GET session)
|
||||
- Auto-save admin checkboxes avec toasts de feedback
|
||||
- Nettoyage périodique des brouillons orphelins (cron)
|
||||
- Contenus-edit : auto-save avec debounce, toolbar OverType
|
||||
- Autosave contenus-edit avec debounce, toolbar OverType
|
||||
- Thesis status column (two-phase commit lifecycle)
|
||||
- FormBootstrap : DRY entre add/edit
|
||||
- Extraction partage chrome → form-page.php partagé
|
||||
- Split form.css → form-base.css + form-admin.css
|
||||
- Fragments admin/partage séparés (auth + shared templates)
|
||||
- Licence : Libre→CC2r+licence, Interne→opt-in, Interdit→none
|
||||
- Corrections formulaire : identifiant/année, contact, fichiers optionnels
|
||||
- Author name casing (COLLATE NOCASE, idHint lookup)
|
||||
- Contact visible / interne découplage complet (v2)
|
||||
- is_published reset fix, note contextuelle label
|
||||
- Promoteurice array repopulation, migration 028 fix
|
||||
- Export fichiers ZIP avec LINK.txt (URLs PeerTube)
|
||||
- Jury fieldset : old() avec signature corrigée pour partage
|
||||
|
||||
### Build & assets
|
||||
- **Biome** : linting + formatting CSS/JS
|
||||
- **Rolldown** : bundling JS par entrée
|
||||
- **LightningCSS** : résolution @import, minification CSS
|
||||
- Pipeline build orchestré (build.mjs)
|
||||
- Dev-watch avec chokidar-cli (reconstruction ~200ms)
|
||||
- dist/ pour les assets minifiés, .gitignore
|
||||
|
||||
### Gzip & extraction JS
|
||||
- Gzip activé dans nginx
|
||||
- ~730 lignes de JS inline → 15 fichiers externes
|
||||
- Modules : admin-logs, clipboard, pill-search, access-request
|
||||
|
||||
### Tests
|
||||
### Tests & QA · 15
|
||||
- PHPUnit setup : 228 tests, couverture 21,27%
|
||||
- Tests unitaires : Crypto, EmailObfuscator, SystemController, StudentEmail, TfeController
|
||||
- Tests intégration : Database, ShareLink, RateLimit
|
||||
- Tests validation : ThesisCreate, ThesisEdit, AutofocusField
|
||||
- PHPStan + PHP-CS-Fixer + Biome pour le linting
|
||||
- Lint-php recipe unifié
|
||||
- Correction test failures + duplicate detection bug
|
||||
|
||||
### Dépendances & modernisation
|
||||
### Dépendances & modernisation · 8
|
||||
- Composer.json avec autoloader
|
||||
- Parsedown → league/commonmark
|
||||
- Client HTTP custom → Guzzle
|
||||
- SMTP socket → PHPMailer
|
||||
- Code coverage configuration (phpunit.xml)
|
||||
|
||||
### Logging
|
||||
### Logging · 6
|
||||
- **Monolog** : 4 canaux PSR-3 (app, admin, error, audit)
|
||||
- Rotation 30 jours, format JSON préservé
|
||||
- Remplace 4 systèmes de log distincts
|
||||
- Remplace 4 systèmes de log distincts (AdminLogger, AppLogger, ErrorHandler, Audit)
|
||||
- LOG_LEVEL par variable d'environnement
|
||||
- Log viewer : JSON parsé en one-liners lisibles, fallback tail PHP
|
||||
|
||||
### CSS — refactor architecture
|
||||
### CSS — refactor architecture · 10
|
||||
- Split en couches nommées (reset, colors, typography, base, components, utilities)
|
||||
- Un fichier par composant (links, focus, forms, tables, dialog, etc.)
|
||||
- Un fichier par composant (links, focus, forms, tables, dialog, media, buttons, badges, toasts, pagination, header, search)
|
||||
- Compatibilité backward (variables.css, common.css wrappers)
|
||||
- Corrections vs refactoring initial : modern-normalize base, !important search, toast feedback
|
||||
- Unnest header.css, suppression doublons status-badge/toast
|
||||
|
||||
### UI / UX
|
||||
- SVG icons inline via helper PHP (icon()) — plus aucun <img> pour les icônes
|
||||
- Build pipeline CSS/JS
|
||||
- Dev-watch avec reconstruction live
|
||||
- Scroll-position memory sur swaps HTMX (répertoire)
|
||||
- Transition + swap fluide sur le répertoire
|
||||
- Correctifs sécurité (open redirect, CSRF partage, gate session)
|
||||
### Search & filtres · 6
|
||||
- Recherche publique : un seul grand input, icône loupe positionnée
|
||||
- Filtres finalité + format, boutons plus compacts, Réinitialiser neutre
|
||||
- Filtres actifs dans l'index admin (htmx triggers input/change)
|
||||
|
||||
### Divers
|
||||
- Recap admin : sections → fieldsets, fichiers en table
|
||||
- FormBootstrap : DRY entre add/edit
|
||||
- Colonne thesis_status (two-phase commit lifecycle)
|
||||
### Admin · 12
|
||||
- Contenus : Mots-clés + Langues fieldset, sticky thead, max-height scroll
|
||||
- Export : bulk CSV + fichiers, DB export → Paramètres
|
||||
- Dialogue import : bouton Terminé, succès permanent, padding
|
||||
- Sortable columns Auteur/Accès
|
||||
- Sticky thead sur index, langues, mots-clés tables
|
||||
- Rename Liens étudiant·e → ajout nom + dialogue d'édition
|
||||
- Recapitulatif admin : sections → fieldsets, pas de thumbnails
|
||||
|
||||
### Divers · 27
|
||||
- Déploiement : split deploy-code/deploy-deps/deploy-migrate, lockfile checksum
|
||||
- Export fichiers ZIP avec LINK.txt (URLs PeerTube)
|
||||
- Correctifs : identifier year-prefix mismatch, author name casing, contact découplage v2
|
||||
- CSV import : AP aliases, OUI/NON sanitization
|
||||
- Rate limits relevés (30→300/min sur certains endpoints)
|
||||
- Migration runner : .php migrations, idempotent (no such column)
|
||||
- Backups SQLite cron, trigger-backup, test-restore
|
||||
- Production fixes : client_max_body_size 256M, bars.svg 404, nginx rate limit 300r/m
|
||||
- Merge SMTP fields → single fieldset "Emails"
|
||||
- CSV import : AP aliases, boolean fix, jury roles
|
||||
- Migration 033 deduplicate format_types, 025 fix lowercase collision
|
||||
- PeerTube : embed audio player height, fix curl_close, fix upload (multipart POST)
|
||||
- Standardisation : .btn, multi-auteur, sticky save/cancel
|
||||
- Avant/après unload dialog fix, bookmark.md draggable
|
||||
- Sécurité : pentest script PEP 723, CSP headers, session cookie params
|
||||
|
||||
---
|
||||
|
||||
## Juin 2026 (82 commits)
|
||||
|
||||
### Icônes SVG
|
||||
### Icônes SVG · 8
|
||||
- Migration complète <img> → SVG inline via icon() helper PHP
|
||||
- 26 templates modifiés
|
||||
- 12 icônes SVG corrigées (fill="#000000" → fill="currentColor")
|
||||
- Icône recherche remplacée (Phosphor fill-based magnifying glass)
|
||||
- 26 templates modifiés, 12 icônes corrigées (fill→currentColor)
|
||||
- Icône recherche remplacée (Phosphor fill-based)
|
||||
- Nettoyage modal : SVG icons, padding/margin, BBBDMSans
|
||||
|
||||
### Pages statiques & TOC
|
||||
- Refonte À propos / Charte / Licence : layout partagé en grille
|
||||
### Pages statiques & TOC · 7
|
||||
- Refonte À propos / Charte / Licence : layout partagé en grille .page-content
|
||||
- TOC sticky → details/summary responsive (collapsible sur mobile)
|
||||
- Ancres de titres stables (CommonMark HeadingPermalinkExtension)
|
||||
- Styles liens standardisés
|
||||
- Styles liens standardisés, fix heading anchor links
|
||||
- Apropos : contacts flexibles, sidebar éditables, grille contacts admin
|
||||
- Content-page.css remplace apropos.css (partagé 3 pages)
|
||||
|
||||
### Répertoire — polissage UX
|
||||
### Répertoire · 14
|
||||
- Accordéon mobile pour les colonnes de filtre (≤640px)
|
||||
- Toggle, chevron, badge compteur de filtres actifs
|
||||
- Tri des colonnes : matched first, puis unmatched, puis alphabétique
|
||||
- Tri des colonnes : matched first, puis unmatched, alphabetique
|
||||
- Mots-clés : résultats viables en haut
|
||||
- Suppression de la chip bar mobile
|
||||
- Correction re-init accordéon après swap HTMX (bug DOM détaché)
|
||||
- Scroll colonnes répertoire : min-height: 0, overflow-y: auto
|
||||
- Scroll colonnes : min-height: 0, overflow-y: auto
|
||||
- Scroll-position memory sur swaps HTMX
|
||||
- Transition opacité fluide sur #repertoire-index
|
||||
- CSS répertoire : colonnes proportionnelles, scrollbars discrètes, fontes maquette
|
||||
- Fix word-break dans les en-têtes de colonnes
|
||||
|
||||
### Formulaire — accessibilité & robustesse
|
||||
- aria-errormessage, aria-invalid, aria-describedby sur tous les champs
|
||||
- Layout mobile responsive (champs empilés, 44×44px touch targets)
|
||||
- Autosave brouillon formulaire partage (session persistence)
|
||||
- Guard no-JS (filepond_mode désactivé par défaut)
|
||||
### Formulaire · 22
|
||||
- **Accessibilité** : aria-errormessage, aria-invalid, aria-describedby sur tout le formulaire
|
||||
- Layout mobile responsive (600px) : champs empilés, touch targets 44×44px
|
||||
- Autosave brouillon partage (fragment endpoint POST/GET, session persistence)
|
||||
- Guard no-JS uploads (filepond_mode disabled par défaut, fallback serveur)
|
||||
- Preserve fichiers temporaires FilePond après redirection validation
|
||||
- FormBootstrap extraction
|
||||
- Thesis status column (two-phase commit)
|
||||
- FormAdmin CSS séparé
|
||||
|
||||
### Uploads & fichiers
|
||||
- PHP upload limits → 8GB (vidéos)
|
||||
- Nettoyage dialog : suppression doublons, hx-confirm sur delete
|
||||
- Type hint adminOld corrigé (string → string|array)
|
||||
### Durée TFE · 4
|
||||
- Colonnes DB (duration_hours, duration_minutes, duration_seconds)
|
||||
- Champs formulaire : h:m:s au lieu de minutes/sec/heures
|
||||
- Affichage public : format XhYm
|
||||
- Migration + contrôleurs + vues
|
||||
|
||||
### Build & performance
|
||||
- Pipeline build CSS/JS (biome + rolldown + lightningcss)
|
||||
- Dev-watch chokidar-cli
|
||||
- Gzip nginx + extraction JS inline (730 lignes → 15 fichiers)
|
||||
- Biome lint fixes (CSS duplicate properties, JS arrow functions)
|
||||
|
||||
### Contenus & CMS
|
||||
- Auto-save avec OverType toolbar sur contenus-edit
|
||||
- Liens sidebar dynamiques (site ERG, code source)
|
||||
- Markdown cheatsheet : rendu réel dans la colonne d'exemple
|
||||
- Page Charte ajoutée (publique + admin)
|
||||
|
||||
### TFE — métadonnées
|
||||
- Durée : colonnes DB, champs formulaire, affichage XhYm
|
||||
### TFE — corrections métadonnées · 8
|
||||
- Finalité master affichée sur la page publique
|
||||
- Identifiant régénéré si mismatch année
|
||||
- Identifiant régénéré si mismatch année (préfixe 4 chiffres)
|
||||
- Author name casing corrigé (COLLATE NOCASE, idHint lookup)
|
||||
- Suppression vidéos PeerTube lors de la suppression d'un TFE
|
||||
- CC2r + licence affichés sur tfe.php, formatage contact court
|
||||
- Meta+synopsis en grille 2 colonnes, underline retiré, inclusive writing
|
||||
|
||||
### Sécurité
|
||||
### Build & performance · 12
|
||||
- **Pipeline build** : biome (lint/format) + rolldown (JS bundles) + lightningcss (CSS bundles/minify)
|
||||
- Gzip activé dans nginx
|
||||
- ~730 lignes de JS inline → 15 fichiers externes
|
||||
- Dev-watch avec chokidar-cli (reconstruction ~200ms)
|
||||
- dist/ pour les assets minifiés
|
||||
- .gitignore vendor/ path, storage/tmp/filepond/
|
||||
|
||||
### Sécurité · 8
|
||||
- Open redirect fix : rejet des URLs protocol-relative (//evil.com)
|
||||
- CSRF sur retry-email POST
|
||||
- Gate partage fragments sur session share_active
|
||||
- CSRF sur retry-email POST, gate partage fragments sur share_active session
|
||||
- Suppression App::verifyCsrf() mort
|
||||
- PHP upload limits → 8GB pour vidéos (8192M)
|
||||
- Biome lint fixes (duplicate CSS, arrow functions)
|
||||
|
||||
### Divers
|
||||
### Cleanup & divers · 7
|
||||
- Nettoyage dialog : suppression doublons, hx-confirm sur delete
|
||||
- Correctif logs capturés, debug console.log retiré
|
||||
- Type hint adminOld corrigé (string → string|array)
|
||||
- Index SQLite pour requêtes langues/tags (contenus page)
|
||||
- Correctif logs capturés
|
||||
- Nettoyage .gitignore, vendor/
|
||||
- Cleanup dialog
|
||||
- TFE page : CC2r + licence, formatage contact court
|
||||
- Recherche : filtres finalité + format, bouton Réinitialiser neutre
|
||||
- TODO à jour, tasks sécurité complétées
|
||||
|
||||
Reference in New Issue
Block a user