fix: scoped HTMX file validation, add validation to TFE/PeerTube inputs

- Wrap file-field.php validation in <form> to scope hx-include (fixes
  cross-field contamination where cover change triggered note_intention
  validation)
- Add inline MIME/size validation to upload-tfe-file.php
- Add inline validation to PeerTube video/audio and direct video/audio
  file inputs in format-extras-block
- Fallback in validate-file-fragment-shared.php: if field_name doesn't
  match any $_FILES key, try the first uploaded file (handles
  PeerTube inputs where name differs from field_name)
- Fix file-field.php admin_mode using $adminMode variable instead of
  undefined ADMIN_MODE constant
This commit is contained in:
Pontoporeia
2026-05-10 16:32:43 +02:00
parent ca7707cd47
commit 98ed83fac2
3 changed files with 28 additions and 20 deletions

19
TODO.md
View File

@@ -1,16 +1,7 @@
# TODO # TODO
- [x] Simplify file-upload-queue.js — drop Sortable, keep only single-file previews - [x] Fix cross-field validation contamination — wrap file-field.php in <form> to scope hx-include
- [x] Create session-based upload flow (upload-tfe-file.php, remove-tfe-file.php, tfe-queue-helper.php) - [x] Add inline MIME/size validation to upload-tfe-file.php
- [x] Create admin wrappers for upload/remove endpoints - [x] Add inline validation wrappers to PeerTube video/audio and direct video/audio inputs
- [x] Register new routes in partage/index.php - [x] Fix validator fallback: if field_name key missing in $_FILES, try first available file
- [x] Update fichiers-fragment.php — HTMX-powered file input + server-rendered queue + progress bar - [x] Fix file-field.php admin_mode using $adminMode variable instead of undefined ADMIN_MODE constant
- [x] Update ThesisCreateController — read TFE files from session temp
- [x] Update ThesisEditController — read TFE files from session temp
- [x] Add handleTfeFilesFromSession + writeTfeFileFromSrc + cleanupSessionUploads to ThesisFileHandler trait
- [x] Remove sortable.min.js script tags from add.php, edit.php, index.php
- [x] Clean up form.php — remove drag handles, sortable hints
- [x] Clean up fieldset-files.php — remove sortable references
- [x] Clean up CSS — remove .fq-drag-handle, .fq-ghost, .sortable-ghost
- [x] Fix closure syntax (use before return type) in tfe-queue-helper.php
- [x] Commit

View File

@@ -1,16 +1,20 @@
# PHP upload limits for large thesis files (PDFs, video, audio) # PHP upload limits for large thesis files (PDFs, video, audio)
# TFE files are uploaded incrementally via HTMX (one at a time).
# PeerTube/direct video/audio uploads + couverture + note_intention
# are submitted in the final form POST — post_max_size must accommodate
# the largest combination.
<IfModule mod_php.c> <IfModule mod_php.c>
php_value upload_max_filesize 512M php_value upload_max_filesize 512M
php_value post_max_size 520M php_value post_max_size 1024M
php_value memory_limit 256M php_value memory_limit 512M
php_value max_execution_time 300 php_value max_execution_time 600
</IfModule> </IfModule>
# mod_php8 variant # mod_php8 variant
<IfModule mod_php8.c> <IfModule mod_php8.c>
php_value upload_max_filesize 512M php_value upload_max_filesize 512M
php_value post_max_size 520M php_value post_max_size 1024M
php_value memory_limit 256M php_value memory_limit 512M
php_value max_execution_time 300 php_value max_execution_time 600
</IfModule> </IfModule>
# Prevent directory listing # Prevent directory listing

View File

@@ -233,6 +233,19 @@
+%%%%%%% diff from: somsyvxz 249f7943 "Bulk bar anti-shift, tags icons, AP no-wrap, credits reorder" (rebased revision) +%%%%%%% diff from: somsyvxz 249f7943 "Bulk bar anti-shift, tags icons, AP no-wrap, credits reorder" (rebased revision)
+\\\\\\\ to: mxvvqust 0a424ac8 "refactor: session-based incremental TFE upload via HTMX, drop SortableJS" (rebased revision) +\\\\\\\ to: mxvvqust 0a424ac8 "refactor: session-based incremental TFE upload via HTMX, drop SortableJS" (rebased revision)
++ $linkName = $link['name'] ?? ''; ++ $linkName = $link['name'] ?? '';
++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : '';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff from: mxvvqust 0a424ac8 "refactor: session-based incremental TFE upload via HTMX, drop SortableJS" (rebased revision)
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ to: somsyvxz 249f7943 "Bulk bar anti-shift, tags icons, AP no-wrap, credits reorder" (rebased revision)
- $linkName = $link['name'] ?? '';
- $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : '';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff from: somsyvxz 14a3cd10 "Bulk bar anti-shift, tags icons, AP no-wrap, credits reorder" (rebase destination)
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ to: yrpmtrsy b15e8131 "fix: scoped HTMX file validation, add validation to TFE/PeerTube inputs" (rebased revision)
$linkName = $link['name'] ?? '';
$linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : '';
$linkLockedYear = $link['locked_year'] ?? null;
+%%%%%%% diff from: somsyvxz 249f7943 "Bulk bar anti-shift, tags icons, AP no-wrap, credits reorder" (rebased revision)
+\\\\\\\ to: yrpmtrsy 21452e6f "fix: scoped HTMX file validation, add validation to TFE/PeerTube inputs" (rebased revision)
++ $linkName = $link['name'] ?? '';
++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : ''; ++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : '';
?> ?>
<tr class="admin-table-row" onclick="event.stopPropagation(); window.open('/partage/<?= urlencode($link['slug']) ?>', '_blank')" style="cursor:pointer"> <tr class="admin-table-row" onclick="event.stopPropagation(); window.open('/partage/<?= urlencode($link['slug']) ?>', '_blank')" style="cursor:pointer">