Files
xamxam/TODO.md

5.0 KiB

TODO

TFE Public Page — File Display

  • Replace <embed> with <iframe> for PDF display (better cross-browser support)
  • Exclude cover file_type from public files loop (covers are banners, not content)
  • Move App::boot() in Dispatcher to after direct-response matching (no session on media requests)

SMTP Relay — bad greeting fix

  • Fix $read() loop: use !== false so empty lines don't terminate early; check timed_out meta
  • Add SSL stream context (verify_peer=false) to stream_socket_client to avoid CA bundle failures
  • Improve "bad greeting" error: distinguish timeout vs garbage response in log message

Bug Fixes

  • Fix RateLimit::check() called statically in request-access.php — replaced with (new RateLimit(3, 600))->checkKey($rateLimitKey)

Dev / Debug Fixes

  • Fix serve recipe: show all PHP output (errors, logs) except static assets/connection noise
  • Fix STORAGE_ROOT — use local app/storage/ in dev (cli-server), /var/www/posterg/storage in prod
  • Create app/storage/covers/ and app/storage/theses/ with .gitkeep
  • Add gitignore rules for uploaded files in dev storage dirs
  • Fix error_log path in formulaire.php (was relative, now absolute)
  • Fix CSRF debug: log both tokens on mismatch
  • Fix undefined $redirect on success path in formulaire.php

Deploy — Preserve Remote Data

  • Exclude storage/posterg.db from rsync (not sent locally, not deleted remotely)
  • Exclude storage/theses/ from rsync (not sent locally, not deleted remotely)
  • Exclude storage/covers/ from rsync (not sent locally, not deleted remotely)

Deploy — Rename deploy path to /var/www/xamxam

  • Update rsync destination in justfile (deploy, deploy-db recipes)
  • Update all /var/www/posterg paths in scripts/deploy-server.sh
  • Update root directive in nginx/posterg.conf
  • Update STORAGE_ROOT production path in app/bootstrap.php

Form Help Blocks (student-facing explanatory text)

  • Migration 004_add_form_help_blocks.sqlform_help_blocks table with 8 seeded keys
  • Database methods: getFormHelpBlock, setFormHelpBlock, getAllFormHelpBlocks, FORM_HELP_KEYS, FORM_HELP_LABELS
  • actions/form-help.php — CSRF-validated save handler
  • actions/page.php — CSRF-validated save handler for static pages (was missing)
  • contenus.php controller — load $formHelpBlocks, add CSRF token
  • contenus-edit.php controller — handle ?form_block=<key> route
  • templates/admin/contenus.php — flash messages + form help blocks table with edit links
  • templates/admin/contenus-edit.phpform_help edit branch with OverType Markdown editor
  • templates/partials/form/form-help-block.php — renders Markdown block via Parsedown (safe mode), silent on empty
  • partage/index.php — load all blocks once, inject at all 8 positions (replaced TODO comments)
  • form.css.form-help-block styled with accent left-border
  • admin.css.muted utility class

Centralise Form Templates

  • Extract shared fieldset partials: fieldset-tfe-info.php, fieldset-academic.php, fieldset-files.php, fieldset-metadata.php, fieldset-licence-explanation.php
  • Refactor templates/admin/add.php to use shared partials
  • Refactor templates/admin/edit.php to use shared partials (with edit-mode callable adapters)
  • Refactor partage/index.php renderShareLinkForm() to use shared partials
  • Add TODO comments in partage/index.php for student-facing explanations (intro block, per-fieldset notes, email note)

File Display in Forms & Recaps

  • Add live file preview to file-field.php partial (data-preview attribute + .file-preview-list container)
  • Write file-preview.js — renders thumbnails for images, emoji icons for PDFs/videos/zips, filename + size
  • Load file-preview.js in admin/add.php via $extraJs
  • Load file-preview.js in admin/edit.php via $extraJs
  • Load file-preview.js in partage/index.php (self-contained HTML, direct <script> tag)
  • Support $extraJs in head.php
  • Add data-preview + preview container to edit template's cover/banner/files inputs (not using partial)
  • Enhance admin/recapitulatif.php template — image thumbnails, clickable filenames, type badges, file size, date
  • Rewrite partage/recapitulatif.php — full recap with thesis metadata + uploaded files list (thumbnails for images, icons for others)
  • Add CSS: .file-preview-list, .fp-item, .fp-thumb, .fp-icon, .fp-meta, .fp-name, .fp-size
  • Add CSS: .recap-file-list, .recap-file-item, .recap-file-thumb, .recap-file-icon, .recap-file-meta, .recap-file-type-badge, .recap-file-date
  • Add CSS: .partage-recap, .recap-section, .recap-dl for partage recap layout

Bug Fixes (2026-04-29)

  • Fix parse error in Database.php line 2005 — escaped apostrophe in d'introduction