From 92b15ecb062b0e609d6dad3e34e4f60a4e1095d5 Mon Sep 17 00:00:00 2001 From: Dmitrii Metelkin Date: Fri, 27 Jul 2018 10:59:01 +1000 Subject: [PATCH] Change a way of displaying date ranges on the edit element page (#185) --- element/daterange/classes/element.php | 81 ++++++++++--------- .../lang/en/customcertelement_daterange.php | 2 +- element/daterange/styles.css | 3 + 3 files changed, 48 insertions(+), 38 deletions(-) create mode 100644 element/daterange/styles.css diff --git a/element/daterange/classes/element.php b/element/daterange/classes/element.php index 691f6a1..cdd49fc 100644 --- a/element/daterange/classes/element.php +++ b/element/daterange/classes/element.php @@ -119,44 +119,52 @@ class element extends \mod_customcert\element { for ($i = 0; $i < $maxranges; $i++) { $datarange = array(); - $datarange[] = $mform->createElement( - 'date_selector', - $this->build_element_name('startdate', $i), - get_string('start', 'customcertelement_daterange') + $mform->addElement('static', + $this->build_element_name('group', $i), + get_string('daterange', 'customcertelement_daterange', $i + 1), + '' ); - $datarange[] = $mform->createElement( - 'date_selector', - $this->build_element_name('enddate', $i), - get_string('end', 'customcertelement_daterange') - ); - - $datarange[] = $mform->createElement( - 'text', - $this->build_element_name('datestring', $i), - get_string('datestring', 'customcertelement_daterange') - ); - - $datarange[] = $mform->createElement( - 'checkbox', - $this->build_element_name('recurring', $i), - get_string('recurring', 'customcertelement_daterange') - ); - - $datarange[] = $mform->createElement( + $mform->addElement( 'checkbox', $this->build_element_name('enabled', $i), get_string('enable') ); + $mform->setType($this->build_element_name('enabled', $i), PARAM_BOOL); $mform->addElement( - 'group', - $this->build_element_name('group', $i), - get_string('daterange', 'customcertelement_daterange', $i + 1), - $datarange, '', false); + 'date_selector', + $this->build_element_name('startdate', $i), + get_string('start', 'customcertelement_daterange') + ); + $mform->setType($this->build_element_name('startdate', $i), PARAM_INT); - $mform->disabledIf($this->build_element_name('group', $i), $this->build_element_name('enabled', $i), 'notchecked'); + $mform->addElement( + 'date_selector', + $this->build_element_name('enddate', $i), + get_string('end', 'customcertelement_daterange') + ); + $mform->setType($this->build_element_name('enddate', $i), PARAM_INT); + + $mform->addElement( + 'checkbox', + $this->build_element_name('recurring', $i), + get_string('recurring', 'customcertelement_daterange') + ); + $mform->setType($this->build_element_name('recurring', $i), PARAM_BOOL); + + $mform->addElement( + 'text', + $this->build_element_name('datestring', $i), + get_string('datestring', 'customcertelement_daterange'), + ['class' => 'datestring'] + ); $mform->setType($this->build_element_name('datestring', $i), PARAM_NOTAGS); + + $mform->disabledIf($this->build_element_name('startdate', $i), $this->build_element_name('enabled', $i), 'notchecked'); + $mform->disabledIf($this->build_element_name('enddate', $i), $this->build_element_name('enabled', $i), 'notchecked'); + $mform->disabledIf($this->build_element_name('recurring', $i), $this->build_element_name('enabled', $i), 'notchecked'); + $mform->disabledIf($this->build_element_name('datestring', $i), $this->build_element_name('enabled', $i), 'notchecked'); } } @@ -201,13 +209,11 @@ class element extends \mod_customcert\element { } foreach ($this->get_decoded_data()->dateranges as $key => $range) { - $groupelement = $mform->getElement($this->build_element_name('group', $key)); - $groupelements = $groupelement->getElements(); - $mform->setDefault($groupelements[0]->getName(), $range->startdate); - $mform->setDefault($groupelements[1]->getName(), $range->enddate); - $mform->setDefault($groupelements[2]->getName(), $range->datestring); - $mform->setDefault($groupelements[3]->getName(), $range->recurring); - $mform->setDefault($groupelements[4]->getName(), $range->enabled); + $mform->setDefault($this->build_element_name('startdate', $key), $range->startdate); + $mform->setDefault($this->build_element_name('enddate', $key), $range->enddate); + $mform->setDefault($this->build_element_name('datestring', $key), $range->datestring); + $mform->setDefault($this->build_element_name('recurring', $key), $range->recurring); + $mform->setDefault($this->build_element_name('enabled', $key), $range->enabled); } } @@ -241,7 +247,8 @@ class element extends \mod_customcert\element { $enabled = $this->build_element_name('enabled', $i); $datestring = $this->build_element_name('datestring', $i); if (!empty($data[$enabled]) && empty($data[$datestring])) { - $errors[$this->build_element_name('group', $i)] = get_string('error:datestring', 'customcertelement_daterange'); + $name = $this->build_element_name('datestring', $i); + $errors[$name] = get_string('error:datestring', 'customcertelement_daterange'); } } @@ -252,7 +259,7 @@ class element extends \mod_customcert\element { $enddate = $this->build_element_name('enddate', $i); if (!empty($data[$enabled]) && $data[$startdate] >= $data[$enddate] ) { - $errors[$this->build_element_name('group', $i)] = get_string('error:enddate', 'customcertelement_daterange'); + $errors[$this->build_element_name('enddate', $i)] = get_string('error:enddate', 'customcertelement_daterange'); } } diff --git a/element/daterange/lang/en/customcertelement_daterange.php b/element/daterange/lang/en/customcertelement_daterange.php index f185d6e..e84b76c 100644 --- a/element/daterange/lang/en/customcertelement_daterange.php +++ b/element/daterange/lang/en/customcertelement_daterange.php @@ -41,7 +41,7 @@ $string['pluginname'] = 'Date range'; $string['privacy:metadata'] = 'The Date range plugin does not store any personal data.'; $string['start'] = 'Start'; $string['end'] = 'End'; -$string['datestring'] = 'String representation'; +$string['datestring'] = 'String'; $string['daterange'] = 'Daterange {$a}'; $string['error:enabled'] = 'You must have at least one datarange enabled'; $string['error:datestring'] = 'You must provide string representation for the enabled datarange'; diff --git a/element/daterange/styles.css b/element/daterange/styles.css new file mode 100644 index 0000000..3f78e0e --- /dev/null +++ b/element/daterange/styles.css @@ -0,0 +1,3 @@ +.datestring { + padding-bottom: 1.5rem!important; +} \ No newline at end of file