';
+ $this->_advancedHTML = '
';
+ $this->setRequiredNote(get_string('somefieldsrequired', 'form', '
'));
+ //(Help file doesn't add anything) helpbutton('requiredelement', get_string('requiredelement', 'form'), 'moodle', true, false, '', true));
}
+
+ /**
+ * Use this method to indicate an element in a form is an advanced field. If items in a form
+ * are marked as advanced then 'Hide/Show Advanced' buttons will automatically be displayed in the
+ * form so the user can decide whether to display advanced form controls.
+ *
+ * If you set a header element to advanced then all elements it contains will also be set as advanced.
+ *
+ * @param string $elementName group or element name (not the element name of something inside a group).
+ * @param boolean $advanced default true sets the element to advanced. False removes advanced mark.
+ */
+ function setAdvanced($elementName, $advanced=true){
+ if ($advanced){
+ $this->_advancedElements[$elementName]='';
+ } elseif (isset($this->_advancedElements[$elementName])) {
+ unset($this->_advancedElements[$elementName]);
+ }
+ if ($advanced && $this->getElementType('mform_showadvanced_last')===false){
+ $this->setShowAdvanced();
+ $this->registerNoSubmitButton('mform_showadvanced');
+
+ $this->addElement('hidden', 'mform_showadvanced_last');
+ }
+ }
+ /**
+ * Set whether to show advanced elements in the form on first displaying form. Default is not to
+ * display advanced elements in the form until 'Show Advanced' is pressed.
+ *
+ * You can get the last state of the form and possibly save it for this user by using
+ * value 'mform_showadvanced_last' in submitted data.
+ *
+ * @param boolean $showadvancedNow
+ */
+ function setShowAdvanced($showadvancedNow = null){
+ if ($showadvancedNow === null){
+ if ($this->_showAdvanced !== null){
+ return;
+ } else { //if setShowAdvanced is called without any preference
+ //make the default to not show advanced elements.
+ $showadvancedNow = get_user_preferences(
+ moodle_strtolower($this->_formName.'_showadvanced', 0));
+ }
+ }
+ //value of hidden element
+ $hiddenLast = optional_param('mform_showadvanced_last', -1, PARAM_INT);
+ //value of button
+ $buttonPressed = optional_param('mform_showadvanced', 0, PARAM_RAW);
+ //toggle if button pressed or else stay the same
+ if ($hiddenLast == -1) {
+ $next = $showadvancedNow;
+ } elseif ($buttonPressed) { //toggle on button press
+ $next = !$hiddenLast;
+ } else {
+ $next = $hiddenLast;
+ }
+ $this->_showAdvanced = $next;
+ if ($showadvancedNow != $next){
+ set_user_preference($this->_formName.'_showadvanced', $next);
+ }
+ $this->setConstants(array('mform_showadvanced_last'=>$next));
+ }
+ function getShowAdvanced(){
+ return $this->_showAdvanced;
+ }
+
+
+ /**
+ * Accepts a renderer
+ *
+ * @param HTML_QuickForm_Renderer An HTML_QuickForm_Renderer object
+ * @since 3.0
+ * @access public
+ * @return void
+ */
+ function accept(&$renderer)
+ {
+ if (method_exists($renderer, 'setAdvancedElements')){
+ //check for visible fieldsets where all elements are advanced
+ //and mark these headers as advanced as well.
+ //And mark all elements in a advanced header as advanced
+ $stopFields = $renderer->getStopFieldSetElements();
+ $lastHeader = null;
+ $lastHeaderAdvanced = false;
+ $anyAdvanced = false;
+ foreach (array_keys($this->_elements) as $elementIndex){
+ $element =& $this->_elements[$elementIndex];
+ if ($element->getType()=='header' || in_array($element->getName(), $stopFields)){
+ if ($anyAdvanced && ($lastHeader!==null)){
+ $this->setAdvanced($lastHeader->getName());
+ }
+ $lastHeaderAdvanced = false;
+ } elseif ($lastHeaderAdvanced) {
+ $this->setAdvanced($element->getName());
+ }
+ if ($element->getType()=='header'){
+ $lastHeader =& $element;
+ $anyAdvanced = false;
+ $lastHeaderAdvanced = isset($this->_advancedElements[$element->getName()]);
+ } elseif (isset($this->_advancedElements[$element->getName()])){
+ $anyAdvanced = true;
+ }
+ }
+ $renderer->setAdvancedElements($this->_advancedElements);
+
+ }
+ parent::accept($renderer);
+ }
+
+
+
+ function closeHeaderBefore($elementName){
+ $renderer =& $this->defaultRenderer();
+ $renderer->addStopFieldsetElements($elementName);
+ }
+
+ /**
+ * Should be used for all elements of a form except for select, radio and checkboxes which
+ * clean their own data.
+ *
+ * @param string $elementname
+ * @param integer $paramtype use the constants PARAM_*.
+ * * PARAM_CLEAN is deprecated and you should try to use a more specific type.
+ * * PARAM_TEXT should be used for cleaning data that is expected to be plain text.
+ * It will strip all html tags. But will still let tags for multilang support
+ * through.
+ * * PARAM_RAW means no cleaning whatsoever, it is used mostly for data from the
+ * html editor. Data from the editor is later cleaned before display using
+ * format_text() function. PARAM_RAW can also be used for data that is validated
+ * by some other way or printed by p() or s().
+ * * PARAM_INT should be used for integers.
+ * * PARAM_ACTION is an alias of PARAM_ALPHA and is used for hidden fields specifying
+ * form actions.
+ */
+ function setType($elementname, $paramtype) {
+ $this->_types[$elementname] = $paramtype;
+ }
+
+ /**
+ * See description of setType above. This can be used to set several types at once.
+ *
+ * @param array $paramtypes
+ */
+ function setTypes($paramtypes) {
+ $this->_types = $paramtypes + $this->_types;
+ }
+
+ function updateSubmission($submission, $files) {
+ $this->_flagSubmitted = false;
+
+ if (empty($submission)) {
+ $this->_submitValues = array();
+ } else {
+ foreach ($submission as $key=>$s) {
+ if (array_key_exists($key, $this->_types)) {
+ $submission[$key] = clean_param($s, $this->_types[$key]);
+ }
+ }
+ $this->_submitValues = $this->_recursiveFilter('stripslashes', $submission);
+ $this->_flagSubmitted = true;
+ }
+
+ if (empty($files)) {
+ $this->_submitFiles = array();
+ } else {
+ if (1 == get_magic_quotes_gpc()) {
+ foreach (array_keys($files) as $elname) {
+ // dangerous characters in filenames are cleaned later in upload_manager
+ $files[$elname]['name'] = stripslashes($files[$elname]['name']);
+ }
+ }
+ $this->_submitFiles = $files;
+ $this->_flagSubmitted = true;
+ }
+
+ // need to tell all elements that they need to update their value attribute.
+ foreach (array_keys($this->_elements) as $key) {
+ $this->_elements[$key]->onQuickFormEvent('updateValue', null, $this);
+ }
+ }
+
function getReqHTML(){
return $this->_reqHTML;
}
- /**
- * Class constructor - same parameters as HTML_QuickForm_DHTMLRulesTableless
- * @param array $buttons An associative array representing help button to attach to
- * to the form. keys of array correspond to names of elements in form.
- *
- * @access public
- */
- function setHelpButtons($buttons, $suppresscheck=false){
-
- foreach ($this->_elements as $no => $element){
- if (array_key_exists($element->getName(), $buttons)){
- if (method_exists($element, 'setHelpButton')){
- $this->_elements[$no]->setHelpButton($buttons[$element->getName()]);
- }else{
- $a=new object();
- $a->name=$element->getName();
- $a->classname=get_class($element);
- print_error('nomethodforaddinghelpbutton', 'form', '', $a);
- }
- unset($buttons[$element->getName()]);
- }
-
- }
- if (count($buttons)&& !$suppresscheck){
- print_error('nonexistentformelements', 'form', '', join(', ', array_keys($buttons)));
- }
+ function getAdvancedHTML(){
+ return $this->_advancedHTML;
}
- function acceptGet(){
- $names=func_get_args();
- foreach ($names as $name){
- //if no form data is submitted then the page has just beeen loaded
- //so we get the page param value from $_GET
- if (!$this->_flagSubmitted && isset($_GET[$name])){
- $this->_submitValues[$name]=$_GET[$name];
- }
- }
- }
- function required_param($element, $paramtype){
- $value = $this->getSubmitValue($element);
- if (null !== $value) {
- if (false === strpos($element, '[')) {
- return $this->_submitValues[$element] = $this->_clean_param($value, $paramtype);
- } else {
- $idx = "['" . str_replace(array(']', '['), array('', "']['"), $element) . "']";
- eval("return \$this->_submitValues{$idx} = \$this->_clean_param(\$value, \$paramtype);");
- }
- }else{
- //could print name of param but better not to for security?
- print_error('missingrequiredfield', 'error');
- }
- }
- function optional_param($element, $default, $paramtype){
- $value = $this->getSubmitValue($element);
- if (null === $value) {
- return $default;
- }
- if (false === strpos($element, '[')) {
- return $this->_submitValues[$element] = $this->_clean_param($value, $paramtype);
- } else {
- $idx = "['" . str_replace(array(']', '['), array('', "']['"), $element) . "']";
- eval("return \$this->_submitValues{$idx} = \$this->_clean_param(\$value, \$paramtype);");
- }
- }
- function clean_param($elementList, $paramtype){
- $value = $this->getSubmitValue($element);
- if (false === strpos($element, '[')) {
- return $this->_submitValues[$element] = $this->_clean_param($value, $paramtype);
- } else {
- $idx = "['" . str_replace(array(']', '['), array('', "']['"), $element) . "']";
- eval("return \$this->_submitValues{$idx} = \$this->_clean_param(\$value, \$paramtype);");
- }
- }
- function _clean_param($value, $paramtype){
- //clean_param function in moodlelib expects vars with slashes
- $value=$this->_recursiveFilter('addslashes', $value);
- $value=clean_param($value, $paramtype);
- return $this->_recursiveFilter('stripslashes', $value);
- }
- function exportValue($element, $addslashes=true){
- $unfiltered=parent::exportValue($element);
- if ($addslashes){
- return $this->_recursiveFilter('addslashes',$unfiltered);
- } else {
- return $unfiltered;
- }
- }
- function exportValues($elementList= null, $addslashes=true){
- $unfiltered=parent::exportValues($elementList);
- if ($addslashes){
- return $this->_recursiveFilter('addslashes',$unfiltered);
- } else {
- return $unfiltered;
- }
- }
/**
- * Initializes a default form value
+ * Initializes a default form value. Used to specify the default for a new entry where
+ * no data is loaded in using moodleform::set_data()
*
* @param string $elementname element name
* @param mixed $values values for that element name
- * @param mixed $filter (optional) filter(s) to apply to default value
+ * @param bool $slashed the default value is slashed
* @access public
* @return void
*/
- function setDefault($elementName='', $defaultValue = null, $filter = null){
- $this->setDefaults(array($elementName =>$defaultValue), $filter);
+ function setDefault($elementName, $defaultValue, $slashed=false){
+ $filter = $slashed ? 'stripslashes' : NULL;
+ $this->setDefaults(array($elementName=>$defaultValue), $filter);
} // end func setDefault
/**
- * Returns 'safe' elements' values
+ * Add an array of buttons to the form
+ * @param array $buttons An associative array representing help button to attach to
+ * to the form. keys of array correspond to names of elements in form.
*
- * Unlike getSubmitValues(), this will return only the values
- * corresponding to the elements present in the form.
- * This function also runs validate() and returns false if the form doesn't validate
- *
- * @param mixed Array/string of element names, whose values we want. If not set then return all elements.
- * @access public
- * @return object An object with property values set to elements' values
- * @throws HTML_QuickForm_Error
- */
- function data_submitted($elementList = null, $addslashes=true){
- if (!$this->validate()){
- return false;
- }else{
- return (object)$this->exportValues($elementList, $addslashes);
+ * @access public
+ */
+ function setHelpButtons($buttons, $suppresscheck=false, $function='helpbutton'){
+
+ foreach ($buttons as $elementname => $button){
+ $this->setHelpButton($elementname, $button, $suppresscheck, $function);
}
}
+ /**
+ * Add a single button.
+ *
+ * @param string $elementname name of the element to add the item to
+ * @param array $button - arguments to pass to function $function
+ * @param boolean $suppresscheck - whether to throw an error if the element
+ * doesn't exist.
+ * @param string $function - function to generate html from the arguments in $button
+ */
+ function setHelpButton($elementname, $button, $suppresscheck=false, $function='helpbutton'){
+ if (array_key_exists($elementname, $this->_elementIndex)){
+ //_elements has a numeric index, this code accesses the elements by name
+ $element=&$this->_elements[$this->_elementIndex[$elementname]];
+ if (method_exists($element, 'setHelpButton')){
+ $element->setHelpButton($button, $function);
+ }else{
+ $a=new object();
+ $a->name=$element->getName();
+ $a->classname=get_class($element);
+ print_error('nomethodforaddinghelpbutton', 'form', '', $a);
+ }
+ }elseif (!$suppresscheck){
+ print_error('nonexistentformelements', 'form', '', $elementname);
+ }
+ }
+
+ function exportValues($elementList= null, $addslashes=true){
+ $unfiltered = array();
+ if (null === $elementList) {
+ // iterate over all elements, calling their exportValue() methods
+ $emptyarray = array();
+ foreach (array_keys($this->_elements) as $key) {
+ if ($this->_elements[$key]->isFrozen() && !$this->_elements[$key]->_persistantFreeze){
+ $value = $this->_elements[$key]->exportValue($emptyarray, true);
+ } else {
+ $value = $this->_elements[$key]->exportValue($this->_submitValues, true);
+ }
+
+ if (is_array($value)) {
+ // This shit throws a bogus warning in PHP 4.3.x
+ $unfiltered = HTML_QuickForm::arrayMerge($unfiltered, $value);
+ }
+ }
+ } else {
+ if (!is_array($elementList)) {
+ $elementList = array_map('trim', explode(',', $elementList));
+ }
+ foreach ($elementList as $elementName) {
+ $value = $this->exportValue($elementName);
+ if (PEAR::isError($value)) {
+ return $value;
+ }
+ $unfiltered[$elementName] = $value;
+ }
+ }
+
+ if ($addslashes){
+ return $this->_recursiveFilter('addslashes', $unfiltered);
+ } else {
+ return $unfiltered;
+ }
+ }
+ /**
+ * Adds a validation rule for the given field
+ *
+ * If the element is in fact a group, it will be considered as a whole.
+ * To validate grouped elements as separated entities,
+ * use addGroupRule instead of addRule.
+ *
+ * @param string $element Form element name
+ * @param string $message Message to display for invalid data
+ * @param string $type Rule type, use getRegisteredRules() to get types
+ * @param string $format (optional)Required for extra rule data
+ * @param string $validation (optional)Where to perform validation: "server", "client"
+ * @param boolean $reset Client-side validation: reset the form element to its original value if there is an error?
+ * @param boolean $force Force the rule to be applied, even if the target form element does not exist
+ * @since 1.0
+ * @access public
+ * @throws HTML_QuickForm_Error
+ */
+ function addRule($element, $message, $type, $format=null, $validation='server', $reset = false, $force = false)
+ {
+ parent::addRule($element, $message, $type, $format, $validation, $reset, $force);
+ if ($validation == 'client') {
+ $this->updateAttributes(array('onsubmit' => 'try { var myValidator = validate_' . $this->_formName . '; } catch(e) { return true; } return myValidator(this);'));
+ }
+
+ } // end func addRule
+ /**
+ * Adds a validation rule for the given group of elements
+ *
+ * Only groups with a name can be assigned a validation rule
+ * Use addGroupRule when you need to validate elements inside the group.
+ * Use addRule if you need to validate the group as a whole. In this case,
+ * the same rule will be applied to all elements in the group.
+ * Use addRule if you need to validate the group against a function.
+ *
+ * @param string $group Form group name
+ * @param mixed $arg1 Array for multiple elements or error message string for one element
+ * @param string $type (optional)Rule type use getRegisteredRules() to get types
+ * @param string $format (optional)Required for extra rule data
+ * @param int $howmany (optional)How many valid elements should be in the group
+ * @param string $validation (optional)Where to perform validation: "server", "client"
+ * @param bool $reset Client-side: whether to reset the element's value to its original state if validation failed.
+ * @since 2.5
+ * @access public
+ * @throws HTML_QuickForm_Error
+ */
+ function addGroupRule($group, $arg1, $type='', $format=null, $howmany=0, $validation = 'server', $reset = false)
+ {
+ parent::addGroupRule($group, $arg1, $type, $format, $howmany, $validation, $reset);
+ if (is_array($arg1)) {
+ foreach ($arg1 as $rules) {
+ foreach ($rules as $rule) {
+ $validation = (isset($rule[3]) && 'client' == $rule[3])? 'client': 'server';
+
+ if ('client' == $validation) {
+ $this->updateAttributes(array('onsubmit' => 'try { var myValidator = validate_' . $this->_formName . '; } catch(e) { return true; } return myValidator(this);'));
+ }
+ }
+ }
+ } elseif (is_string($arg1)) {
+
+ if ($validation == 'client') {
+ $this->updateAttributes(array('onsubmit' => 'try { var myValidator = validate_' . $this->_formName . '; } catch(e) { return true; } return myValidator(this);'));
+ }
+ }
+ } // end func addGroupRule
+
+ // }}}
+ /**
+ * Returns the client side validation script
+ *
+ * The code here was copied from HTML_QuickForm_DHTMLRulesTableless who copied it from HTML_QuickForm
+ * and slightly modified to run rules per-element
+ * Needed to override this because of an error with client side validation of grouped elements.
+ *
+ * @access public
+ * @return string Javascript to perform validation, empty string if no 'client' rules were added
+ */
+ function getValidationScript()
+ {
+ if (empty($this->_rules) || empty($this->_attributes['onsubmit'])) {
+ return '';
+ }
+
+ include_once('HTML/QuickForm/RuleRegistry.php');
+ $registry =& HTML_QuickForm_RuleRegistry::singleton();
+ $test = array();
+ $js_escape = array(
+ "\r" => '\r',
+ "\n" => '\n',
+ "\t" => '\t',
+ "'" => "\\'",
+ '"' => '\"',
+ '\\' => '\\\\'
+ );
+
+ foreach ($this->_rules as $elementName => $rules) {
+ foreach ($rules as $rule) {
+ if ('client' == $rule['validation']) {
+ unset($element); //TODO: find out how to properly initialize it
+
+ $dependent = isset($rule['dependent']) && is_array($rule['dependent']);
+ $rule['message'] = strtr($rule['message'], $js_escape);
+
+ if (isset($rule['group'])) {
+ $group =& $this->getElement($rule['group']);
+ // No JavaScript validation for frozen elements
+ if ($group->isFrozen()) {
+ continue 2;
+ }
+ $elements =& $group->getElements();
+ foreach (array_keys($elements) as $key) {
+ if ($elementName == $group->getElementName($key)) {
+ $element =& $elements[$key];
+ break;
+ }
+ }
+ } elseif ($dependent) {
+ $element = array();
+ $element[] =& $this->getElement($elementName);
+ foreach ($rule['dependent'] as $elName) {
+ $element[] =& $this->getElement($elName);
+ }
+ } else {
+ $element =& $this->getElement($elementName);
+ }
+ // No JavaScript validation for frozen elements
+ if (is_object($element) && $element->isFrozen()) {
+ continue 2;
+ } elseif (is_array($element)) {
+ foreach (array_keys($element) as $key) {
+ if ($element[$key]->isFrozen()) {
+ continue 3;
+ }
+ }
+ }
+ // Fix for bug displaying errors for elements in a group
+ //$test[$elementName][] = $registry->getValidationScript($element, $elementName, $rule);
+ $test[$elementName][0][] = $registry->getValidationScript($element, $elementName, $rule);
+ $test[$elementName][1]=$element;
+ //end of fix
+ }
+ }
+ }
+ $js = '
+';
+ return $js;
+ } // end func getValidationScript
+ function _setDefaultRuleMessages(){
+ foreach ($this->_rules as $field => $rulesarr){
+ foreach ($rulesarr as $key => $rule){
+ if ($rule['message']===null){
+ $a=new object();
+ $a->format=$rule['format'];
+ $str=get_string('err_'.$rule['type'], 'form', $a);
+ if (strpos($str, '[[')!==0){
+ $this->_rules[$field][$key]['message']=$str;
+ }
+ }
+ }
+ }
+ }
+
+ function getLockOptionEndScript(){
+
+ $iname = $this->getAttribute('id').'items';
+ $js = ''."\n";
+ return $js;
+ }
+
+ function _getElNamesRecursive($element, $group=null){
+ if ($group==null){
+ $el = $this->getElement($element);
+ } else {
+ $el = &$element;
+ }
+ if (is_a($el, 'HTML_QuickForm_group')){
+ $group = $el;
+ $elsInGroup = $group->getElements();
+ $elNames = array();
+ foreach ($elsInGroup as $elInGroup){
+ $elNames = array_merge($elNames, $this->_getElNamesRecursive($elInGroup, $group));
+ }
+ }else{
+ if ($group != null){
+ $elNames = array($group->getElementName($el->getName()));
+ } elseif (is_a($el, 'HTML_QuickForm_header')) {
+ return null;
+ } elseif (is_a($el, 'HTML_QuickForm_hidden')) {
+ return null;
+ } elseif (method_exists($el, 'getPrivateName')) {
+ return array($el->getPrivateName());
+ } else {
+ $elNames = array($el->getName());
+ }
+ }
+ return $elNames;
+
+ }
+ /**
+ * Adds a dependency for $elementName which will be disabled if $condition is met.
+ * If $condition = 'notchecked' (default) then the condition is that the $dependentOn element
+ * is not checked. If $condition = 'checked' then the condition is that the $dependentOn element
+ * is checked. If $condition is something else then it is checked to see if the value
+ * of the $dependentOn element is equal to $condition.
+ *
+ * @param string $elementName the name of the element which will be disabled
+ * @param string $dependentOn the name of the element whose state will be checked for
+ * condition
+ * @param string $condition the condition to check
+ * @param mixed $value used in conjunction with condition.
+ */
+ function disabledIf($elementName, $dependentOn, $condition = 'notchecked', $value='1'){
+ if (!array_key_exists($dependentOn, $this->_dependencies)) {
+ $this->_dependencies[$dependentOn] = array();
+ }
+ if (!array_key_exists($condition, $this->_dependencies[$dependentOn])) {
+ $this->_dependencies[$dependentOn][$condition] = array();
+ }
+ if (!array_key_exists($value, $this->_dependencies[$dependentOn][$condition])) {
+ $this->_dependencies[$dependentOn][$condition][$value] = array();
+ }
+ $this->_dependencies[$dependentOn][$condition][$value][] = $elementName;
+ }
+
+ function registerNoSubmitButton($buttonname){
+ $this->_noSubmitButtons[]=$buttonname;
+ }
+
+ function isNoSubmitButton($buttonname){
+ return (array_search($buttonname, $this->_noSubmitButtons)!==FALSE);
+ }
+
+ function _registerCancelButton($addfieldsname){
+ $this->_cancelButtons[]=$addfieldsname;
+ }
+ /**
+ * Displays elements without HTML input tags.
+ * This method is different to freeze() in that it makes sure no hidden
+ * elements are included in the form. And a 'hardFrozen' element's submitted value is
+ * ignored.
+ *
+ * This function also removes all previously defined rules.
+ *
+ * @param mixed $elementList array or string of element(s) to be frozen
+ * @since 1.0
+ * @access public
+ * @throws HTML_QuickForm_Error
+ */
+ function hardFreeze($elementList=null)
+ {
+ if (!isset($elementList)) {
+ $this->_freezeAll = true;
+ $elementList = array();
+ } else {
+ if (!is_array($elementList)) {
+ $elementList = preg_split('/[ ]*,[ ]*/', $elementList);
+ }
+ $elementList = array_flip($elementList);
+ }
+
+ foreach (array_keys($this->_elements) as $key) {
+ $name = $this->_elements[$key]->getName();
+ if ($this->_freezeAll || isset($elementList[$name])) {
+ $this->_elements[$key]->freeze();
+ $this->_elements[$key]->setPersistantFreeze(false);
+ unset($elementList[$name]);
+
+ // remove all rules
+ $this->_rules[$name] = array();
+ // if field is required, remove the rule
+ $unset = array_search($name, $this->_required);
+ if ($unset !== false) {
+ unset($this->_required[$unset]);
+ }
+ }
+ }
+
+ if (!empty($elementList)) {
+ return PEAR::raiseError(null, QUICKFORM_NONEXIST_ELEMENT, null, E_USER_WARNING, "Nonexistant element(s): '" . implode("', '", array_keys($elementList)) . "' in HTML_QuickForm::freeze()", 'HTML_QuickForm_Error', true);
+ }
+ return true;
+ } // end func hardFreeze
+
+ // }}}
}
+
/**
- * A renderer for moodleform that only uses XHTML and CSS and no
+ * A renderer for MoodleQuickForm that only uses XHTML and CSS and no
* table tags, extends PEAR class HTML_QuickForm_Renderer_Tableless
- *
+ *
* Stylesheet is part of standard theme and should be automatically included.
*
* @author Jamie Pratt