findAll() as $storage) { $rootLevelFolder = $storage->getRootLevelFolder(false); foreach ($rootLevelFolder->getSubfolders() as $subFolder) { if ($subFolder->getRole() === $subFolder::ROLE_RECYCLER) { $recyclerFolders[] = $subFolder; break; } } } // Execute cleanup $seconds = 60 * 60 * 24 * (int)$this->numberOfDays; $timestamp = $GLOBALS['EXEC_TIME'] - $seconds; foreach ($recyclerFolders as $recyclerFolder) { $this->cleanupRecycledFiles($recyclerFolder, $timestamp); } return true; } /** * Gets a list of all files in a directory recursively and removes * old ones. * * @param Folder $folder the folder * @param int $timestamp Timestamp of the last file modification */ protected function cleanupRecycledFiles(Folder $folder, $timestamp) { foreach ($folder->getFiles() as $file) { if ($timestamp > $file->getModificationTime()) { $file->delete(); } } foreach ($folder->getSubfolders() as $subFolder) { $this->cleanupRecycledFiles($subFolder, $timestamp); // if no more files and subdirectories are in the folder, remove the folder as well if ($subFolder->getFileCount() === 0 && count($subFolder->getSubfolders()) === 0) { $subFolder->delete(true); } } } public function getTaskParameters(): array { return [ 'number_of_days' => $this->numberOfDays, ]; } public function setTaskParameters(array $parameters): void { $this->numberOfDays = (int)($parameters['numberOfDays'] ?? $parameters['number_of_days'] ?? 0); } }