From 206a6427e70e9280fa68d9fceebf047b29f3663a Mon Sep 17 00:00:00 2001 From: Pontoporeia Date: Mon, 11 May 2026 14:53:51 +0200 Subject: [PATCH] =?UTF-8?q?style:=20unify=20recap+edit=20file=20figure=20s?= =?UTF-8?q?tyling=20=E2=80=94=20two-column=20grid=20dl,=20vertical=20spaci?= =?UTF-8?q?ng,=20admin-back-btn=20sizing,=20standardise=20file=20display?= =?UTF-8?q?=20and=20delete-to-trash=20SVG=20icons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 3 + app/public/admin/recapitulatif.php | 2 + app/public/assets/css/admin.css | 43 ++++- app/public/assets/css/form.css | 165 ------------------- app/public/partage/fichiers-fragment.php | 43 ++++- app/src/Controllers/ThesisEditController.php | 2 +- app/templates/admin/acces.php | 78 +++++++++ app/templates/admin/recapitulatif.php | 40 ++--- justfile | 3 +- 9 files changed, 183 insertions(+), 196 deletions(-) diff --git a/TODO.md b/TODO.md index aba20b2..819eb05 100644 --- a/TODO.md +++ b/TODO.md @@ -22,6 +22,9 @@ - [x] Decorelate formats from fichiers: no HTMX toggling; Site web/Vidéo/Audio always visible - [x] Sticky formats fieldset inside parent container - [x] Server-side progress: PeerTubeService writes to temp file, client polls progress endpoint +- [x] Fix cover deletion bug: !empty() instead of isset() +- [x] Remove old duplicate file list CSS; unified recap+edit file figure styling +- [x] Standardise uploaded/preexisting files styling: recap now matches edit (classes, icons, meta row, display_label) - [x] Refactor licence fieldset: Libre→CC2r+licence, Interne→opt-in licence, Interdit→none ## HTMX Toast Feedback for Settings Checkboxes (contenus.php) diff --git a/app/public/admin/recapitulatif.php b/app/public/admin/recapitulatif.php index 7fb116f..bc1ec34 100644 --- a/app/public/admin/recapitulatif.php +++ b/app/public/admin/recapitulatif.php @@ -43,6 +43,7 @@ if (isset($_GET['id'])) { $error = "Aucun identifiant spécifié."; } +if (!function_exists('formatFileSize')) { function formatFileSize($bytes) { if ($bytes >= 1073741824) { return number_format($bytes / 1073741824, 2) . ' GB'; @@ -54,6 +55,7 @@ function formatFileSize($bytes) { return $bytes . ' bytes'; } } +} $pageTitle = "Récapitulatif TFE"; $isAdmin = true; diff --git a/app/public/assets/css/admin.css b/app/public/assets/css/admin.css index c8591a6..4f322e3 100644 --- a/app/public/assets/css/admin.css +++ b/app/public/assets/css/admin.css @@ -87,13 +87,15 @@ display: inline-flex; align-items: center; justify-content: center; - width: 32px; - height: 32px; + width: 40px; + height: 40px; border-radius: var(--radius); color: var(--text-secondary); text-decoration: none; transition: background 0.15s, color 0.15s; flex-shrink: 0; + vertical-align: middle; + margin-right: var(--space-2xs); } .admin-back-btn:hover { @@ -102,8 +104,8 @@ } .admin-back-btn svg { - width: 22px; - height: 22px; + width: 28px; + height: 28px; fill: currentColor; } @@ -2067,3 +2069,36 @@ th.admin-ap-col { .htmx-indicator img { transition: opacity 300ms ease-in; } + +/* ── Récapitulatif sections ───────────────────────────────── */ + +.recap-synopsis, +.recap-long-text { + max-width: 70ch; + line-height: 1.6; +} + +/* Two-column definition lists */ +.recap-dl { + display: grid; + grid-template-columns: auto 1fr; + gap: var(--space-2xs) var(--space-m); + margin: 0; +} + +.recap-dl dt { + font-weight: 600; + color: var(--text-secondary); + font-size: var(--step--1); + white-space: nowrap; +} + +.recap-dl dd { + margin: 0 0 var(--space-xs) 0; + color: var(--text-primary); + font-size: var(--step--1); +} + +.recap-dl dd:last-of-type { + margin-bottom: 0; +} diff --git a/app/public/assets/css/form.css b/app/public/assets/css/form.css index 6fa68c1..353dc5c 100644 --- a/app/public/assets/css/form.css +++ b/app/public/assets/css/form.css @@ -628,171 +628,6 @@ background-color: var(--bg-primary); } -/* ── Existing-files list (edit form) ─────────────────────────────────────── */ - -.admin-file-list { - list-style: none; - margin: 0; - padding: 0; - display: flex; - flex-direction: column; - gap: var(--space-xs); -} - -.admin-file-list-item { - display: flex; - align-items: center; - gap: var(--space-xs); - padding: var(--space-3xs) var(--space-xs); - background: var(--bg-secondary); - border: 1px solid var(--border-primary); - border-radius: var(--radius); - min-width: 0; -} - -.admin-file-icon-col { - font-size: 1.2rem; - line-height: 1; - flex-shrink: 0; - width: 1.8rem; - text-align: center; -} - -.admin-file-info { - display: flex; - flex-direction: column; - gap: 2px; - flex: 1; - min-width: 0; -} - -.admin-file-name { - font-size: var(--step--1); - font-weight: 500; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - color: var(--text-primary); -} - -a.admin-file-name { - text-decoration: underline; - text-underline-offset: 2px; -} - -a.admin-file-name:hover { - color: var(--accent-primary); -} - -.admin-file-meta-row { - display: flex; - align-items: center; - gap: var(--space-2xs); - flex-wrap: wrap; -} - -.admin-file-type-badge { - font-size: var(--step--2); - padding: 1px 5px; - background: var(--bg-primary); - border: 1px solid var(--border-primary); - border-radius: var(--radius); - color: var(--text-secondary); - white-space: nowrap; -} - -.admin-file-size { - font-size: var(--step--2); - color: var(--text-tertiary); -} - -.admin-file-delete { - flex-shrink: 0; - margin-left: auto; - white-space: nowrap; -} - -/* ── Recap file list (admin & partage recapitulatif) ────────────────────── */ -.recap-file-list { - list-style: none; - margin: 0; - padding: 0; - display: flex; - flex-direction: column; - gap: var(--space-xs); -} - -.recap-file-item { - display: flex; - align-items: center; - gap: var(--space-s); - padding: var(--space-xs) var(--space-s); - background: var(--bg-secondary); - border: 1px solid var(--border-primary); - border-radius: var(--radius); -} - -.recap-file-thumb-link { - flex-shrink: 0; -} - -.recap-file-thumb { - width: 64px; - height: 64px; - object-fit: cover; - border-radius: var(--radius); - display: block; -} - -.recap-file-icon { - font-size: 2rem; - line-height: 1; - width: 64px; - text-align: center; - flex-shrink: 0; -} - -.recap-file-meta { - display: flex; - flex-wrap: wrap; - align-items: baseline; - gap: var(--space-2xs) var(--space-s); - min-width: 0; -} - -.recap-file-name { - font-size: var(--step--1); - font-weight: 500; - color: var(--text-primary); - word-break: break-all; -} - -a.recap-file-name { - text-decoration: underline; - text-underline-offset: 2px; -} - -a.recap-file-name:hover { - color: var(--accent-primary); -} - -.recap-file-type-badge { - font-size: var(--step--2); - padding: 1px 6px; - background: var(--bg-primary); - border: 1px solid var(--border-primary); - border-radius: var(--radius); - color: var(--text-secondary); - white-space: nowrap; -} - -.recap-file-size, -.recap-file-date { - font-size: var(--step--2); - color: var(--text-tertiary); - white-space: nowrap; -} - /* ── Partage recap page ─────────────────────────────────────────────────── */ .partage-recap { display: flex; diff --git a/app/public/partage/fichiers-fragment.php b/app/public/partage/fichiers-fragment.php index fc58345..a63d8dd 100644 --- a/app/public/partage/fichiers-fragment.php +++ b/app/public/partage/fichiers-fragment.php @@ -16,6 +16,21 @@ */ require_once APP_ROOT . '/src/PeerTubeService.php'; + +if (!function_exists('formatFileSize')) { +function formatFileSize($bytes) { + if ($bytes >= 1073741824) { + return number_format($bytes / 1073741824, 2) . ' GB'; + } elseif ($bytes >= 1048576) { + return number_format($bytes / 1048576, 2) . ' MB'; + } elseif ($bytes >= 1024) { + return number_format($bytes / 1024, 2) . ' KB'; + } else { + return $bytes . ' bytes'; + } +} +} // if (!function_exists('formatFileSize')) + $_ptDb = Database::getInstance(); $peerTubeEnabled = PeerTubeService::isEnabled($_ptDb); $peerTubeSettings = PeerTubeService::getSettings($_ptDb); @@ -103,16 +118,22 @@ $websiteLabel = htmlspecialchars($_POST['website_label'] ?? ''); foreach ($_thesisFilesList as $_f): $_fPath = $_f["file_path"] ?? ""; $_fIsPeerTube = str_starts_with($_fPath, "peertube_ids:"); + $_fMime = $_f["mime_type"] ?? ""; $_fExt = strtolower(pathinfo($_fPath, PATHINFO_EXTENSION)); $_fType = $_f["file_type"] ?? "other"; + $_fLabel = $_f["display_label"] ?? ""; + $_fIsImage = str_starts_with($_fMime, "image/") || in_array($_fExt, ["jpg","jpeg","png","gif","webp"]); $_fIcon = match (true) { $_fIsPeerTube && $_fType === "video" => "🎬", $_fIsPeerTube && $_fType === "audio" => "🔊", - $_fType === "main" || $_fExt === "pdf" => "📄", - in_array($_fExt, ["jpg","jpeg","png","gif","webp"]) => "🖼️", - $_fType === "video" || in_array($_fExt, ["mp4","webm","mov","ogv"]) => "🎬", - $_fType === "audio" || in_array($_fExt, ["mp3","ogg","wav","flac","aac","m4a"]) => "🔊", + $_fType === "cover" => "🖼️", + $_fType === "note_intention" => "📝", + $_fType === "main" || $_fMime === "application/pdf" || $_fExt === "pdf" => "📄", + $_fType === "video" || str_starts_with($_fMime, "video/") || in_array($_fExt, ["mp4","webm","mov","ogv"]) => "🎬", + $_fType === "audio" || str_starts_with($_fMime, "audio/") || in_array($_fExt, ["mp3","ogg","wav","flac","aac","m4a"]) => "🔊", + $_fIsImage => "🖼️", $_fType === "caption" || $_fExt === "vtt" => "💬", + $_fType === "annex" => "📎", $_fType === "website" => "🌐", default => "📎", }; @@ -122,7 +143,11 @@ $websiteLabel = htmlspecialchars($_POST['website_label'] ?? '');
  • "> ">
    + + <?= htmlspecialchars($_f[" class="admin-file-thumb" loading="lazy"> + +
    diff --git a/app/src/Controllers/ThesisEditController.php b/app/src/Controllers/ThesisEditController.php index 8b1d91e..e3b14fe 100644 --- a/app/src/Controllers/ThesisEditController.php +++ b/app/src/Controllers/ThesisEditController.php @@ -340,7 +340,7 @@ class ThesisEditController } // ── Cover image (outside transaction — filesystem op) ───────────────── - if (isset($post['remove_cover'])) { + if (!empty($post['remove_cover'])) { foreach ($existingFiles as $f) { if ($f['file_type'] === 'cover') { $this->db->deleteThesisFile((int)$f['id'], $thesisId); diff --git a/app/templates/admin/acces.php b/app/templates/admin/acces.php index 0943d86..5e89a58 100644 --- a/app/templates/admin/acces.php +++ b/app/templates/admin/acces.php @@ -1104,6 +1104,84 @@ +%%%%%%% diff from: somsyvxz 249f7943 "Bulk bar anti-shift, tags icons, AP no-wrap, credits reorder" (rebased revision) +\\\\\\\ to: ovpvxorx 2aa6ba2c "exhaustive recap: all fields, figures for files, PeerTube ID display, same in edit form" (rebased revision) ++ $linkName = $link['name'] ?? ''; +++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : ''; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff from: ovpvxorx 2aa6ba2c "exhaustive recap: all fields, figures for files, PeerTube ID display, same in edit form" (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: ruoswrzk 8546fff5 "standardize file delete to trash SVG icon; remove label inputs; unify recap+edit file figure styling" (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: ruoswrzk e8d54185 "standardize file delete to trash SVG icon; remove label inputs; unify recap+edit file figure styling" (rebased revision) +++ $linkName = $link['name'] ?? ''; +++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : ''; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff from: ruoswrzk e8d54185 "standardize file delete to trash SVG icon; remove label inputs; unify recap+edit file figure styling" (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: ssnyrkon fee4c8f7 "bump admin-back-btn to 40px, 28px SVG, align with h1" (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: ssnyrkon e2e8388f "bump admin-back-btn to 40px, 28px SVG, align with h1" (rebased revision) +++ $linkName = $link['name'] ?? ''; +++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : ''; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff from: ssnyrkon e2e8388f "bump admin-back-btn to 40px, 28px SVG, align with h1" (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: ztyvmwny 33e7b0d6 "style recap with two-column grid definition lists; synopsis max-width" (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: ztyvmwny 1ed77ab1 "style recap with two-column grid definition lists; synopsis max-width" (rebased revision) +++ $linkName = $link['name'] ?? ''; +++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : ''; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff from: ztyvmwny 1ed77ab1 "style recap with two-column grid definition lists; synopsis max-width" (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: skqpnwtr 51195512 "add vertical spacing between recap dl rows" (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: skqpnwtr 8f582535 "add vertical spacing between recap dl rows" (rebased revision) +++ $linkName = $link['name'] ?? ''; +++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : ''; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff from: skqpnwtr 8f582535 "add vertical spacing between recap dl rows" (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: nkopozsr 1875c855 "verify recap file styling unified with admin-file-figure" (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: nkopozsr 02201e47 "verify recap file styling unified with admin-file-figure" (rebased revision) +++ $linkName = $link['name'] ?? ''; +++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : ''; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff from: nkopozsr 02201e47 "verify recap file styling unified with admin-file-figure" (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: pmsuvltv 01296a17 "standardise file display styling between edit and recapitulatif" (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: pmsuvltv cfd4af17 "standardise file display styling between edit and recapitulatif" (rebased revision) +++ $linkName = $link['name'] ?? ''; ++ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : ''; ?> diff --git a/app/templates/admin/recapitulatif.php b/app/templates/admin/recapitulatif.php index e908c68..521ea48 100644 --- a/app/templates/admin/recapitulatif.php +++ b/app/templates/admin/recapitulatif.php @@ -38,7 +38,7 @@

    Identité

    -
    +
    Identifiant
    Titre
    @@ -60,7 +60,7 @@

    Cadre académique

    -
    +
    Orientation
    Atelier Pratique
    Finalité
    @@ -79,7 +79,7 @@

    Jury

    -
    +
    Président·e
    @@ -108,7 +108,7 @@

    Contenu

    -
    +
    Synopsis
    @@ -138,7 +138,7 @@

    Accès et licence

    -
    +
    Degré d'ouverture
    @@ -159,7 +159,7 @@

    Dates et publication

    -
    +
    Soumis le
    @@ -188,15 +188,16 @@

    Fichiers ()

    -
      +
        '🔊', $fileType === 'cover' => '🖼️', $fileType === 'note_intention' => '📝', - $fileType === 'main' || ($mime === 'application/pdf') => '📄', - $fileType === 'video' || str_starts_with($mime, 'video/') => '🎬', - $fileType === 'audio' || str_starts_with($mime, 'audio/') => '🔊', + $fileType === 'main' || ($mime === 'application/pdf') || $fileExt === 'pdf' => '📄', + $fileType === 'video' || str_starts_with($mime, 'video/') || in_array($fileExt, ['mp4','webm','mov','ogv']) => '🎬', + $fileType === 'audio' || str_starts_with($mime, 'audio/') || in_array($fileExt, ['mp3','ogg','wav','flac','aac','m4a']) => '🔊', $isImage => '🖼️', - $fileType === 'caption' => '💬', + $fileType === 'caption' || $fileExt === 'vtt' => '💬', $fileType === 'annex' => '📎', $fileType === 'website' => '🌐', default => '📎', }; ?> -
      • +
      • <?= $fileName ?> @@ -238,11 +239,7 @@
        - - - -
        ID : @@ -251,8 +248,13 @@ + + 0): ?> + + +
        diff --git a/justfile b/justfile index 8265a88..4d3b6c5 100644 --- a/justfile +++ b/justfile @@ -62,8 +62,9 @@ deploy: app/ xamxam:/var/www/xamxam/ # Upload deploy-server.sh for post-deploy permission fix rsync -v scripts/deploy-server.sh xamxam:/tmp/deploy-server.sh + rsync -v nginx/xamxam.conf xamxam:/tmp/xamxam.conf ssh -t xamxam "sudo bash /tmp/deploy-server.sh" - ssh xamxam "rm -f /tmp/deploy-server.sh" + ssh xamxam "rm -f /tmp/deploy-server.sh /tmp/xamxam.conf" ssh xamxam "mkdir -p /var/www/xamxam/var/{cache,logs,tmp}" ssh xamxam "cd /var/www/xamxam && php -r 'if (!file_exists(\"/var/www/xamxam/storage/xamxam.db\")) { \$db = new PDO(\"sqlite:/var/www/xamxam/storage/xamxam.db\"); \$db->exec(file_get_contents(\"/var/www/xamxam/storage/schema.sql\")); echo \"Database created from schema.\\n\"; } else { echo \"Database already exists.\\n\"; }'" # Run pending migrations