From ffb62740c0b40dea1d7c47083172ad2ef66ce56d Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Fri, 25 Feb 2022 17:04:03 +0000 Subject: [PATCH 1/2] MDL-72377 grade: increase size of category hidden fields. As well as storing 1/0 to indicate hidden state, they are also used to store a timestamp indicating hidden until date. Increasing field size allows these values to be stored without triggering exceptions. --- lib/db/install.xml | 4 ++-- lib/db/upgrade.php | 20 ++++++++++++++++++++ version.php | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/db/install.xml b/lib/db/install.xml index 8bcf134caa9..e2ccdc0dbdf 100644 --- a/lib/db/install.xml +++ b/lib/db/install.xml @@ -1927,7 +1927,7 @@ - + @@ -2068,7 +2068,7 @@ - + diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 3779a9a7992..d98304772b9 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -4494,5 +4494,25 @@ privatefiles,moodle|/user/files.php'; upgrade_main_savepoint(true, 2022041900.03); } + if ($oldversion < 2022041901.05) { + + // Changing precision of field hidden on table grade_categories to (10). + $table = new xmldb_table('grade_categories'); + $field = new xmldb_field('hidden', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'timemodified'); + + // Launch change of precision for field hidden. + $dbman->change_field_precision($table, $field); + + // Changing precision of field hidden on table grade_categories_history to (10). + $table = new xmldb_table('grade_categories_history'); + $field = new xmldb_field('hidden', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'aggregatesubcats'); + + // Launch change of precision for field hidden. + $dbman->change_field_precision($table, $field); + + // Main savepoint reached. + upgrade_main_savepoint(true, 2022041901.05); + } + return true; } diff --git a/version.php b/version.php index c74d2297f9e..8214cb84d84 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2022041901.04; // 20220419 = branching date YYYYMMDD - do not modify! +$version = 2022041901.05; // 20220419 = branching date YYYYMMDD - do not modify! // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '4.0.1+ (Build: 20220603)'; // Human-friendly version name From 76f327d19566c3007a64a1804f67e90650a4c570 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Fri, 25 Feb 2022 17:38:31 +0000 Subject: [PATCH 2/2] MDL-72377 grade: fix category form hidden/until fields. Ensure the saved values for the hidden and hidden until fields are populated when editing a grade category. Fix behaviour on enabling the hidden until field. Re-enable tests commented out in eba1d32c. --- grade/edit/tree/category_form.php | 9 +++++++-- grade/edit/tree/grade_form.php | 2 +- grade/edit/tree/outcomeitem_form.php | 2 +- grade/tests/external/create_gradecategories_test.php | 3 +-- lib/tests/grades_externallib_test.php | 3 +-- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/grade/edit/tree/category_form.php b/grade/edit/tree/category_form.php index f9705d272c0..7c5cae46b43 100644 --- a/grade/edit/tree/category_form.php +++ b/grade/edit/tree/category_form.php @@ -229,7 +229,7 @@ class edit_category_form extends moodleform { $mform->addElement('checkbox', 'grade_item_hidden', get_string('hidden', 'grades')); $mform->addHelpButton('grade_item_hidden', 'hidden', 'grades'); $mform->addElement('date_time_selector', 'grade_item_hiddenuntil', get_string('hiddenuntil', 'grades'), array('optional'=>true)); - $mform->disabledIf('grade_item_hidden', 'grade_item_hiddenuntil[off]', 'notchecked'); + $mform->disabledIf('grade_item_hidden', 'grade_item_hiddenuntil[enabled]', 'checked'); /// locking $mform->addElement('checkbox', 'grade_item_locked', get_string('locked', 'grades')); @@ -440,7 +440,12 @@ class edit_category_form extends moodleform { $grade_category = grade_category::fetch(array('id'=>$id)); $grade_item = $grade_category->load_grade_item(); - $mform->setDefault('grade_item_hidden', (int) $grade_item->hidden); + // Load appropriate "hidden"/"hidden until" defaults. + if ($grade_item->is_hiddenuntil()) { + $mform->setDefault('grade_item_hiddenuntil', $grade_item->get_hidden()); + } else { + $mform->setDefault('grade_item_hidden', $grade_item->get_hidden()); + } if ($grade_item->is_outcome_item()) { // we have to prevent incompatible modifications of outcomes if outcomes disabled diff --git a/grade/edit/tree/grade_form.php b/grade/edit/tree/grade_form.php index be8a0a69a22..9f468cf3170 100644 --- a/grade/edit/tree/grade_form.php +++ b/grade/edit/tree/grade_form.php @@ -93,7 +93,7 @@ class edit_grade_form extends moodleform { $mform->addElement('checkbox', 'hidden', get_string('hidden', 'grades')); $mform->addHelpButton('hidden', 'hidden', 'grades'); $mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddenuntil', 'grades'), array('optional'=>true)); - $mform->disabledIf('hidden', 'hiddenuntil[off]', 'notchecked'); + $mform->disabledIf('hidden', 'hiddenuntil[enabled]', 'checked'); /// locking $mform->addElement('advcheckbox', 'locked', get_string('locked', 'grades')); diff --git a/grade/edit/tree/outcomeitem_form.php b/grade/edit/tree/outcomeitem_form.php index 285acbed4c3..0851c7bd8c2 100644 --- a/grade/edit/tree/outcomeitem_form.php +++ b/grade/edit/tree/outcomeitem_form.php @@ -78,7 +78,7 @@ class edit_outcomeitem_form extends moodleform { $mform->addElement('checkbox', 'hidden', get_string('hidden', 'grades')); $mform->addHelpButton('hidden', 'hidden', 'grades'); $mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddenuntil', 'grades'), array('optional'=>true)); - $mform->disabledIf('hidden', 'hiddenuntil[off]', 'notchecked'); + $mform->disabledIf('hidden', 'hiddenuntil[enabled]', 'checked'); //locking $mform->addElement('advcheckbox', 'locked', get_string('locked', 'grades')); diff --git a/grade/tests/external/create_gradecategories_test.php b/grade/tests/external/create_gradecategories_test.php index 433c5b06649..ef4295ce4e7 100644 --- a/grade/tests/external/create_gradecategories_test.php +++ b/grade/tests/external/create_gradecategories_test.php @@ -69,7 +69,6 @@ class create_gradecategories_test extends \externallib_advanced_testcase { // Check the path is correct. $this->assertEquals('/' . implode('/', [$courseparentcat->id, $record1->id, $record2->id]) . '/', $record2->path); - /* MDL-72377 commenting broken test. // Now create a category with some customised data and check the returns. This customises every value. $customopts = [ 'aggregation' => GRADE_AGGREGATE_MEAN, @@ -118,7 +117,7 @@ class create_gradecategories_test extends \externallib_advanced_testcase { $this->assertEquals(1, $cat3->grade_item->weightoverride); // Coefficient is converted to percentage. $this->assertEquals(0.2, $cat3->grade_item->aggregationcoef2); - $this->assertEquals($record2->id, $cat3->parent);*/ + $this->assertEquals($record2->id, $cat3->parent); // Now test creating 2 in parallel, and nesting them. $status4 = create_gradecategories::execute($course->id, [ diff --git a/lib/tests/grades_externallib_test.php b/lib/tests/grades_externallib_test.php index e5c3fa38d90..161849bad8b 100644 --- a/lib/tests/grades_externallib_test.php +++ b/lib/tests/grades_externallib_test.php @@ -307,7 +307,6 @@ class core_grades_external_testcase extends externallib_advanced_testcase { // Check the path is correct. $this->assertEquals('/' . implode('/', [$courseparentcat->id, $record1->id, $record2->id]) . '/', $record2->path); - /* MDL-72377 commenting broken test. // Now create a category with some customised data and check the returns. This customises every value. $customopts = [ 'aggregation' => GRADE_AGGREGATE_MEAN, @@ -354,7 +353,7 @@ class core_grades_external_testcase extends externallib_advanced_testcase { $this->assertEquals(1, $cat3->grade_item->weightoverride); // Coefficient is converted to percentage. $this->assertEquals(0.2, $cat3->grade_item->aggregationcoef2); - $this->assertEquals($record2->id, $cat3->parent);*/ + $this->assertEquals($record2->id, $cat3->parent); } }