moodle/lib/form/advcheckbox.php
Tim Hunt 820b41e34f MDL-30168 formslib: untangle automatic id generation.
Previously, we had overridden the _generateId method in almost all
subclasses; and then we mostly, but not always; ignored the value that
was generated there, and instead generated new (nicer) values in
MoodleQuickForm_Renderer::renderElement. Of course, that is not really a
logical place to (re)generate ids.

I have fixed the code so that the _generateId method now uses the 'nice
id' algorithm from renderElement. This should make the whole code flow
more logical.

This make all our overriding of _generateId unnecessary.

We do need a special _generateId for radio buttons, because you often
have different radio buttons with the same name but different values.

This change should only change the ids on radio, checkbox and
advcheckbox elements. Previously, those were essentially random, so I
don't think anyone could have been relying on the particular values.

This commit also has new unit tests, first to test the basic _generateId
algorithm, and then to create and render an example form (including some
tricky things like repeat_elements) and chech the acutal ids in the
generated HTML.
2011-12-23 11:51:45 +00:00

114 lines
3.6 KiB
PHP

<?php
require_once('HTML/QuickForm/advcheckbox.php');
/**
* HTML class for a advcheckbox type element
*
* default behavior special for Moodle is to return '0' if not checked
* '1' for checked.
*
* * @author Jamie Pratt
* @access public
*/
class MoodleQuickForm_advcheckbox extends HTML_QuickForm_advcheckbox{
/**
* html for help button, if empty then no help
*
* @var string
*/
var $_helpbutton='';
/**
* Group to which this checkbox belongs (for select all/select none button)
* @var string $_group
*/
var $_group;
/**
* 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)
{
if ($values === null){
$values = array(0, 1);
}
if (!is_null($attributes['group'])) {
$this->_group = 'checkboxgroup' . $attributes['group'];
unset($attributes['group']);
if (is_null($attributes)) {
$attributes = array();
$attributes['class'] .= " $this->_group";
} elseif (is_array($attributes)) {
if (isset($attributes['class'])) {
$attributes['class'] .= " $this->_group";
} else {
$attributes['class'] = $this->_group;
}
} elseif ($strpos = stripos($attributes, 'class="')) {
$attributes = str_ireplace('class="', 'class="' . $this->_group . ' ', $attributes);
} else {
$attributes .= ' class="' . $this->_group . '"';
}
}
parent::HTML_QuickForm_advcheckbox($elementName, $elementLabel, $text, $attributes, $values);
} //end constructor
/**
* set html for help button
*
* @access public
* @param array $help array of arguments to make a help button
* @param string $function function name to call to get html
*/
function setHelpButton($helpbuttonargs, $function='helpbutton'){
debugging('component setHelpButton() is not used any more, please use $mform->setHelpButton() instead');
}
/**
* get html for help button
*
* @access public
* @return string html for help button
*/
function getHelpButton(){
return $this->_helpbutton;
}
function toHtml()
{
return '<span>' . parent::toHtml() . '</span>';
}
/**
* Returns the disabled field. Accessibility: the return "[ ]" from parent
* class is not acceptable for screenreader users, and we DO want a label.
* @return string
*/
function getFrozenHtml()
{
//$this->_generateId();
$output = '<input type="checkbox" disabled="disabled" id="'.$this->getAttribute('id').'" ';
if ($this->getChecked()) {
$output .= 'checked="checked" />'.$this->_getPersistantData();
} else {
$output .= '/>';
}
return $output;
} //end func getFrozenHtml
}