Loading templates copies system images to the course (#298)

Before it would just reference the system images. However, this meant
backup/restore was broken as it did not include the images the template
was using.
This commit is contained in:
Mark Nelson 2020-03-12 15:41:10 +01:00
parent 8a2b7290af
commit 48c83d34df
2 changed files with 50 additions and 2 deletions

View file

@ -382,14 +382,14 @@ class element extends \mod_customcert\element {
// Loop through the files uploaded in the system context. // Loop through the files uploaded in the system context.
if ($files = $fs->get_area_files(\context_system::instance()->id, 'mod_customcert', 'image', false, 'filename', false)) { if ($files = $fs->get_area_files(\context_system::instance()->id, 'mod_customcert', 'image', false, 'filename', false)) {
foreach ($files as $hash => $file) { foreach ($files as $hash => $file) {
$arrfiles[$file->get_id()] = $file->get_filename(); $arrfiles[$file->get_id()] = get_string('systemimage', 'customcertelement_image', $file->get_filename());
} }
} }
// Loop through the files uploaded in the course context. // Loop through the files uploaded in the course context.
if ($files = $fs->get_area_files(\context_course::instance($COURSE->id)->id, 'mod_customcert', 'image', false, if ($files = $fs->get_area_files(\context_course::instance($COURSE->id)->id, 'mod_customcert', 'image', false,
'filename', false)) { 'filename', false)) {
foreach ($files as $hash => $file) { foreach ($files as $hash => $file) {
$arrfiles[$file->get_id()] = $file->get_filename(); $arrfiles[$file->get_id()] = get_string('courseimage', 'customcertelement_image', $file->get_filename());
} }
} }
@ -398,4 +398,50 @@ class element extends \mod_customcert\element {
return $arrfiles; return $arrfiles;
} }
/**
* This handles copying data from another element of the same type.
*
* @param \stdClass $data the form data
* @return bool returns true if the data was copied successfully, false otherwise
*/
public function copy_element($data) {
global $COURSE, $DB, $SITE;
$imagedata = json_decode($data->data);
// If we are in the site context we don't have to do anything, the images are already there.
if ($COURSE->id == $SITE->id) {
return true;
}
$context = \context_course::instance($COURSE->id);
// Copy files to new location.
$fs = get_file_storage();
$systemfiles = $fs->get_area_files(\context_system::instance()->id, 'mod_customcert', $imagedata->filearea,
$imagedata->itemid);
$fieldupdates = [
'contextid' => $context->id
];
foreach ($systemfiles as $systemfile) {
// We might have loaded this template already in this course.
if (!$storedfile = $fs->get_file(
$context->id,
'mod_customcert',
$systemfile->get_filearea(),
$systemfile->get_itemid(),
$systemfile->get_filepath(),
$systemfile->get_filename())
) {
$storedfile = $fs->create_file_from_storedfile($fieldupdates, $systemfile);
}
// Set the image to the copied file in the course.
$imagedata->fileid = $storedfile->get_id();
$DB->set_field('customcert_elements', 'data', $this->save_unique_data($imagedata), ['id' => $this->get_id()]);
}
return true;
}
} }

View file

@ -24,6 +24,7 @@
$string['alphachannel'] = 'Alpha channel'; $string['alphachannel'] = 'Alpha channel';
$string['alphachannel_help'] = 'This value determines how transparent the image is. You can set the alpha channel from 0 (fully transparent) to 1 (fully opaque).'; $string['alphachannel_help'] = 'This value determines how transparent the image is. You can set the alpha channel from 0 (fully transparent) to 1 (fully opaque).';
$string['courseimage'] = 'Course image: {$a}';
$string['height'] = 'Height'; $string['height'] = 'Height';
$string['height_help'] = 'Height of the image in mm. If equal to zero, it is automatically calculated.'; $string['height_help'] = 'Height of the image in mm. If equal to zero, it is automatically calculated.';
$string['image'] = 'Image'; $string['image'] = 'Image';
@ -31,5 +32,6 @@ $string['invalidheight'] = 'The height has to be a valid number greater than or
$string['invalidwidth'] = 'The width has to be a valid number greater than or equal to 0.'; $string['invalidwidth'] = 'The width has to be a valid number greater than or equal to 0.';
$string['pluginname'] = 'Image'; $string['pluginname'] = 'Image';
$string['privacy:metadata'] = 'The Image plugin does not store any personal data.'; $string['privacy:metadata'] = 'The Image plugin does not store any personal data.';
$string['systemimage'] = 'Site image: {$a}';
$string['width'] = 'Width'; $string['width'] = 'Width';
$string['width_help'] = 'Width of the image in mm. If equal to zero, it is automatically calculated.'; $string['width_help'] = 'Width of the image in mm. If equal to zero, it is automatically calculated.';