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:
parent
8a2b7290af
commit
48c83d34df
2 changed files with 50 additions and 2 deletions
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.';
|
||||||
|
|
Loading…
Reference in a new issue