57 lines
1.7 KiB
PHP
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));
|