diff --git a/lib/filebrowser/file_info_context_system.php b/lib/filebrowser/file_info_context_system.php index a37f43ea8a1..18331a9fb73 100644 --- a/lib/filebrowser/file_info_context_system.php +++ b/lib/filebrowser/file_info_context_system.php @@ -52,16 +52,66 @@ class file_info_context_system extends file_info { * @param int $itemid item ID * @param string $filepath file path * @param string $filename file name + * @return file_info|null file_info instance or null if not found or access not allowed */ public function get_file_info($component, $filearea, $itemid, $filepath, $filename) { if (empty($component)) { return $this; } - // no components supported at this level yet + $methodname = "get_area_{$component}_{$filearea}"; + + if (method_exists($this, $methodname)) { + return $this->$methodname($itemid, $filepath, $filename); + } + return null; } + /** + * Gets a stored file for the backup course filearea directory. + * + * @param int $itemid item ID + * @param string $filepath file path + * @param string $filename file name + * @return file_info|null file_info instance or null if not found or access not allowed + */ + protected function get_area_backup_course($itemid, $filepath, $filename) { + global $CFG; + + if (!isloggedin()) { + return null; + } + + if (!has_any_capability(array('moodle/backup:backupcourse', 'moodle/restore:restorecourse'), $this->context)) { + return null; + } + + if (is_null($itemid)) { + return $this; + } + + $fs = get_file_storage(); + + $filepath = is_null($filepath) ? '/' : $filepath; + $filename = is_null($filename) ? '.' : $filename; + if (!$storedfile = $fs->get_file($this->context->id, 'backup', 'course', 0, $filepath, $filename)) { + if ($filepath === '/' && $filename === '.') { + $storedfile = new virtual_root_file($this->context->id, 'backup', 'course', 0); + } else { + // Not found. + return null; + } + } + + $downloadable = has_capability('moodle/backup:downloadfile', $this->context); + $uploadable = has_capability('moodle/restore:uploadfile', $this->context); + + $urlbase = $CFG->wwwroot . '/pluginfile.php'; + return new file_info_stored($this->browser, $this->context, $storedfile, $urlbase, + get_string('coursebackup', 'repository'), false, $downloadable, $uploadable, false); + } + /** * Returns localised visible name. *