1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 namespace repository_filesystem\task; 18 defined('MOODLE_INTERNAL') || die(); 19 20 /** 21 * A schedule task for file system repository cron. 22 * 23 * @package repository_filesystem 24 * @copyright 2019 Simey Lameze <simey@moodle.com> 25 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 26 */ 27 class cron_task extends \core\task\scheduled_task { 28 /** 29 * Get a descriptive name for this task (shown to admins). 30 * 31 * @return string 32 */ 33 public function get_name() { 34 return get_string('crontask', 'repository_filesystem'); 35 } 36 37 /** 38 * Run file system repository cron. 39 */ 40 public function execute() { 41 global $CFG; 42 require_once($CFG->dirroot . '/repository/lib.php'); 43 44 $fs = get_file_storage(); 45 // Find all generated thumbnails and group them in array by itemid (itemid == repository instance id). 46 $allfiles = array_merge( 47 $fs->get_area_files(SYSCONTEXTID, 'repository_filesystem', 'thumb'), 48 $fs->get_area_files(SYSCONTEXTID, 'repository_filesystem', 'icon') 49 ); 50 $filesbyitem = array(); 51 foreach ($allfiles as $file) { 52 if (!isset($filesbyitem[$file->get_itemid()])) { 53 $filesbyitem[$file->get_itemid()] = array(); 54 } 55 $filesbyitem[$file->get_itemid()][] = $file; 56 } 57 // Find all instances of repository_filesystem. 58 $instances = \repository::get_instances(array('type' => 'filesystem')); 59 // Loop through all itemids of generated thumbnails. 60 foreach ($filesbyitem as $itemid => $files) { 61 if (!isset($instances[$itemid]) || !($instances[$itemid] instanceof repository_filesystem)) { 62 // Instance was deleted. 63 $fs->delete_area_files(SYSCONTEXTID, 'repository_filesystem', 'thumb', $itemid); 64 $fs->delete_area_files(SYSCONTEXTID, 'repository_filesystem', 'icon', $itemid); 65 mtrace(" instance $itemid does not exist: deleted all thumbnails"); 66 } else { 67 // Instance has some generated thumbnails, check that they are not outdated. 68 $instances[$itemid]->remove_obsolete_thumbnails($files); 69 } 70 } 71 } 72 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body