mirror of
https://github.com/moodle/moodle.git
synced 2025-08-07 09:56:38 +02:00
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:
parent
c106341098
commit
767d01cf39
1 changed files with 19 additions and 2 deletions
|
@ -52,13 +52,28 @@ class file_temp_cleanup_task extends scheduled_task {
|
||||||
// Show all child nodes prior to their parent.
|
// Show all child nodes prior to their parent.
|
||||||
$iter = new \RecursiveIteratorIterator($dir, \RecursiveIteratorIterator::CHILD_FIRST);
|
$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()) {
|
for ($iter->rewind(); $iter->valid(); $iter->next()) {
|
||||||
$node = $iter->getRealPath();
|
$node = $iter->getRealPath();
|
||||||
if (!is_readable($node)) {
|
if (!is_readable($node)) {
|
||||||
continue;
|
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.
|
// Check if file or directory is older than the given time.
|
||||||
if ($iter->getMTime() < $time) {
|
if ($modifieddateobject[$node] < $time) {
|
||||||
if ($iter->isDir() && !$iter->isDot()) {
|
if ($iter->isDir() && !$iter->isDot()) {
|
||||||
// Don't attempt to delete the directory if it isn't empty.
|
// Don't attempt to delete the directory if it isn't empty.
|
||||||
if (!glob($node. DIRECTORY_SEPARATOR . '*')) {
|
if (!glob($node. DIRECTORY_SEPARATOR . '*')) {
|
||||||
|
@ -72,9 +87,11 @@ class file_temp_cleanup_task extends scheduled_task {
|
||||||
mtrace("Failed removing file '$node'.");
|
mtrace("Failed removing file '$node'.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// Return the time modified to the original date.
|
||||||
|
touch($node, $modifieddateobject[$node]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue