From 25def91da52f7bcf8a3d2c693c2ce48db41491b6 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms Date: Fri, 7 Nov 2025 12:56:24 +0100 Subject: delete files from orphaned message folders as well, fixes #6024 --- lib/cronjobs/garbage_collector.php | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/cronjobs/garbage_collector.php b/lib/cronjobs/garbage_collector.php index 4a029ef..1e6a69a 100644 --- a/lib/cronjobs/garbage_collector.php +++ b/lib/cronjobs/garbage_collector.php @@ -99,16 +99,25 @@ class GarbageCollectorJob extends CronJob //range type 'message', belongs to the folder type 'MessageFolder', //is older than 2 hours and has a range-ID that doesn't exist //in the "message" table. - $unsent_attachment_folders = Folder::deleteBySql( - "folder_type = 'MessageFolder' - AND - range_type = 'message' - AND - chdate < UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL -2 HOUR)) - AND - range_id NOT IN ( - SELECT message_id FROM message - )" + $conditions = [ + "folder_type = 'MessageFolder'", + "range_type = 'message'", + "chdate < UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL -2 HOUR))", + "range_id NOT IN (SELECT message_id FROM message)", + ]; + $condition = implode(" AND ", $conditions); + + $unsent_attachment_folders = 0; + Folder::findEachBySQL( + function (Folder $folder) use (&$unsent_attachment_folders) { + $folder->file_refs->each(function (FileRef $ref) { + $ref->delete(); + }); + $folder->delete(); + + $unsent_attachment_folders += 1; + }, + $condition ); //delete old attachments of non-stored and deleted mvv objects: -- cgit v1.0