diff --git a/calendar/tests/calendartype_test.php b/calendar/tests/calendartype_test.php index c124477dc83..a8ccc858ddb 100644 --- a/calendar/tests/calendartype_test.php +++ b/calendar/tests/calendartype_test.php @@ -50,6 +50,8 @@ require_once($CFG->dirroot . '/user/profile/index_field_form.php'); * @since Moodle 2.6 */ class core_calendar_type_testcase extends advanced_testcase { + /** @var MoodleQuickForm Keeps reference of dummy form object */ + private $mform; /** * The test user. @@ -63,6 +65,10 @@ class core_calendar_type_testcase extends advanced_testcase { // The user we are going to test this on. $this->user = self::getDataGenerator()->create_user(); self::setUser($this->user); + + // Get form data. + $form = new temp_form_calendartype(); + $this->mform = $form->getform(); } /** @@ -216,15 +222,17 @@ class core_calendar_type_testcase extends advanced_testcase { private function convert_dateselector_to_unixtime_test($element, $type, $date) { $this->set_calendar_type($type); - if ($element == 'dateselector') { - $el = new MoodleQuickForm_date_selector('dateselector', null, array('timezone' => 0.0, 'step' => 1)); - } else { - $el = new MoodleQuickForm_date_time_selector('dateselector', null, array('timezone' => 0.0, 'step' => 1)); - } - $el->_createElements(); - $submitvalues = array('dateselector' => $date); + static $counter = 0; + $counter++; - $this->assertSame($el->exportValue($submitvalues), array('dateselector' => $date['timestamp'])); + if ($element == 'dateselector') { + $el = $this->mform->addElement('date_selector', 'dateselector' . $counter, null, array('timezone' => 0.0, 'step' => 1)); + } else { + $el = $this->mform->addElement('date_time_selector', 'dateselector' . $counter, null, array('timezone' => 0.0, 'step' => 1, 'optional' => false)); + } + $submitvalues = array('dateselector' . $counter => $date); + + $this->assertSame($el->exportValue($submitvalues), array('dateselector' . $counter => $date['timestamp'])); } /** @@ -300,3 +308,25 @@ class core_calendar_type_testcase extends advanced_testcase { \core\session\manager::set_user($this->user); } } + +/** + * Form object to be used in test case. + */ +class temp_form_calendartype extends moodleform { + /** + * Form definition. + */ + public function definition() { + // No definition required. + } + /** + * Returns form reference + * @return MoodleQuickForm + */ + public function getform() { + $mform = $this->_form; + // Set submitted flag, to simulate submission. + $mform->_flagSubmitted = true; + return $mform; + } +} diff --git a/lib/form/dateselector.php b/lib/form/dateselector.php index 29957e3d904..0c8ed846a3c 100644 --- a/lib/form/dateselector.php +++ b/lib/form/dateselector.php @@ -130,18 +130,18 @@ class MoodleQuickForm_date_selector extends MoodleQuickForm_group { $dateformat = $calendartype->get_date_order($this->_options['startyear'], $this->_options['stopyear']); foreach ($dateformat as $key => $value) { // E_STRICT creating elements without forms is nasty because it internally uses $this - $this->_elements[] = @MoodleQuickForm::createElement('select', $key, get_string($key, 'form'), $value, $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('select', $key, get_string($key, 'form'), $value, $this->getAttributes(), true); } // The YUI2 calendar only supports the gregorian calendar type so only display the calendar image if this is being used. if ($calendartype->get_name() === 'gregorian') { $image = $OUTPUT->pix_icon('i/calendar', get_string('calendar', 'calendar'), 'moodle'); - $this->_elements[] = @MoodleQuickForm::createElement('link', 'calendar', + $this->_elements[] = $this->createFormElement('link', 'calendar', null, '#', $image, array('class' => 'visibleifjs')); } // If optional we add a checkbox which the user can use to turn if on if ($this->_options['optional']) { - $this->_elements[] = @MoodleQuickForm::createElement('checkbox', 'enabled', null, get_string('enable'), $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('checkbox', 'enabled', null, get_string('enable'), $this->getAttributes(), true); } foreach ($this->_elements as $element){ if (method_exists($element, 'setHiddenLabel')){ @@ -160,6 +160,7 @@ class MoodleQuickForm_date_selector extends MoodleQuickForm_group { * @return bool */ function onQuickFormEvent($event, $arg, &$caller) { + $this->setMoodleForm($caller); switch ($event) { case 'updateValue': // Constant values override both default and submitted ones diff --git a/lib/form/datetimeselector.php b/lib/form/datetimeselector.php index 8055f026e6f..760deae5ba0 100644 --- a/lib/form/datetimeselector.php +++ b/lib/form/datetimeselector.php @@ -139,25 +139,25 @@ class MoodleQuickForm_date_time_selector extends MoodleQuickForm_group { $dateformat = $calendartype->get_date_order($this->_options['startyear'], $this->_options['stopyear']); foreach ($dateformat as $key => $date) { // E_STRICT creating elements without forms is nasty because it internally uses $this - $this->_elements[] = @MoodleQuickForm::createElement('select', $key, get_string($key, 'form'), $date, $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('select', $key, get_string($key, 'form'), $date, $this->getAttributes(), true); } if (right_to_left()) { // Switch order of elements for Right-to-Left - $this->_elements[] = @MoodleQuickForm::createElement('select', 'minute', get_string('minute', 'form'), $minutes, $this->getAttributes(), true); - $this->_elements[] = @MoodleQuickForm::createElement('select', 'hour', get_string('hour', 'form'), $hours, $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('select', 'minute', get_string('minute', 'form'), $minutes, $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('select', 'hour', get_string('hour', 'form'), $hours, $this->getAttributes(), true); } else { - $this->_elements[] = @MoodleQuickForm::createElement('select', 'hour', get_string('hour', 'form'), $hours, $this->getAttributes(), true); - $this->_elements[] = @MoodleQuickForm::createElement('select', 'minute', get_string('minute', 'form'), $minutes, $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('select', 'hour', get_string('hour', 'form'), $hours, $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('select', 'minute', get_string('minute', 'form'), $minutes, $this->getAttributes(), true); } // The YUI2 calendar only supports the gregorian calendar type so only display the calendar image if this is being used. if ($calendartype->get_name() === 'gregorian') { $image = $OUTPUT->pix_icon('i/calendar', get_string('calendar', 'calendar'), 'moodle'); - $this->_elements[] = @MoodleQuickForm::createElement('link', 'calendar', + $this->_elements[] = $this->createFormElement('link', 'calendar', null, '#', $image, array('class' => 'visibleifjs')); } // If optional we add a checkbox which the user can use to turn if on if ($this->_options['optional']) { - $this->_elements[] = @MoodleQuickForm::createElement('checkbox', 'enabled', null, get_string('enable'), $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('checkbox', 'enabled', null, get_string('enable'), $this->getAttributes(), true); } foreach ($this->_elements as $element){ if (method_exists($element, 'setHiddenLabel')){ @@ -176,6 +176,7 @@ class MoodleQuickForm_date_time_selector extends MoodleQuickForm_group { * @return bool */ function onQuickFormEvent($event, $arg, &$caller) { + $this->setMoodleForm($caller); switch ($event) { case 'updateValue': // Constant values override both default and submitted ones diff --git a/lib/form/duration.php b/lib/form/duration.php index ab2d43462ac..c921d1432b2 100644 --- a/lib/form/duration.php +++ b/lib/form/duration.php @@ -144,12 +144,12 @@ class MoodleQuickForm_duration extends MoodleQuickForm_group { } $this->_elements = array(); // E_STRICT creating elements without forms is nasty because it internally uses $this - $this->_elements[] = @MoodleQuickForm::createElement('text', 'number', get_string('time', 'form'), $attributes, true); + $this->_elements[] = $this->createFormElement('text', 'number', get_string('time', 'form'), $attributes, true); unset($attributes['size']); - $this->_elements[] = @MoodleQuickForm::createElement('select', 'timeunit', get_string('timeunit', 'form'), $this->get_units(), $attributes, true); + $this->_elements[] = $this->createFormElement('select', 'timeunit', get_string('timeunit', 'form'), $this->get_units(), $attributes, true); // If optional we add a checkbox which the user can use to turn if on if($this->_options['optional']) { - $this->_elements[] = @MoodleQuickForm::createElement('checkbox', 'enabled', null, get_string('enable'), $this->getAttributes(), true); + $this->_elements[] = $this->createFormElement('checkbox', 'enabled', null, get_string('enable'), $this->getAttributes(), true); } foreach ($this->_elements as $element){ if (method_exists($element, 'setHiddenLabel')){ @@ -167,6 +167,7 @@ class MoodleQuickForm_duration extends MoodleQuickForm_group { * @return bool */ function onQuickFormEvent($event, $arg, &$caller) { + $this->setMoodleForm($caller); switch ($event) { case 'updateValue': // constant values override both default and submitted ones diff --git a/lib/form/group.php b/lib/form/group.php index 753977f1087..6750d36258c 100644 --- a/lib/form/group.php +++ b/lib/form/group.php @@ -41,6 +41,9 @@ class MoodleQuickForm_group extends HTML_QuickForm_group{ /** @var string html for help button, if empty then no help */ var $_helpbutton=''; + /** @var MoodleQuickForm */ + protected $_mform = null; + /** * constructor * @@ -107,4 +110,41 @@ class MoodleQuickForm_group extends HTML_QuickForm_group{ } } } + + /** + * Stores the form this element was added to + * This object is later used by {@link MoodleQuickForm_group::createElement()} + * @param null|MoodleQuickForm $mform + */ + public function setMoodleForm($mform) { + if ($mform && $mform instanceof MoodleQuickForm) { + $this->_mform = $mform; + } + } + + /** + * Called by HTML_QuickForm whenever form event is made on this element + * + * If this function is overridden and parent is not called the element must be responsible for + * storing the MoodleQuickForm object, see {@link MoodleQuickForm_group::setMoodleForm()} + * + * @param string $event Name of event + * @param mixed $arg event arguments + * @param mixed $caller calling object + */ + public function onQuickFormEvent($event, $arg, &$caller) { + $this->setMoodleForm($caller); + return parent::onQuickFormEvent($event, $arg, $caller); + } + + /** + * Creates an element to add to the group + * Expects the same arguments as MoodleQuickForm::createElement() + */ + public function createFormElement() { + if (!$this->_mform) { + throw new coding_exception('You can not call createFormElement() on the group element that was not yet added to a form.'); + } + return call_user_func_array([$this->_mform, 'createElement'], func_get_args()); + } } diff --git a/lib/form/modgrade.php b/lib/form/modgrade.php index bced16a4883..1be7cc846c2 100644 --- a/lib/form/modgrade.php +++ b/lib/form/modgrade.php @@ -147,7 +147,7 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { // Grade scale select box. $scales = get_scales_menu($COURSE->id); $langscale = get_string('modgradetypescale', 'grades'); - $this->scaleformelement = @MoodleQuickForm::createElement('select', 'modgrade_scale', $langscale, + $this->scaleformelement = $this->createFormElement('select', 'modgrade_scale', $langscale, $scales, $attributes); $this->scaleformelement->setHiddenLabel = false; $scaleformelementid = $this->generate_modgrade_subelement_id('modgrade_scale'); @@ -155,7 +155,7 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { // Maximum grade textbox. $langmaxgrade = get_string('modgrademaxgrade', 'grades'); - $this->maxgradeformelement = @MoodleQuickForm::createElement('text', 'modgrade_point', $langmaxgrade, array()); + $this->maxgradeformelement = $this->createFormElement('text', 'modgrade_point', $langmaxgrade, array()); $this->maxgradeformelement->setHiddenLabel = false; $maxgradeformelementid = $this->generate_modgrade_subelement_id('modgrade_point'); $this->maxgradeformelement->updateAttributes(array('id' => $maxgradeformelementid)); @@ -167,7 +167,7 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { 'point' => get_string('modgradetypepoint', 'grades'), ); $langtype = get_string('modgradetype', 'grades'); - $this->gradetypeformelement = @MoodleQuickForm::createElement('select', 'modgrade_type', $langtype, $gradetype, + $this->gradetypeformelement = $this->createFormElement('select', 'modgrade_type', $langtype, $gradetype, $attributes, true); $this->gradetypeformelement->setHiddenLabel = false; $gradetypeformelementid = $this->generate_modgrade_subelement_id('modgrade_type'); @@ -184,7 +184,7 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { $choices[''] = get_string('choose'); $choices['no'] = get_string('no'); $choices['yes'] = get_string('yes'); - $rescalegradesselect = @MoodleQuickForm::createElement('select', + $rescalegradesselect = $this->createFormElement('select', 'modgrade_rescalegrades', $langrescalegrades, $choices); @@ -204,23 +204,23 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { } $gradesexisthtml = '
' . $gradesexistmsg . '
'; - $this->_elements[] = @MoodleQuickForm::createElement('static', 'gradesexistmsg', '', $gradesexisthtml); + $this->_elements[] = $this->createFormElement('static', 'gradesexistmsg', '', $gradesexisthtml); } // Grade type select box. $label = html_writer::tag('label', $this->gradetypeformelement->getLabel(), array('for' => $this->gradetypeformelement->getAttribute('id'))); - $this->_elements[] = @MoodleQuickForm::createElement('static', 'gradetypelabel', '', ' '.$label); + $this->_elements[] = $this->createFormElement('static', 'gradetypelabel', '', ' '.$label); $this->_elements[] = $this->gradetypeformelement; - $this->_elements[] = @MoodleQuickForm::createElement('static', 'gradetypespacer', '', '
'); + $this->_elements[] = $this->createFormElement('static', 'gradetypespacer', '', '
'); // Only show the grade scale select box when applicable. if (!$this->isupdate || !$this->hasgrades || $this->currentgradetype == 'scale') { $label = html_writer::tag('label', $this->scaleformelement->getLabel(), array('for' => $this->scaleformelement->getAttribute('id'))); - $this->_elements[] = @MoodleQuickForm::createElement('static', 'scalelabel', '', $label); + $this->_elements[] = $this->createFormElement('static', 'scalelabel', '', $label); $this->_elements[] = $this->scaleformelement; - $this->_elements[] = @MoodleQuickForm::createElement('static', 'scalespacer', '', '
'); + $this->_elements[] = $this->createFormElement('static', 'scalespacer', '', '
'); } if ($this->isupdate && $this->hasgrades && $this->canrescale && $this->currentgradetype == 'point') { @@ -228,18 +228,18 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { $label = html_writer::tag('label', $rescalegradesselect->getLabel(), array('for' => $rescalegradesselect->getAttribute('id'))); $labelhelp = new help_icon('modgraderescalegrades', 'grades'); - $this->_elements[] = @MoodleQuickForm::createElement('static', 'scalelabel', '', $label . $OUTPUT->render($labelhelp)); + $this->_elements[] = $this->createFormElement('static', 'scalelabel', '', $label . $OUTPUT->render($labelhelp)); $this->_elements[] = $rescalegradesselect; - $this->_elements[] = @MoodleQuickForm::createElement('static', 'scalespacer', '', '
'); + $this->_elements[] = $this->createFormElement('static', 'scalespacer', '', '
'); } // Only show the max points form element when applicable. if (!$this->isupdate || !$this->hasgrades || $this->currentgradetype == 'point') { $label = html_writer::tag('label', $this->maxgradeformelement->getLabel(), array('for' => $this->maxgradeformelement->getAttribute('id'))); - $this->_elements[] = @MoodleQuickForm::createElement('static', 'pointlabel', '', $label); + $this->_elements[] = $this->createFormElement('static', 'pointlabel', '', $label); $this->_elements[] = $this->maxgradeformelement; - $this->_elements[] = @MoodleQuickForm::createElement('static', 'pointspacer', '', '
'); + $this->_elements[] = $this->createFormElement('static', 'pointspacer', '', '
'); } } @@ -340,6 +340,7 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group { * @return mixed */ public function onQuickFormEvent($event, $arg, &$caller) { + $this->setMoodleForm($caller); switch ($event) { case 'createElement': // The first argument is the name. diff --git a/lib/form/tests/dateselector_test.php b/lib/form/tests/dateselector_test.php index f6e4e24198d..84727ed8a2f 100644 --- a/lib/form/tests/dateselector_test.php +++ b/lib/form/tests/dateselector_test.php @@ -129,8 +129,8 @@ class core_form_dateselector_testcase extends advanced_testcase { // Create dateselector element with different timezones. $elparams = array('optional'=>false, 'timezone' => $vals['timezone']); - $el = new MoodleQuickForm_date_selector('dateselector', null, $elparams); - $el->_createElements(); + $el = $this->mform->addElement('date_selector', 'dateselector', null, $elparams); + $this->assertTrue($el instanceof MoodleQuickForm_date_selector); $submitvalues = array('dateselector' => $vals); $this->assertSame(array('dateselector' => $vals['timestamp']), $el->exportValue($submitvalues), @@ -153,8 +153,8 @@ class core_form_dateselector_testcase extends advanced_testcase { // Create dateselector element with different timezones. $elparams = array('optional'=>false, 'timezone' => $vals['timezone']); - $el = new MoodleQuickForm_date_selector('dateselector', null, $elparams); - $el->_createElements(); + $el = $this->mform->addElement('date_selector', 'dateselector', null, $elparams); + $this->assertTrue($el instanceof MoodleQuickForm_date_selector); $expectedvalues = array( 'day' => array($vals['day']), 'month' => array($vals['month']), diff --git a/lib/form/tests/datetimeselector_test.php b/lib/form/tests/datetimeselector_test.php index ba188ee35b9..40b69c7b794 100644 --- a/lib/form/tests/datetimeselector_test.php +++ b/lib/form/tests/datetimeselector_test.php @@ -141,8 +141,8 @@ class core_form_datetimeselector_testcase extends advanced_testcase { // Create dateselector element with different timezones. $elparams = array('optional'=>false, 'timezone' => $vals['timezone']); - $el = new MoodleQuickForm_date_time_selector('dateselector', null, $elparams); - $el->_createElements(); + $el = $this->mform->addElement('date_time_selector', 'dateselector', null, $elparams); + $this->assertTrue($el instanceof MoodleQuickForm_date_time_selector); $submitvalues = array('dateselector' => $vals); $this->assertSame(array('dateselector' => $vals['timestamp']), $el->exportValue($submitvalues), @@ -165,8 +165,8 @@ class core_form_datetimeselector_testcase extends advanced_testcase { // Create dateselector element with different timezones. $elparams = array('optional'=>false, 'timezone' => $vals['timezone']); - $el = new MoodleQuickForm_date_time_selector('dateselector', null, $elparams); - $el->_createElements(); + $el = $this->mform->addElement('date_time_selector', 'dateselector', null, $elparams); + $this->assertTrue($el instanceof MoodleQuickForm_date_time_selector); $expectedvalues = array( 'day' => array($vals['day']), 'month' => array($vals['month']), diff --git a/lib/form/tests/duration_test.php b/lib/form/tests/duration_test.php index 3b7f20f9518..35900d9372a 100644 --- a/lib/form/tests/duration_test.php +++ b/lib/form/tests/duration_test.php @@ -41,6 +41,8 @@ require_once($CFG->libdir . '/form/duration.php'); * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class core_form_duration_testcase extends basic_testcase { + /** @var MoodleQuickForm Keeps reference of dummy form object */ + private $mform; /** @var MoodleQuickForm_duration Keeps reference of MoodleQuickForm_duration object */ private $element; @@ -49,7 +51,11 @@ class core_form_duration_testcase extends basic_testcase { */ protected function setUp() { parent::setUp(); - $this->element = new MoodleQuickForm_duration(); + + // Get form data. + $form = new temp_form_duration(); + $this->mform = $form->getform(); + $this->element = $this->mform->addElement('duration', 'duration'); } /** @@ -67,7 +73,7 @@ class core_form_duration_testcase extends basic_testcase { */ public function test_constructor() { // Test trying to create with an invalid unit. - $this->element = new MoodleQuickForm_duration('testel', null, array('defaultunit' => 123)); + $this->element = $this->mform->addElement('duration', 'testel', null, array('defaultunit' => 123, 'optional' => false)); } /** @@ -94,7 +100,7 @@ class core_form_duration_testcase extends basic_testcase { $this->assertEquals(array(1, 86400), $this->element->seconds_to_unit(86400)); $this->assertEquals(array(25, 3600), $this->element->seconds_to_unit(90000)); - $this->element = new MoodleQuickForm_duration('testel', null, array('defaultunit' => 86400)); + $this->element = $this->mform->addElement('duration', 'testel', null, array('defaultunit' => 86400, 'optional' => false)); $this->assertEquals(array(0, 86400), $this->element->seconds_to_unit(0)); // Zero minutes, for a nice default unit. } @@ -102,8 +108,7 @@ class core_form_duration_testcase extends basic_testcase { * Testcase to check generated timestamp */ public function test_exportValue() { - $el = new MoodleQuickForm_duration('testel'); - $el->_createElements(); + $el = $this->mform->addElement('duration', 'testel'); $values = array('testel' => array('number' => 10, 'timeunit' => 1)); $this->assertEquals(array('testel' => 10), $el->exportValue($values)); $values = array('testel' => array('number' => 3, 'timeunit' => 60)); @@ -117,11 +122,32 @@ class core_form_duration_testcase extends basic_testcase { $values = array('testel' => array('number' => 0, 'timeunit' => 3600)); $this->assertEquals(array('testel' => 0), $el->exportValue($values)); - $el = new MoodleQuickForm_duration('testel', null, array('optional' => true)); - $el->_createElements(); + $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)); $values = array('testel' => array('number' => 20, 'timeunit' => 1, 'enabled' => 1)); $this->assertEquals(array('testel' => 20), $el->exportValue($values)); } } + +/** + * Form object to be used in test case. + */ +class temp_form_duration extends moodleform { + /** + * Form definition. + */ + public function definition() { + // No definition required. + } + /** + * Returns form reference + * @return MoodleQuickForm + */ + public function getform() { + $mform = $this->_form; + // Set submitted flag, to simulate submission. + $mform->_flagSubmitted = true; + return $mform; + } +} diff --git a/lib/pear/HTML/QuickForm.php b/lib/pear/HTML/QuickForm.php index c53ab751181..711e956f9f7 100644 --- a/lib/pear/HTML/QuickForm.php +++ b/lib/pear/HTML/QuickForm.php @@ -545,7 +545,7 @@ class HTML_QuickForm extends HTML_Common { function &createElement($elementType) { $args = func_get_args(); - $element =& HTML_QuickForm::_loadElement('createElement', $elementType, array_slice($args, 1)); + $element = self::_loadElement('createElement', $elementType, array_slice($args, 1)); return $element; } // end func createElement @@ -566,7 +566,7 @@ class HTML_QuickForm extends HTML_Common { function &_loadElement($event, $type, $args) { $type = strtolower($type); - if (!HTML_QuickForm::isTypeRegistered($type)) { + if (!self::isTypeRegistered($type)) { $error = self::raiseError(null, QUICKFORM_UNREGISTERED_ELEMENT, null, E_USER_WARNING, "Element '$type' does not exist in HTML_QuickForm::_loadElement()", 'HTML_QuickForm_Error', true); return $error; } diff --git a/lib/pear/README_MOODLE.txt b/lib/pear/README_MOODLE.txt index 0737feb05a0..ec62936d8fd 100644 --- a/lib/pear/README_MOODLE.txt +++ b/lib/pear/README_MOODLE.txt @@ -31,6 +31,7 @@ MDL-52081 - made all constructors PHP7 compatible MDL-52826 - Remove onsubmit events pointing to the global validation functions and script tag moved after the HTML MDL-50484 - _getPersistantData() returns id with _persistant prefixed to element id. +MDL-55123 - corrected call to non-static functions in HTML_QuickForm to be PHP7.1-compliant Pear diff --git a/lib/upgrade.txt b/lib/upgrade.txt index ab401a56008..37cfcae0295 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -71,6 +71,8 @@ information provided here is intended especially for developers. - 3. Run: Which process behat should be initialise for. * behat_context_helper::set_session() has been deprecated, please use behat_context_helper::set_environment() instead. * data-fieldtype="type" attribute has been added to form field default template. +* form elements extending MoodleQuickForm_group must call $this->createFormElement() instead of + @MoodleQuickForm::createElement() in order to be compatible with PHP 7.1 === 3.1 ===