From eafd1bcb17689ea7ba29f2c70933855d2dd8ccab Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Thu, 4 Jul 2024 09:58:44 +0100 Subject: [PATCH] MDL-82090 completion: account for alternate gradepass form fields. Some modules (e.g. Workshop) have "*gradepass" fields for each grade item, which should be accounted for when trying to freeze them. --- completion/classes/form/form_trait.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/completion/classes/form/form_trait.php b/completion/classes/form/form_trait.php index 1ba0e59b6b7..2c4bccc5813 100644 --- a/completion/classes/form/form_trait.php +++ b/completion/classes/form/form_trait.php @@ -484,9 +484,20 @@ trait form_trait { $mform->freeze($completionpassgradeel); // Has the completion pass grade completion criteria been set? If it has, then we shouldn't change - // the gradepass field. + // any of the modules "gradepass" type fields. if ($mform->exportValue($completionpassgradeel)) { - $mform->freeze('gradepass'); + + // Some modules define separate "gradepass" fields for each of their grade items. + $gradepassfieldels = array_merge(['gradepass'], array_map( + fn(string $gradeitem) => "{$gradeitem}gradepass", + component_gradeitems::get_itemname_mapping_for_component("mod_{$this->_modname}"), + )); + + foreach ($gradepassfieldels as $gradepassfieldel) { + if ($mform->elementExists($gradepassfieldel)) { + $mform->freeze($gradepassfieldel); + } + } } } $completiongradeitemnumberel = 'completiongradeitemnumber' . $suffix;