mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
- Remove duplicate 'Téléversements abandonnés' heading already communicated by the summary - Replace #peertube-orphans-wrapper with display:contents wrapper so PeerTube details sit as direct grid siblings - Add hx-confirm to all delete buttons (filepond, trash, PeerTube orphans)
129 lines
5.6 KiB
PHP
129 lines
5.6 KiB
PHP
<?php
|
|
/**
|
|
* Temp file statistics as an HTML fragment (admin).
|
|
*
|
|
* GET /admin/actions/cleanup-stats-fragment.php
|
|
*
|
|
* Returns an HTML fragment ready for HTMX swap into #tmp-cleanup-stats-wrapper.
|
|
*/
|
|
require_once __DIR__ . '/../../../bootstrap.php';
|
|
require_once __DIR__ . '/../../../src/AdminAuth.php';
|
|
AdminAuth::requireLogin();
|
|
|
|
// Re-use the existing stats endpoint internally
|
|
ob_start();
|
|
require __DIR__ . '/cleanup-stats.php';
|
|
$json = ob_get_clean();
|
|
$d = json_decode($json, true);
|
|
|
|
$fpStale = $d['filepond_stale_count'] ?? 0;
|
|
$fpActive = $d['filepond_active_count'] ?? 0;
|
|
$trStale = $d['trash_stale_count'] ?? 0;
|
|
$trActive = $d['trash_active_count'] ?? 0;
|
|
|
|
$totalStale = $fpStale + $trStale;
|
|
$totalFiles = $fpStale + $fpActive + $trStale + $trActive;
|
|
|
|
// Build summary meta: total stale count + total size
|
|
$staleParts = [];
|
|
if ($fpStale > 0) $staleParts[] = $fpStale . ' téléversement';
|
|
if ($trStale > 0) $staleParts[] = $trStale . ' corbeille';
|
|
$staleMeta = implode(' + ', $staleParts);
|
|
|
|
// Approximate total stale size
|
|
$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'; }
|
|
|
|
$summaryMeta = $staleMeta;
|
|
if ($staleHuman) $summaryMeta .= ' · ' . $staleHuman;
|
|
|
|
if ($totalStale === 0 && $totalFiles === 0): ?>
|
|
<div id="tmp-cleanup-stats-wrapper">
|
|
<details class="n-section" open>
|
|
<summary>
|
|
<?= icon('paint-brush-household') ?>
|
|
Fichiers temporaires
|
|
</summary>
|
|
<p style="margin:0;color:var(--accent-green)">✓ Aucun fichier temporaire.</p>
|
|
</details>
|
|
</div>
|
|
<?php return; endif; ?>
|
|
|
|
<div id="tmp-cleanup-stats-wrapper">
|
|
<details class="n-section" open>
|
|
<summary>
|
|
<?= icon('paint-brush-household') ?>
|
|
Fichiers temporaires <span class="n-meta"><?= htmlspecialchars($summaryMeta) ?></span>
|
|
</summary>
|
|
|
|
<?php if ($fpStale > 0): ?>
|
|
<table class="n-table">
|
|
<thead><tr><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><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="outerHTML"
|
|
hx-indicator="#tmp-cleanup-stats-wrapper">
|
|
<?= icon('trash') ?>
|
|
Supprimer
|
|
</button>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($trStale > 0): ?>
|
|
<p class="n-heading">
|
|
<?= icon('trash') ?>
|
|
Corbeille
|
|
</p>
|
|
<table class="n-table">
|
|
<thead><tr><th>Nom</th><th>Taille</th><th>Âge</th><th width="1%"></th></tr></thead>
|
|
<tbody>
|
|
<?php foreach ($d['trash_stale_files'] as $f): ?>
|
|
<tr>
|
|
<td><strong><?= htmlspecialchars($f['name']) ?></strong></td>
|
|
<td style="white-space:nowrap"><?= htmlspecialchars($f['human']) ?></td>
|
|
<td style="white-space:nowrap">~<?= (int)$f['age_days'] ?> j</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 fichier de la corbeille ?"
|
|
hx-vals='{"csrf_token":"<?= htmlspecialchars($_SESSION['csrf_token']) ?>","trash_file":"<?= htmlspecialchars($f['name']) ?>"}'
|
|
hx-target="#tmp-cleanup-stats-wrapper"
|
|
hx-swap="outerHTML"
|
|
hx-indicator="#tmp-cleanup-stats-wrapper">
|
|
<?= icon('trash') ?>
|
|
Supprimer
|
|
</button>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($fpActive > 0 || $trActive > 0): ?>
|
|
<p style="margin:var(--space-sm) 0 0 0;font-size:0.85em;color:var(--text-secondary)">Conservés :
|
|
<?php if ($fpActive) echo $fpActive . ' téléversement(s) actif(s) (' . htmlspecialchars($d['filepond_active_human']) . '), '; ?>
|
|
<?php if ($trActive) echo $trActive . ' fichier(s) récent(s) (' . htmlspecialchars($d['trash_active_human']) . ')'; ?>
|
|
</p>
|
|
<?php endif; ?>
|
|
</details>
|
|
</div>
|