Skip to content

Commit

Permalink
MDL-46927 core_files: fixed issue with system course restores
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mdjnelson committed Jun 2, 2015
1 parent 0c6faf4 commit 94f78b0
Showing 1 changed file with 51 additions and 1 deletion.
52 changes: 51 additions & 1 deletion lib/filebrowser/file_info_context_system.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,66 @@ public function __construct($browser, $context) {
* @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.
*
Expand Down

0 comments on commit 94f78b0

Please sign in to comment.