mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-09-25 01:53:03 +02:00
feat(admin): cleanup page — remove 'Fichiers temporaires' level, promote sections to h2 TOC entries
This commit is contained in:
@@ -13,34 +13,22 @@ AdminAuth::requireLogin();
|
||||
require_once __DIR__ . '/_cleanup-stats-data.php';
|
||||
$d = getCleanupStats();
|
||||
|
||||
$fpStale = $d['filepond_stale_count'] ?? 0;
|
||||
$fpActive = $d['filepond_active_count'] ?? 0;
|
||||
$trStale = $d['trash_stale_count'] ?? 0;
|
||||
$trActive = $d['trash_active_count'] ?? 0;
|
||||
// Abandoned FilePond uploads are purged automatically by a cron job, so the
|
||||
// cleanup page only surfaces the manually-managed trash (Corbeille).
|
||||
$hasTrash = (($d['trash_stale_count'] ?? 0) + ($d['trash_active_count'] ?? 0)) > 0;
|
||||
|
||||
$totalStale = $fpStale + $trStale;
|
||||
$totalFiles = $fpStale + $fpActive + $trStale + $trActive;
|
||||
|
||||
$staleSize = ($d['filepond_stale_size'] ?? 0) + ($d['trash_stale_size'] ?? 0);
|
||||
$staleHuman = '';
|
||||
if ($staleSize >= 1073741824) { $staleHuman = number_format($staleSize / 1073741824, 1) . ' GB'; }
|
||||
elseif ($staleSize >= 1048576) { $staleHuman = number_format($staleSize / 1048576, 1) . ' MB'; }
|
||||
elseif ($staleSize >= 1024) { $staleHuman = number_format($staleSize / 1024, 0) . ' KB'; }
|
||||
elseif ($staleSize > 0) { $staleHuman = $staleSize . ' B'; }
|
||||
|
||||
$fpMeta = $fpStale . ' dossier' . ($fpStale > 1 ? 's' : '');
|
||||
if ($fpStale > 0) {
|
||||
$fpMeta .= ' · ' . ($d['filepond_stale_human'] ?? '');
|
||||
}
|
||||
$trMeta = ($trStale + $trActive) . ' fichier' . (($trStale + $trActive) > 1 ? 's' : '');
|
||||
$trTotalSize = ($d['trash_stale_size'] ?? 0) + ($d['trash_active_size'] ?? 0);
|
||||
$trTotalHuman = humanBytes($trTotalSize);
|
||||
if (($trStale + $trActive) > 0) {
|
||||
$trMeta .= ' · ' . $trTotalHuman;
|
||||
$trMeta = '';
|
||||
if ($hasTrash) {
|
||||
$trCount = ($d['trash_stale_count'] ?? 0) + ($d['trash_active_count'] ?? 0);
|
||||
$trMeta = $trCount . ' fichier' . ($trCount > 1 ? 's' : '');
|
||||
$trTotalSize = ($d['trash_stale_size'] ?? 0) + ($d['trash_active_size'] ?? 0);
|
||||
if ($trTotalSize > 0) {
|
||||
$trMeta .= ' · ' . humanBytes($trTotalSize);
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php if ($totalStale === 0 && $totalFiles === 0): ?>
|
||||
<p style="margin:0;color:var(--accent-green)">✓ Aucun fichier temporaire.</p>
|
||||
<?php if (!$hasTrash): ?>
|
||||
<p style="margin:0;color:var(--accent-green)">✓ Corbeille vide — aucun fichier à nettoyer.</p>
|
||||
<?php return; endif; ?>
|
||||
|
||||
<!-- Bulk actions bar -->
|
||||
@@ -78,35 +66,6 @@ if (($trStale + $trActive) > 0) {
|
||||
<div id="cleanup-bulk-restore-checkboxes"></div>
|
||||
</form>
|
||||
|
||||
<?php if ($fpStale > 0): ?>
|
||||
<h3 id="tmp-filepond-heading">Téléversements abandonnés <span class="n-meta"><?= htmlspecialchars($fpMeta) ?></span></h3>
|
||||
<table class="n-table" aria-labelledby="tmp-filepond-heading">
|
||||
<thead><tr><th width="1%"><input type="checkbox" onchange="cleanupToggleAll(this, 'filepond')" title="Tout sélectionner"></th><th>Nom</th><th>Taille</th><th>Âge</th><th width="1%"></th></tr></thead>
|
||||
<tbody>
|
||||
<?php foreach ($d['filepond_stale_files'] as $f): ?>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="filepond_dirs[]" value="<?= htmlspecialchars($f['name']) ?>" data-cleanup-group="filepond" onchange="cleanupUpdateBulk()"></td>
|
||||
<td><strong><?= htmlspecialchars($f['name']) ?></strong></td>
|
||||
<td style="white-space:nowrap"><?= htmlspecialchars($f['human']) ?></td>
|
||||
<td style="white-space:nowrap">~<?= (int)$f['age_minutes'] ?> min</td>
|
||||
<td style="white-space:nowrap">
|
||||
<button type="button" class="btn btn--sm btn--danger" style="font-size:0.85em;padding:2px var(--space-xs)"
|
||||
hx-post="/admin/actions/cleanup-tmp.php"
|
||||
hx-confirm="Supprimer définitivement ce téléversement abandonné ?"
|
||||
hx-vals='{"csrf_token":"<?= htmlspecialchars($_SESSION['csrf_token']) ?>","filepond_dir":"<?= htmlspecialchars($f['name']) ?>"}'
|
||||
hx-target="#tmp-cleanup-stats-wrapper"
|
||||
hx-swap="innerHTML"
|
||||
hx-indicator="#tmp-cleanup-stats-wrapper">
|
||||
<?= icon('trash') ?>
|
||||
Supprimer
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
// ── Merge stale + active trash files into a single list for display ─────
|
||||
// stale = orphaned (no sidecar, or too old); active = restorable (has sidecar)
|
||||
@@ -126,7 +85,10 @@ foreach (($d['trash_stale_files'] ?? []) as $f) {
|
||||
}
|
||||
$hasTrash = !empty($allTrashFiles);
|
||||
if ($hasTrash): ?>
|
||||
<h3 id="tmp-trash-heading">Corbeille <span class="n-meta"><?= htmlspecialchars($trMeta) ?></span></h3>
|
||||
<section aria-labelledby="tmp-trash-heading">
|
||||
<h2 id="tmp-trash-heading">Corbeille</h2>
|
||||
<p class="cleanup-section-desc">Fichiers retirés d'un TFE. Ceux marqués « Restaurable » peuvent être remis dans le TFE d'origine ; les autres sont orphelins (plus aucun TFE lié). La suppression est définitive et sans retour.</p>
|
||||
<p class="cleanup-stat-card"><?= htmlspecialchars($trMeta) ?></p>
|
||||
<table class="n-table" aria-labelledby="tmp-trash-heading">
|
||||
<thead><tr><th width="1%"><input type="checkbox" onchange="cleanupToggleAll(this, 'trash')" title="Tout sélectionner"></th><th>Nom</th><th>Taille</th><th>Âge</th><th>Statut</th><th width="1%"></th></tr></thead>
|
||||
<tbody>
|
||||
@@ -147,6 +109,7 @@ if ($hasTrash): ?>
|
||||
<?php if ($f['_restorable']): ?>
|
||||
<button type="button" class="btn btn--sm"
|
||||
style="font-size:0.85em;padding:2px var(--space-xs);margin-right:4px"
|
||||
title="Restaurer ce fichier vers le TFE associé"
|
||||
hx-post="/admin/actions/restore-trash.php"
|
||||
hx-confirm="Restaurer ce fichier vers le TFE associé ?"
|
||||
hx-vals='{"csrf_token":"<?= htmlspecialchars($_SESSION['csrf_token']) ?>","trash_file":"<?= htmlspecialchars($f['name']) ?>"}'
|
||||
@@ -158,6 +121,7 @@ if ($hasTrash): ?>
|
||||
<?php endif; ?>
|
||||
<button type="button" class="btn btn--sm btn--danger"
|
||||
style="font-size:0.85em;padding:2px var(--space-xs)"
|
||||
title="Supprimer définitivement ce fichier de la corbeille (irréversible)"
|
||||
hx-post="/admin/actions/cleanup-tmp.php"
|
||||
hx-confirm="Supprimer définitivement ce fichier de la corbeille ?"
|
||||
hx-vals='{"csrf_token":"<?= htmlspecialchars($_SESSION['csrf_token']) ?>","trash_file":"<?= htmlspecialchars($f['name']) ?>"}'
|
||||
@@ -172,10 +136,6 @@ if ($hasTrash): ?>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($fpActive > 0): ?>
|
||||
<p style="margin:var(--space-sm) 0 0 0;font-size:0.85em;color:var(--text-secondary)">Conservés :
|
||||
<?= $fpActive . ' téléversement(s) actif(s) (' . htmlspecialchars($d['filepond_active_human']) . ')' ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
|
||||
Reference in New Issue
Block a user