diff --git a/admin/tool/recyclebin/classes/category_bin.php b/admin/tool/recyclebin/classes/category_bin.php index 26d8b537a68e2..e9795f55b8fc5 100644 --- a/admin/tool/recyclebin/classes/category_bin.php +++ b/admin/tool/recyclebin/classes/category_bin.php @@ -288,13 +288,22 @@ public function delete_item($item) { global $DB; // Grab the course category context. - $context = \context_coursecat::instance($this->_categoryid); - - // Delete the files. - $fs = get_file_storage(); - $files = $fs->get_area_files($context->id, 'tool_recyclebin', TOOL_RECYCLEBIN_COURSECAT_BIN_FILEAREA, $item->id); - foreach ($files as $file) { - $file->delete(); + $context = \context_coursecat::instance($this->_categoryid, IGNORE_MISSING); + if (!empty($context)) { + // Delete the files. + $fs = get_file_storage(); + $fs->delete_area_files($context->id, 'tool_recyclebin', TOOL_RECYCLEBIN_COURSECAT_BIN_FILEAREA, $item->id); + } else { + // Course category has been deleted. Find records using $item->id as this is unique for coursecat recylebin. + $files = $DB->get_recordset('files', array('component' => 'tool_recyclebin', + 'filearea' => TOOL_RECYCLEBIN_COURSECAT_BIN_FILEAREA, + 'itemid' => $item->id)); + $fs = get_file_storage(); + foreach ($files as $filer) { + $file = $fs->get_file_instance($filer); + $file->delete(); + } + $file->close(); } // Delete the record. @@ -302,6 +311,11 @@ public function delete_item($item) { 'id' => $item->id )); + // The coursecat might have been deleted, check we have a context before triggering event. + if (!$context) { + return; + } + // Fire event. $event = \tool_recyclebin\event\category_bin_item_deleted::create(array( 'objectid' => $item->id, diff --git a/admin/tool/recyclebin/classes/course_bin.php b/admin/tool/recyclebin/classes/course_bin.php index e935d691b7277..3b0896cfd87ad 100644 --- a/admin/tool/recyclebin/classes/course_bin.php +++ b/admin/tool/recyclebin/classes/course_bin.php @@ -274,13 +274,23 @@ public function delete_item($item) { global $DB; // Grab the course context. - $context = \context_course::instance($this->_courseid); - - // Delete the files. - $fs = get_file_storage(); - $files = $fs->get_area_files($context->id, 'tool_recyclebin', TOOL_RECYCLEBIN_COURSE_BIN_FILEAREA, $item->id); - foreach ($files as $file) { - $file->delete(); + $context = \context_course::instance($this->_courseid, IGNORE_MISSING); + + if (!empty($context)) { + // Delete the files. + $fs = get_file_storage(); + $fs->delete_area_files($context->id, 'tool_recyclebin', TOOL_RECYCLEBIN_COURSE_BIN_FILEAREA, $item->id); + } else { + // Course context has been deleted. Find records using $item->id as this is unique for course bin recyclebin. + $files = $DB->get_recordset('files', array('component' => 'tool_recyclebin', + 'filearea' => TOOL_RECYCLEBIN_COURSE_BIN_FILEAREA, + 'itemid' => $item->id)); + $fs = get_file_storage(); + foreach ($files as $filer) { + $file = $fs->get_file_instance($filer); + $file->delete(); + } + $files->close(); } // Delete the record.