feat(backoffice): exportação CSV nas listagens, com audit

Novo helper csv_export() (config/functions.php): CSV Excel-friendly (BOM UTF-8
+ ';') e cada exportação fica no audit_log (RGPD: exportar dados pessoais tem
de ser rastreável). Botão "Exportar CSV" em todas as listagens do backoffice:
equipa, eventos, galerias, ginásios, horário, mensalidades, modalidades,
horário de funcionamento e lixeira (pedidos de inscrição e aulas experimentais
já tinham). Fecha a metade "exportação com permissões e audit" do item 6.9
(a única parte que o relatório considera ganho real à escala atual).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
andreandClaude Fable 5 committed 2026-09-25 23:43:41 +01:00
1 parent 33158381bb
commit 116817e2de
10 files changed
+122 -4

No files matched your search

+13 -1
View File
@@ -29,13 +29,25 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}
$items = trash_list($pdo);
if (isset($_GET['csv'])) {
$rows = [];
foreach ($items as $it) {
$rows[] = [$it['label'], $it['title'], $it['deleted_at'], $it['deleted_by_name'] ?? ''];
}
csv_export('trash', 'lixeira', 'Exportação CSV da lixeira', ['Tipo', 'Registo', 'Apagado em', 'Por'], $rows);
}
$page_title = 'Lixeira';
include __DIR__ . '/../../../includes/header.php';
?>
<div class="container">
<div class="d-flex justify-content-between align-items-center mb-2">
<h1 class="h3 mb-0">Lixeira</h1>
<span class="badge bg-secondary"><?= count($items) ?></span>
<div class="d-flex align-items-center gap-2">
<span class="badge bg-secondary"><?= count($items) ?></span>
<a class="btn btn-outline-secondary btn-sm" href="?csv=1"><i class="bi bi-filetype-csv me-1"></i>Exportar CSV</a>
</div>
</div>
<p class="text-muted small mb-4">
O que se apaga no backoffice fica aqui. Pode ser restaurado a qualquer momento;