MDL-85166 question: Update move_question_set_references
This backports the applicable part of MDL-85210 to 4.5. move_question_set_references expected the set reference to use the old filter format. This change converts the filter to the new format if required, before updating the category and context ids.
This commit is contained in:
+10
-9
@@ -782,16 +782,17 @@ function move_question_set_references(int $oldcategoryid, int $newcatgoryid,
|
||||
if ($delete || $oldcontextid !== $newcontextid) {
|
||||
$setreferences = $DB->get_recordset('question_set_references', ['questionscontextid' => $oldcontextid]);
|
||||
foreach ($setreferences as $setreference) {
|
||||
$filter = json_decode($setreference->filtercondition);
|
||||
if (isset($filter->questioncategoryid)) {
|
||||
if ((int)$filter->questioncategoryid === $oldcategoryid) {
|
||||
$setreference->questionscontextid = $newcontextid;
|
||||
if ($oldcategoryid !== $newcatgoryid) {
|
||||
$filter->questioncategoryid = $newcatgoryid;
|
||||
$setreference->filtercondition = json_encode($filter);
|
||||
}
|
||||
$DB->update_record('question_set_references', $setreference);
|
||||
$filter = json_decode($setreference->filtercondition, true);
|
||||
if (isset($filter['questioncategoryid'])) {
|
||||
$filter = question_reference_manager::convert_legacy_set_reference_filter_condition($filter);
|
||||
}
|
||||
if ((int)$filter['filter']['category']['values'][0] === $oldcategoryid) {
|
||||
$setreference->questionscontextid = $newcontextid;
|
||||
if ($oldcategoryid !== $newcatgoryid) {
|
||||
$filter['filter']['category']['values'][0] = $newcatgoryid;
|
||||
$setreference->filtercondition = json_encode($filter);
|
||||
}
|
||||
$DB->update_record('question_set_references', $setreference);
|
||||
}
|
||||
}
|
||||
$setreferences->close();
|
||||
|
||||
Reference in New Issue
Block a user