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.
This commit is contained in:
Adrian Greeve 2014-11-18 13:56:11 +08:00
parent c106341098
commit 767d01cf39

View File

@ -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]);
}
}
}
}