From 767d01cf396924490e358283876b64347afdab76 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Tue, 18 Nov 2014 13:56:11 +0800 Subject: [PATCH] MDL-48252 scheduled tasks: file_temp_cleanup_task does full delete. This scheduled task was previously only doing a partial delete due to the fact that the directory modification time would be updated when a child file was deleted. It would then have to wait another week before that directory could be deleted. --- lib/classes/task/file_temp_cleanup_task.php | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/classes/task/file_temp_cleanup_task.php b/lib/classes/task/file_temp_cleanup_task.php index 01a7fbf9fcd..b5aeea8d0b0 100644 --- a/lib/classes/task/file_temp_cleanup_task.php +++ b/lib/classes/task/file_temp_cleanup_task.php @@ -52,13 +52,28 @@ class file_temp_cleanup_task extends scheduled_task { // Show all child nodes prior to their parent. $iter = new \RecursiveIteratorIterator($dir, \RecursiveIteratorIterator::CHILD_FIRST); + // An array of the full path (key) and date last modified. + $modifieddateobject = array(); + + // Get the time modified for each directory node. Nodes will be updated + // once a file is deleted, so we need a list of the original values. + for ($iter->rewind(); $iter->valid(); $iter->next()) { + $node = $iter->getRealPath(); + if (!is_readable($node)) { + continue; + } + $modifieddateobject[$node] = $iter->getMTime(); + } + + // Now loop through again and remove old files and directories. for ($iter->rewind(); $iter->valid(); $iter->next()) { $node = $iter->getRealPath(); if (!is_readable($node)) { continue; } + // Check if file or directory is older than the given time. - if ($iter->getMTime() < $time) { + if ($modifieddateobject[$node] < $time) { if ($iter->isDir() && !$iter->isDot()) { // Don't attempt to delete the directory if it isn't empty. if (!glob($node. DIRECTORY_SEPARATOR . '*')) { @@ -72,9 +87,11 @@ class file_temp_cleanup_task extends scheduled_task { mtrace("Failed removing file '$node'."); } } + } else { + // Return the time modified to the original date. + touch($node, $modifieddateobject[$node]); } } - } } -- 2.43.0