Files
xamxam/TODO.md
Pontoporeia a83dc1c74e feat: multi-type file upload with sort order, labels, and expanded MIME support
- DB migration 007: add sort_order + display_label to thesis_files
- Database: getThesisFiles ordered by sort_order; insertThesisFile accepts label/order;
  new reorderThesisFiles() and updateThesisFileLabel() methods
- ThesisCreateController + ThesisEditController: expand allowed MIME/exts to include
  audio (mp3/ogg/wav/flac/aac/m4a), video (webm/mov/ogv), image (gif/webp),
  archives (tar/gz), any-ext via octet-stream; max size raised to 500 MB;
  accept file_labels[] and file_orders[] POST fields; detectFileType() helper
- MediaController: expanded MIME allowlist; HTTP Range support for audio/video;
  force-download for unknown types; inline for known displayable types
- fieldset-files.php: sortable queue UI with SortableJS, per-file labels, 500 MB hint
- templates/admin/edit.php: existing files as sortable list with drag handles,
  type icons, label inputs, delete checkboxes, hidden sort-order fields
- file-upload-queue.js: new JS replacing file-preview.js — sortable new-file queue,
  per-file labels, hidden order fields on submit, backward-compat legacy preview
- tfe.php: renders audio (<audio>), all video formats, images, PDF, and
  download-only 'other' files; reads display_label; sorted by sort_order
- tfe.css + form.css: styles for audio player, download files, sortable queue,
  drag handles, file type badges, label inputs
- .htaccess + .user.ini: upload_max_filesize=512M / post_max_size=520M
2026-05-05 11:04:52 +02:00

2.6 KiB

XAMXAM TODO

File Upload & Display System

  • DB migration 007 — add sort_order and display_label columns to thesis_files
  • Database.phpgetThesisFiles ordered by sort_order ASC; insertThesisFile accepts display_label + sort_order; new reorderThesisFiles() and updateThesisFileLabel() methods
  • ThesisCreateController — expand MIME/ext allowlist (audio: mp3/ogg/wav/flac/aac/m4a; video: webm/mov/ogv; image: gif/webp; archives: tar/gz; any-ext via octet-stream); raise max size to 500 MB; accept file_labels[] and file_orders[] POST fields; detectFileType() helper
  • ThesisEditController — same expansions; handle file_sort_order[], file_label[id] POST fields; reorder + label-update methods called; detectFileType() helper
  • MediaController — expanded MIME allowlist; HTTP Range support for audio/video seeking; force-download for "other" types; inline display for known displayable types
  • fieldset-files.php (shared partial) — replaced old multi-file input with sortable queue UI using SortableJS; per-file label inputs; wide accept attribute; 500 MB hint
  • templates/admin/edit.php — existing files rendered as sortable list with drag handles, file type icons, label inputs, delete checkboxes; hidden file_sort_order[] inputs; new-file queue widget
  • file-upload-queue.js — new JS: sortable queue for new uploads (SortableJS), per-file label fields, hidden order fields injected on submit; existing-file drag-sort; backward-compatible legacy preview for cover/banner inputs
  • tfe.php (public template) — handles audio (<audio>), video (all exts), image, PDF, "other" (download link); reads display_label; files already sorted by sort_order
  • tfe.css — styles for .tfe-audio, .tfe-download-file, .tfe-download-link
  • form.css — styles for .tfe-file-queue, .fq-item, .admin-file-list-item (sortable), drag handles, label inputs, ghost class
  • PHP upload limits.htaccess + .user.ini in public/ with upload_max_filesize=512M / post_max_size=520M
  • add.php / edit.php / partage/index.php — use sortable.min.js + file-upload-queue.js instead of file-preview.js

Previously completed

  • Multi-file upload for thesis files (basic)
  • File access restriction system (email approval workflow)
  • Share link system for student submission
  • Admin CRUD for theses
  • Public TFE detail page with file display
  • Search and repertoire
  • Tag management
  • Form help blocks
  • SMTP notification