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.
This commit is contained in:
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user