From: jamiesensei Date: Sun, 7 Jan 2007 16:41:06 +0000 (+0000) Subject: changed implementation of advcheckbox so as to keep PEAR code seperate to Moodle... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=111be766b69b960a9fb785444e511ada0ecca759;p=moodle.git changed implementation of advcheckbox so as to keep PEAR code seperate to Moodle code. --- diff --git a/lib/form/advcheckbox.php b/lib/form/advcheckbox.php index 65bee64849..df51110fe1 100644 --- a/lib/form/advcheckbox.php +++ b/lib/form/advcheckbox.php @@ -1,224 +1,67 @@ libdir/form/HTML/QuickForm/checkbox.php"; +require_once('HTML/QuickForm/advcheckbox.php'); /** - * HTML class for an advanced checkbox type field - * - * Basically this fixes a problem that HTML has had - * where checkboxes can only pass a single value (the - * value of the checkbox when checked). A value for when - * the checkbox is not checked cannot be passed, and - * furthermore the checkbox variable doesn't even exist if - * the checkbox was submitted unchecked. + * HTML class for a advcheckbox type element * - * It works by prepending a hidden field with the same name and - * another "unchecked" value to the checkbox. If the checkbox is - * checked, PHP overwrites the value of the hidden field with - * its value. - * - * @author Jason Rust - * @since 2.0 + * @author Jamie Pratt * @access public */ -class MoodleQuickForm_advcheckbox extends MoodleQuickForm_checkbox -{ - // {{{ properties - +class MoodleQuickForm_advcheckbox extends HTML_QuickForm_advcheckbox{ /** - * The values passed by the hidden elment + * html for help button, if empty then no help * - * @var array - * @access private + * @var string */ - var $_values = null; - + var $_helpbutton=''; /** - * The default value + * set html for help button * - * @var boolean - * @access private + * @access public + * @param array $help array of arguments to make a help button + * @param string $function function name to call to get html */ - var $_currentValue = null; - - // }}} - // {{{ constructor - - /** - * Class constructor - * - * @param string $elementName (optional)Input field name attribute - * @param string $elementLabel (optional)Input field label - * @param string $text (optional)Text to put after the checkbox - * @param mixed $attributes (optional)Either a typical HTML attribute string - * or an associative array - * @param mixed $values (optional)Values to pass if checked or not checked - * - * @since 1.0 - * @access public - * @return void - */ - function MoodleQuickForm_advcheckbox($elementName=null, $elementLabel=null, $text=null, $attributes=null, $values=null) - { - $this->MoodleQuickForm_checkbox($elementName, $elementLabel, $text, $attributes); - $this->setValues($values); - } //end constructor - - // }}} - // {{{ getPrivateName() - - - - // {{{ setValues() - - /** - * Sets the values used by the hidden element - * - * @param mixed $values The values, either a string or an array - * - * @access public - * @return void - */ - function setValues($values) - { - if (empty($values)) { - // give it default checkbox behavior - $this->_values = array('', 1); - } elseif (is_scalar($values)) { - // if it's string, then assume the value to - // be passed is for when the element is checked - $this->_values = array('', $values); - } else { - $this->_values = $values; + function setHelpButton($helpbuttonargs, $function='helpbutton'){ + if (!is_array($helpbuttonargs)){ + $helpbuttonargs=array($helpbuttonargs); + }else{ + $helpbuttonargs=$helpbuttonargs; } - $this->updateAttributes(array('value' => $this->_values[1])); - $this->setChecked($this->_currentValue == $this->_values[1]); - } - - // }}} - // {{{ setValue() - - /** - * Sets the element's value - * - * @param mixed Element's value - * @access public - */ - function setValue($value) - { - $this->setChecked(isset($this->_values[1]) && $value == $this->_values[1]); - $this->_currentValue = $value; - } - - // }}} - // {{{ getValue() - - /** - * Returns the element's value - * - * @access public - * @return mixed - */ - function getValue() - { - if (is_array($this->_values)) { - return $this->_values[$this->getChecked()? 1: 0]; - } else { - return null; + //we do this to to return html instead of printing it + //without having to specify it in every call to make a button. + if ('helpbutton' == $function){ + $defaultargs=array('', '', 'moodle', true, false, '', true); + $helpbuttonargs=$helpbuttonargs + $defaultargs ; } + $this->_helpbutton=call_user_func_array($function, $helpbuttonargs); } - - // }}} - // {{{ toHtml() - /** - * Returns the checkbox element in HTML - * and the additional hidden element in HTML + * get html for help button * - * @access public - * @return string + * @access public + * @return string html for help button */ - function toHtml() - { - if ($this->_flagFrozen) { - return parent::toHtml(); - } else { - return '_getAttrString(array( - 'type' => 'hidden', - 'name' => $this->getName(), - 'value' => $this->_values[0] - )) . ' />' . parent::toHtml(); - - } - } //end func toHtml - - // }}} - // {{{ getFrozenHtml() - + function getHelpButton(){ + return $this->_helpbutton; + } /** - * Unlike checkbox, this has to append a hidden input in both - * checked and non-checked states + * Automatically generates and assigns an 'id' attribute for the element. + * + * Currently used to ensure that labels work on radio buttons and + * advcheckboxes. Per idea of Alexander Radivanovich. + * Overriden in moodleforms to remove qf_ prefix. + * + * @access private + * @return void */ - function getFrozenHtml() + function _generateId() { - return ($this->getChecked()? '[x]': '[ ]') . - $this->_getPersistantData(); - } - - // }}} - // {{{ onQuickFormEvent() + static $idx = 1; - /** - * Called by MoodleQuickForm whenever form event is made on this element - * - * @param string $event Name of event - * @param mixed $arg event arguments - * @param object $caller calling object - * @since 1.0 - * @access public - * @return void - */ - function onQuickFormEvent($event, $arg, &$caller) - { - switch ($event) { - case 'updateValue': - // constant values override both default and submitted ones - // default values are overriden by submitted - $value = $this->_findValue($caller->_constantValues); - if (null === $value) { - $value = $this->_findValue($caller->_submitValues); - if (null === $value) { - $value = $this->_findValue($caller->_defaultValues); - } - } - if (null !== $value) { - $this->setValue($value); - } - break; - default: - parent::onQuickFormEvent($event, $arg, $caller); + if (!$this->getAttribute('id')) { + $this->updateAttributes(array('id' => substr(md5(microtime() . $idx++), 0, 6))); } - return true; - } // end func onQuickFormLoad - - // }}} - // {{{ exportValue() + } // end func _generateId - /** - * This element has a value even if it is not checked, thus we override - * checkbox's behaviour here - */ - function exportValue(&$submitValues, $assoc) - { - $value = $this->_findValue($submitValues); - if (null === $value) { - $value = $this->getValue(); - } elseif (is_array($this->_values) && ($value != $this->_values[0]) && ($value != $this->_values[1])) { - $value = null; - } - return $this->_prepareValue($value, $assoc); - } - // }}} -} //end class MoodleQuickForm_advcheckbox -?> +} +?> \ No newline at end of file diff --git a/lib/formslib.php b/lib/formslib.php index fe6b1e8a12..7dcab2a1f9 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -1486,5 +1486,6 @@ MoodleQuickForm::registerElementType('choosecoursefile', "$CFG->libdir/form/choo MoodleQuickForm::registerElementType('header', "$CFG->libdir/form/header.php", 'MoodleQuickForm_header'); MoodleQuickForm::registerElementType('submit', "$CFG->libdir/form/submit.php", 'MoodleQuickForm_submit'); MoodleQuickForm::registerElementType('questioncategory', "$CFG->libdir/form/questioncategory.php", 'MoodleQuickForm_questioncategory'); +MoodleQuickForm::registerElementType('advcheckbox', "$CFG->libdir/form/advcheckbox.php", 'MoodleQuickForm_advcheckbox'); ?>