MDL-50310 glossary: Fix restore of random glossary entry block
When restoring the random glossary entry block, we need to check that the associated glossary has also been included in the backup and is being restored. If not, we must invalidate the block configuration. Before this patch, the block configuration was not invalidated. Additionally, as a result of MDL-20131, the block configuration also contains the course id of the associated glossary (which by the way does not seem to be a wise choice, but I may be missing something). So we need to remap this course id as well to avoid mismatch.
This commit is contained in:
@@ -62,9 +62,16 @@ class restore_glossary_random_block_task extends restore_block_task {
|
||||
if (!empty($config->glossary)) {
|
||||
// Get glossary mapping and replace it in config
|
||||
if ($glossarymap = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary', $config->glossary)) {
|
||||
$config->glossary = $glossarymap->newitemid;
|
||||
$mappedglossary = $DB->get_record('glossary', array('id' => $glossarymap->newitemid),
|
||||
'id,course,globalglossary', MUST_EXIST);
|
||||
$config->glossary = $mappedglossary->id;
|
||||
$config->courseid = $mappedglossary->course;
|
||||
$config->globalglossary = $mappedglossary->globalglossary;
|
||||
$configdata = base64_encode(serialize($config));
|
||||
$DB->set_field('block_instances', 'configdata', $configdata, array('id' => $blockid));
|
||||
} else {
|
||||
// The block refers to a glossary not present in the backup file.
|
||||
$DB->set_field('block_instances', 'configdata', '', array('id' => $blockid));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user