diff --git a/web/api/mails.php b/web/api/mails.php index 1ec3b2e..7aee669 100644 --- a/web/api/mails.php +++ b/web/api/mails.php @@ -15,20 +15,42 @@ $rows = db()->query( ORDER BY sf.date_processing DESC' )->fetchAll(); -// Vérifie l'existence physique des fichiers -foreach ($rows as &$r) { +$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, ''); - $r['files_list'][] = [ - 'id' => (int)$fid, - 'name' => $fname, - 'exists' => file_exists($fpath), - ]; + 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']); } -echo json_encode($rows); +// 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));