Files
copymailrpi/web/api/mails.php
2026-05-05 23:55:00 +02:00

57 lines
1.7 KiB
PHP

<?php
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/auth.php';
auth_check();
header('Content-Type: application/json');
$rows = db()->query(
'SELECT sf.id, sf.title, sf.sender, sf.date_processing, a.username,
GROUP_CONCAT(f.id, ":", f.file_name, ":", f.path ORDER BY f.id SEPARATOR "|") as files
FROM source_file sf
LEFT JOIN accounts a ON sf.account_id = a.id
LEFT JOIN files f ON sf.id = f.source_file_id
GROUP BY sf.id
ORDER BY sf.date_processing DESC'
)->fetchAll();
$toDelete = []; // source_file ids à supprimer
foreach ($rows as $key => &$r) {
$r['files_list'] = [];
if ($r['files']) {
$allGone = true;
foreach (explode('|', $r['files']) as $f) {
[$fid, $fname, $fpath] = array_pad(explode(':', $f, 3), 3, '');
if (file_exists($fpath)) {
$allGone = false;
$r['files_list'][] = ['id' => (int)$fid, 'name' => $fname, 'exists' => true];
} else {
// Fichier supprimé du SMB — retire l'entrée files en BDD
db()->prepare('DELETE FROM files WHERE id = ?')->execute([(int)$fid]);
}
}
// Si tous les fichiers ont disparu, supprime la ligne source
if ($allGone) {
$toDelete[] = $r['id'];
unset($rows[$key]);
continue;
}
} else {
// Pas de fichiers associés — supprime la ligne source aussi
$toDelete[] = $r['id'];
unset($rows[$key]);
continue;
}
unset($r['files']);
}
// Supprime les source_file orphelins
foreach ($toDelete as $id) {
db()->prepare('DELETE FROM source_file WHERE id = ?')->execute([$id]);
}
echo json_encode(array_values($rows));