From 9f2c6659997ba40d4def5137f21b6548cbe11f11 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Mon, 4 Nov 2019 14:37:46 +0100 Subject: [PATCH] MDL-67084 core_form: duration element should export arrays --- lib/form/duration.php | 8 ++++---- lib/form/tests/duration_test.php | 34 ++++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/lib/form/duration.php b/lib/form/duration.php index 7fecd867fbb..d1c8eee40aa 100644 --- a/lib/form/duration.php +++ b/lib/form/duration.php @@ -241,10 +241,10 @@ class MoodleQuickForm_duration extends MoodleQuickForm_group { * Override of standard quickforms method. * * @param array $submitValues - * @param bool $notused Not used. + * @param bool $assoc whether to return the value as associative array * @return array field name => value. The value is the time interval in seconds. */ - function exportValue(&$submitValues, $notused = false) { + function exportValue(&$submitValues, $assoc = false) { // Get the values from all the child elements. $valuearray = array(); foreach ($this->_elements as $element) { @@ -259,8 +259,8 @@ class MoodleQuickForm_duration extends MoodleQuickForm_group { return null; } if ($this->_options['optional'] && empty($valuearray['enabled'])) { - return array($this->getName() => 0); + return $this->_prepareValue(0, $assoc); } - return array($this->getName() => $valuearray['number'] * $valuearray['timeunit']); + return $this->_prepareValue($valuearray['number'] * $valuearray['timeunit'], $assoc); } } diff --git a/lib/form/tests/duration_test.php b/lib/form/tests/duration_test.php index 35900d9372a..af5bba5d521 100644 --- a/lib/form/tests/duration_test.php +++ b/lib/form/tests/duration_test.php @@ -108,25 +108,43 @@ class core_form_duration_testcase extends basic_testcase { * Testcase to check generated timestamp */ public function test_exportValue() { + /** @var MoodleQuickForm_duration $el */ $el = $this->mform->addElement('duration', 'testel'); $values = array('testel' => array('number' => 10, 'timeunit' => 1)); - $this->assertEquals(array('testel' => 10), $el->exportValue($values)); + $this->assertEquals(array('testel' => 10), $el->exportValue($values, true)); + $this->assertEquals(10, $el->exportValue($values)); $values = array('testel' => array('number' => 3, 'timeunit' => 60)); - $this->assertEquals(array('testel' => 180), $el->exportValue($values)); + $this->assertEquals(array('testel' => 180), $el->exportValue($values, true)); + $this->assertEquals(180, $el->exportValue($values)); $values = array('testel' => array('number' => 1.5, 'timeunit' => 60)); - $this->assertEquals(array('testel' => 90), $el->exportValue($values)); + $this->assertEquals(array('testel' => 90), $el->exportValue($values, true)); + $this->assertEquals(90, $el->exportValue($values)); $values = array('testel' => array('number' => 2, 'timeunit' => 3600)); - $this->assertEquals(array('testel' => 7200), $el->exportValue($values)); + $this->assertEquals(array('testel' => 7200), $el->exportValue($values, true)); + $this->assertEquals(7200, $el->exportValue($values)); $values = array('testel' => array('number' => 1, 'timeunit' => 86400)); - $this->assertEquals(array('testel' => 86400), $el->exportValue($values)); + $this->assertEquals(array('testel' => 86400), $el->exportValue($values, true)); + $this->assertEquals(86400, $el->exportValue($values)); $values = array('testel' => array('number' => 0, 'timeunit' => 3600)); - $this->assertEquals(array('testel' => 0), $el->exportValue($values)); + $this->assertEquals(array('testel' => 0), $el->exportValue($values, true)); + $this->assertEquals(0, $el->exportValue($values)); $el = $this->mform->addElement('duration', 'testel', null, array('optional' => true)); $values = array('testel' => array('number' => 10, 'timeunit' => 1)); - $this->assertEquals(array('testel' => 0), $el->exportValue($values)); + $this->assertEquals(array('testel' => 0), $el->exportValue($values, true)); + $this->assertEquals(0, $el->exportValue($values)); $values = array('testel' => array('number' => 20, 'timeunit' => 1, 'enabled' => 1)); - $this->assertEquals(array('testel' => 20), $el->exportValue($values)); + $this->assertEquals(array('testel' => 20), $el->exportValue($values, true)); + $this->assertEquals(20, $el->exportValue($values)); + + // Optional element. + $el2 = $this->mform->addElement('duration', 'testel', '', ['optional' => true]); + $values = array('testel' => array('number' => 10, 'timeunit' => 1, 'enabled' => 1)); + $this->assertEquals(array('testel' => 10), $el2->exportValue($values, true)); + $this->assertEquals(10, $el2->exportValue($values)); + $values = array('testel' => array('number' => 10, 'timeunit' => 1, 'enabled' => 0)); + $this->assertEquals(array('testel' => 0), $el2->exportValue($values, true)); + $this->assertEquals(null, $el2->exportValue($values)); } }