Commit fee1d071 authored by Mark Nelson's avatar Mark Nelson
Browse files

MDL-46927 core_files: fixed issue with system course restores

When clicking on 'Restore' next to a file in the 'Course
backup area' in the system context the message 'Sorry,
the requested file could not be found' was displayed.
This fix adds missing functionality to the class
'file_info_context_system' so that the file information
is correctly returned.
parent 14d27910
......@@ -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.
*
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment