From d11e6aec5e1ab659b64768995a52eeef8e5cb0da Mon Sep 17 00:00:00 2001 From: Jules Date: Tue, 5 May 2026 23:55:00 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20suppression=20auto=20ligne=20si=20fichi?= =?UTF-8?q?er=20SMB=20supprim=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- web/api/mails.php | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) 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));