From 3590629dca2530e53eda79b9e5b85f1cda30590e Mon Sep 17 00:00:00 2001 From: Frederik Milling Pytlick Date: Wed, 29 May 2024 14:43:33 +0200 Subject: [PATCH] MDL-54105 mod_assign: Refactored the way that the default is set Improved the way the default is set, now requiring less code and being more readable --- lib/form/modgrade.php | 38 +++++++++++++------------------------- mod/assign/mod_form.php | 11 +++++------ 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/lib/form/modgrade.php b/lib/form/modgrade.php index e08dd223e84..e0107fa3187 100644 --- a/lib/form/modgrade.php +++ b/lib/form/modgrade.php @@ -60,8 +60,8 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { /** @var int $currentscaleid The current scale id */ public $currentscaleid = null; - /** @var ?string $currentgradetype The current gradetype - can either be 'none', 'scale', or 'point' */ - public $currentgradetype = null; + /** @var string $currentgradetype The current gradetype - can either be 'none', 'scale', or 'point' */ + public $currentgradetype = 'none'; /** @var boolean $useratings Set to true if the activity is using ratings, false otherwise */ public $useratings = false; @@ -514,30 +514,18 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { // This means that the subelements data (inc const and default values) can be overridden by form code. // So - when we call this code really we can't be sure that will be the end value for the element. if (!empty($this->_elements)) { - if (!$this->currentgradetype) { - if (!empty($value)) { - $this->currentgradetype = $value < 0 ? 'scale' : 'point'; - } else { - $this->currentgradetype = 'none'; + if (!empty($value)) { + if ($value < 0) { + $this->gradetypeformelement->setValue('scale'); + $this->scaleformelement->setValue(($value * -1)); + } else if ($value > 0) { + $this->gradetypeformelement->setValue('point'); + $maxvalue = !empty($this->currentgrade) ? (string)unformat_float($this->currentgrade) : $value; + $this->maxgradeformelement->setValue($maxvalue); } - } - - $this->gradetypeformelement->setValue($this->currentgradetype); - - switch ($this->currentgradetype) { - case 'scale': - if (!empty($value)) { - $this->currentscaleid = $value * -1; - } - $this->scaleformelement->setValue($this->currentscaleid); - break; - case 'point': - case 'none': - if (!empty($value)) { - $maxvalue = !empty($this->currentgrade) ? (string)unformat_float($this->currentgrade) : $value; - } - $this->maxgradeformelement->setValue($maxvalue ?? 100); - break; + } else { + $this->gradetypeformelement->setValue('none'); + $this->maxgradeformelement->setValue(100); } } break; diff --git a/mod/assign/mod_form.php b/mod/assign/mod_form.php index 332389cc3a9..1140f3b2d11 100644 --- a/mod/assign/mod_form.php +++ b/mod/assign/mod_form.php @@ -377,15 +377,16 @@ class mod_assign_mod_form extends moodleform_mod { $element = $mform->getElement('grade'); if (property_exists($settings, 'defaultgradetype')) { + $modgradetype = $element->getName() . '[modgrade_type]'; switch ((int)$settings->defaultgradetype) { case GRADE_TYPE_NONE : - $element->currentgradetype = 'none'; + $mform->setDefault($modgradetype, 'none'); break; case GRADE_TYPE_SCALE : - $element->currentgradetype = 'scale'; + $mform->setDefault($modgradetype, 'scale'); break; case GRADE_TYPE_VALUE : - $element->currentgradetype = 'point'; + $mform->setDefault($modgradetype, 'point'); break; } } @@ -395,11 +396,9 @@ class mod_assign_mod_form extends moodleform_mod { $gradescale = grade_scale::fetch(['id' => (int)$settings->defaultgradescale, 'courseid' => 0]); if ($gradescale) { - $element->currentscaleid = $gradescale->id; + $mform->setDefault($element->getName() . '[modgrade_scale]', $gradescale->id); } } - - $element->onQuickFormEvent('updateValue', null, $mform); } } }