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:
Mark Johnson
2025-08-11 10:55:50 +01:00
parent fb02f4fa9f
commit 47fb08fc6d
2 changed files with 112 additions and 9 deletions
+10 -9
View File
@@ -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();