feat: suppression auto ligne si fichier SMB supprimé
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user