feat #58 : wizard multi-étapes création/édition article #59
Reference in New Issue
Block a user
Delete Branch "feat/wizard-multi-step"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Résumé
Implémentation complète du ticket #58 — remplace le formulaire unique par un wizard multi-étapes.
Fichiers modifiés
src/ArticleManager.phppublic/.htaccesspublic/index.phppublic/assets/js/wizard.jstemplates/wizard/Plan de test
Closes #58
- ArticleManager::getSearchIndex() : rebuild automatique si un UUID référencé dans search_index.json n'existe plus sur le disque (article supprimé hors CMS via rsync ou suppression manuelle). Même logique que getBySlug() qui nettoie déjà le slug_index à la volée. - bootstrap.php : lire SESSION_NAME depuis $_ENV avant session_start(), permettant de personnaliser le nom du cookie de session via le .env. - oidc/{start,callback,me}.php : inverser l'ordre des require pour charger config.php (dotenv) avant bootstrap.php, condition nécessaire pour que SESSION_NAME soit disponible au démarrage de la session. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Contexte : sur abonnel.fr, session_start() était appelé sur chaque requête PHP (y compris bots), créant ~17 000 fichiers de session/jour dans un répertoire custom non nettoyé par le cron Debian. Les workers PHP-FPM grossissaient en mémoire et le pool saturait (1 188 erreurs 503 en 30 minutes). Changements : public/index.php - session_start() uniquement si le cookie de session existe déjà ou si la requête est POST. Les bots (GET sans cookie) ne créent plus de session. - CSRF commentaires migré de $_SESSION['comment_csrf'] vers un double- submit cookie (_csrf_c, SameSite=Strict, HttpOnly). La session n'est plus requise pour les visiteurs anonymes qui postent un commentaire. templates/comments_section.php - Génère le token CSRF et le pose en cookie (_csrf_c) au lieu de l'écrire en session. public/.htaccess - Règle Apache 410 Gone pour toute URL contenant un paramètre ?do= (anciens paramètres DokuWiki : do=media, do=export_pdf…). Traité par Apache en 2ms sans toucher PHP-FPM. public/oidc/{start,callback,me}.php - Correction du bug introduit par0b8077e: config.php (qui utilise BASE_PATH) était chargé avant bootstrap.php (qui définit BASE_PATH). Fix : define('BASE_PATH', …) ajouté avant le require config.php. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Remplace le formulaire unique par un wizard 5 étapes (création) et 6 étapes (édition) avec auto-sauvegarde en brouillon, détection de tags depuis le texte (TagSuggester), aperçu SEO, diff avant validation et plan Markdown dynamique dans l'éditeur. Détail des changements : - ArticleManager : +6 méthodes (updatePartialMeta, saveDraftOverlay, getDraftOverlay, hasDraftOverlay, discardDraftOverlay, commitDraftOverlay) - .htaccess : routes /new/{uuid}/{1-5} et /edit/{uuid}/{1-6} - index.php : cases create et edit réécrits en switch($step), nouveau case autosave_draft et edit_discard_draft - assets/js/wizard.js : autosave debounce, auto-resize textarea, scroll curseur, plan TOC dynamique, toggle pills tags - templates/wizard/ : nav.php + step1..6.php Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>