This commit is contained in:
Shamim Rezaie 2024-01-03 00:09:17 +11:00
commit f11f30375d
4 changed files with 47 additions and 2 deletions

View File

@ -920,5 +920,26 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2023122100.01);
}
if ($oldversion < 2023122100.02) {
$sqllike = $DB->sql_like('filtercondition', '?');
$params[] = '%includesubcategories%';
$sql = "SELECT qsr.* FROM {question_set_references} qsr WHERE $sqllike";
$results = $DB->get_recordset_sql($sql, $params);
foreach ($results as $result) {
$filtercondition = json_decode($result->filtercondition);
if (isset($filtercondition->filter->category->includesubcategories)) {
$filtercondition->filter->category->filteroptions =
['includesubcategories' => $filtercondition->filter->category->includesubcategories];
unset($filtercondition->filter->category->includesubcategories);
$result->filtercondition = json_encode($filtercondition);
$DB->update_record('question_set_references', $result);
}
}
$results->close();
upgrade_main_savepoint(true, 2023122100.02);
}
return true;
}

View File

@ -16,6 +16,8 @@
namespace mod_quiz;
use core_question\question_reference_manager;
defined('MOODLE_INTERNAL') || die();
global $CFG;
@ -558,6 +560,12 @@ class quiz_question_restore_test extends \advanced_testcase {
$this->assertArrayHasKey('filter', $filterconditions);
$this->assertArrayHasKey('category', $filterconditions['filter']);
$this->assertArrayHasKey('qtagids', $filterconditions['filter']);
$this->assertArrayHasKey('filteroptions', $filterconditions['filter']['category']);
$this->assertArrayHasKey('includesubcategories', $filterconditions['filter']['category']['filteroptions']);
// MDL-79708: Bad filter conversion check.
$this->assertArrayNotHasKey('includesubcategories', $filterconditions['filter']['category']);
$this->assertArrayNotHasKey('questioncategoryid', $filterconditions);
$this->assertArrayNotHasKey('tags', $filterconditions);
$expectedtags = \core_tag_tag::get_by_name_bulk(1, ['foo', 'bar']);
@ -567,6 +575,18 @@ class quiz_question_restore_test extends \advanced_testcase {
$this->assertEquals($expectedcategory->id, $filterconditions['filter']['category']['values'][0]);
$expectedcat = implode(',', [$expectedcategory->id, $expectedcategory->contextid]);
$this->assertEquals($expectedcat, $filterconditions['cat']);
// MDL-79708: Try to convert already converted filter.
$filterconditionsold = $filterconditions;
$filterconditions = question_reference_manager::convert_legacy_set_reference_filter_condition($filterconditions);
// Check that the filtercondition didn't change.
$this->assertEquals($filterconditionsold, $filterconditions);
// MDL-79708: Try to convert a filter with previously bad conversion.
$filterconditions['filter']['category']['includesubcategories'] = 0;
unset($filterconditions['filter']['category']['filteroptions']);
$filterconditions = question_reference_manager::convert_legacy_set_reference_filter_condition($filterconditions);
$this->assertEquals($filterconditionsold, $filterconditions);
}
}
}

View File

@ -94,7 +94,7 @@ class question_reference_manager {
$filtercondition['filter']['category'] = [
'jointype' => \qbank_managecategories\category_condition::JOINTYPE_DEFAULT,
'values' => [$filtercondition['questioncategoryid']],
'includesubcategories' => $filtercondition['includingsubcategories'],
'filteroptions' => ['includesubcategories' => $filtercondition['includingsubcategories']],
];
unset($filtercondition['questioncategoryid']);
unset($filtercondition['includingsubcategories']);
@ -119,6 +119,10 @@ class question_reference_manager {
$filtercondition['qpage'] = 0;
$filtercondition['qperpage'] = 100;
$filtercondition['jointype'] = \core\output\datafilter::JOINTYPE_ALL;
} else if (isset($filtercondition['filter']['category']['includesubcategories'])) {
$filtercondition['filter']['category']['filteroptions'] =
['includesubcategories' => $filtercondition['filter']['category']['includesubcategories']];
unset($filtercondition['filter']['category']['includesubcategories']);
}
return $filtercondition;
}

View File

@ -29,7 +29,7 @@
defined('MOODLE_INTERNAL') || die();
$version = 2023122100.01; // YYYYMMDD = weekly release date of this DEV branch.
$version = 2023122100.02; // YYYYMMDD = weekly release date of this DEV branch.
// RR = release increments - 00 in DEV branches.
// .XX = incremental changes.
$release = '4.4dev (Build: 20231221)'; // Human-friendly version name