📄 quickform.php
字号:
/** * Registers a new validation rule * * @param string $ruleName Name of validation rule * @param string $type Either: 'regex', 'function' or 'rule' for an HTML_QuickForm_Rule object * @param string $data1 Name of function, regular expression or HTML_QuickForm_Rule classname * @param string $data2 Object parent of above function or HTML_QuickForm_Rule file path * @since 1.0 * @access public * @return void */ function registerRule($ruleName, $type, $data1, $data2 = null) { include_once('HTML/QuickForm/RuleRegistry.php'); $registry =& HTML_QuickForm_RuleRegistry::singleton(); $registry->registerRule($ruleName, $type, $data1, $data2); } // end func registerRule // }}} // {{{ elementExists() /** * Returns true if element is in the form * * @param string $element form name of element to check * @since 1.0 * @access public * @return boolean */ function elementExists($element=null) { return isset($this->_elementIndex[$element]); } // end func elementExists // }}} // {{{ setDatasource() /** * Sets a datasource object for this form object * * Datasource default and constant values will feed the QuickForm object if * the datasource implements defaultValues() and constantValues() methods. * * @param object $datasource datasource object implementing the informal datasource protocol * @param mixed $defaultsFilter string or array of filter(s) to apply to default values * @param mixed $constantsFilter string or array of filter(s) to apply to constants values * @since 3.3 * @access public * @return void */ function setDatasource(&$datasource, $defaultsFilter = null, $constantsFilter = null) { if (is_object($datasource)) { $this->_datasource =& $datasource; if (is_callable(array($datasource, 'defaultValues'))) { $this->setDefaults($datasource->defaultValues($this), $defaultsFilter); } if (is_callable(array($datasource, 'constantValues'))) { $this->setConstants($datasource->constantValues($this), $constantsFilter); } } else { return PEAR::raiseError(null, QUICKFORM_INVALID_DATASOURCE, null, E_USER_WARNING, "Datasource is not an object in QuickForm::setDatasource()", 'HTML_QuickForm_Error', true); } } // end func setDatasource // }}} // {{{ setDefaults() /** * Initializes default form values * * @param array $defaultValues values used to fill the form * @param mixed $filter (optional) filter(s) to apply to all default values * @since 1.0 * @access public * @return void */ function setDefaults($defaultValues = null, $filter = null) { if (is_array($defaultValues)) { if (isset($filter)) { if (is_array($filter) && (2 != count($filter) || !is_callable($filter))) { foreach ($filter as $val) { if (!is_callable($val)) { return PEAR::raiseError(null, QUICKFORM_INVALID_FILTER, null, E_USER_WARNING, "Callback function does not exist in QuickForm::setDefaults()", 'HTML_QuickForm_Error', true); } else { $defaultValues = $this->_recursiveFilter($val, $defaultValues); } } } elseif (!is_callable($filter)) { return PEAR::raiseError(null, QUICKFORM_INVALID_FILTER, null, E_USER_WARNING, "Callback function does not exist in QuickForm::setDefaults()", 'HTML_QuickForm_Error', true); } else { $defaultValues = $this->_recursiveFilter($filter, $defaultValues); } } $this->_defaultValues = HTML_QuickForm::arrayMerge($this->_defaultValues, $defaultValues); foreach (array_keys($this->_elements) as $key) { $this->_elements[$key]->onQuickFormEvent('updateValue', null, $this); } } } // end func setDefaults // }}} // {{{ setConstants() /** * Initializes constant form values. * These values won't get overridden by POST or GET vars * * @param array $constantValues values used to fill the form * @param mixed $filter (optional) filter(s) to apply to all default values * * @since 2.0 * @access public * @return void */ function setConstants($constantValues = null, $filter = null) { if (is_array($constantValues)) { if (isset($filter)) { if (is_array($filter) && (2 != count($filter) || !is_callable($filter))) { foreach ($filter as $val) { if (!is_callable($val)) { return PEAR::raiseError(null, QUICKFORM_INVALID_FILTER, null, E_USER_WARNING, "Callback function does not exist in QuickForm::setConstants()", 'HTML_QuickForm_Error', true); } else { $constantValues = $this->_recursiveFilter($val, $constantValues); } } } elseif (!is_callable($filter)) { return PEAR::raiseError(null, QUICKFORM_INVALID_FILTER, null, E_USER_WARNING, "Callback function does not exist in QuickForm::setConstants()", 'HTML_QuickForm_Error', true); } else { $constantValues = $this->_recursiveFilter($filter, $constantValues); } } $this->_constantValues = HTML_QuickForm::arrayMerge($this->_constantValues, $constantValues); foreach (array_keys($this->_elements) as $key) { $this->_elements[$key]->onQuickFormEvent('updateValue', null, $this); } } } // end func setConstants // }}} // {{{ setMaxFileSize() /** * Sets the value of MAX_FILE_SIZE hidden element * * @param int $bytes Size in bytes * @since 3.0 * @access public * @return void */ function setMaxFileSize($bytes = 0) { if ($bytes > 0) { $this->_maxFileSize = $bytes; } if (!$this->elementExists('MAX_FILE_SIZE')) { $this->addElement('hidden', 'MAX_FILE_SIZE', $this->_maxFileSize); } else { $el =& $this->getElement('MAX_FILE_SIZE'); $el->updateAttributes(array('value' => $this->_maxFileSize)); } } // end func setMaxFileSize // }}} // {{{ getMaxFileSize() /** * Returns the value of MAX_FILE_SIZE hidden element * * @since 3.0 * @access public * @return int max file size in bytes */ function getMaxFileSize() { return $this->_maxFileSize; } // end func getMaxFileSize // }}} // {{{ &createElement() /** * Creates a new form element of the given type. * * This method accepts variable number of parameters, their * meaning and count depending on $elementType * * @param string $elementType type of element to add (text, textarea, file...) * @since 1.0 * @access public * @return object extended class of HTML_element * @throws HTML_QuickForm_Error */ function &createElement($elementType) { $args = func_get_args(); $element =& HTML_QuickForm::_loadElement('createElement', $elementType, array_slice($args, 1)); return $element; } // end func createElement // }}} // {{{ _loadElement() /** * Returns a form element of the given type * * @param string $event event to send to newly created element ('createElement' or 'addElement') * @param string $type element type * @param array $args arguments for event * @since 2.0 * @access private * @return object a new element * @throws HTML_QuickForm_Error */ function &_loadElement($event, $type, $args) { $type = strtolower($type); if (!HTML_QuickForm::isTypeRegistered($type)) { $error = PEAR::raiseError(null, QUICKFORM_UNREGISTERED_ELEMENT, null, E_USER_WARNING, "Element '$type' does not exist in HTML_QuickForm::_loadElement()", 'HTML_QuickForm_Error', true); return $error; } $className = $GLOBALS['HTML_QUICKFORM_ELEMENT_TYPES'][$type][1]; $includeFile = $GLOBALS['HTML_QUICKFORM_ELEMENT_TYPES'][$type][0]; include_once($includeFile); $elementObject =& new $className(); for ($i = 0; $i < 5; $i++) { if (!isset($args[$i])) { $args[$i] = null; } } $err = $elementObject->onQuickFormEvent($event, $args, $this); if ($err !== true) { return $err; } return $elementObject; } // end func _loadElement // }}} // {{{ addElement() /** * Adds an element into the form * * If $element is a string representing element type, then this * method accepts variable number of parameters, their meaning * and count depending on $element * * @param mixed $element element object or type of element to add (text, textarea, file...) * @since 1.0 * @return object reference to element * @access public * @throws HTML_QuickForm_Error */ function &addElement($element) { if (is_object($element) && is_subclass_of($element, 'html_quickform_element')) { $elementObject = &$element; $elementObject->onQuickFormEvent('updateValue', null, $this); } else { $args = func_get_args(); $elementObject =& $this->_loadElement('addElement', $element, array_slice($args, 1)); if (PEAR::isError($elementObject)) { return $elementObject; } } $elementName = $elementObject->getName(); // Add the element if it is not an incompatible duplicate if (!empty($elementName) && isset($this->_elementIndex[$elementName])) { if ($this->_elements[$this->_elementIndex[$elementName]]->getType() == $elementObject->getType()) { $this->_elements[] =& $elementObject; $elKeys = array_keys($this->_elements); $this->_duplicateIndex[$elementName][] = end($elKeys); } else { $error = PEAR::raiseError(null, QUICKFORM_INVALID_ELEMENT_NAME, null, E_USER_WARNING, "Element '$elementName' already exists in HTML_QuickForm::addElement()", 'HTML_QuickForm_Error', true); return $error; } } else { $this->_elements[] =& $elementObject; $elKeys = array_keys($this->_elements); $this->_elementIndex[$elementName] = end($elKeys); } if ($this->_freezeAll) { $elementObject->freeze(); } return $elementObject; } // end func addElement // }}} // {{{ insertElementBefore() /** * Inserts a new element right before the other element * * Warning: it is not possible to check whether the $element is already * added to the form, therefore if you want to move the existing form * element to a new position, you'll have to use removeElement(): * $form->insertElementBefore($form->removeElement('foo', false), 'bar'); * * @access public * @since 3.2.4 * @param object HTML_QuickForm_element Element to insert * @param string Name of the element before which the new one is inserted * @return object HTML_QuickForm_element reference to inserted element * @throws HTML_QuickForm_Error */ function &insertElementBefore(&$element, $nameAfter) { if (!empty($this->_duplicateIndex[$nameAfter])) { $error = PEAR::raiseError(null, QUICKFORM_INVALID_ELEMENT_NAME, null, E_USER_WARNING, 'Several elements named "' . $nameAfter . '" exist in HTML_QuickForm::insertElementBefore().', 'HTML_QuickForm_Error', true); return $error; } elseif (!$this->elementExists($nameAfter)) { $error = PEAR::raiseError(null, QUICKFORM_NONEXIST_ELEMENT, null, E_USER_WARNING, "Element '$nameAfter' does not exist in HTML_QuickForm::insertElementBefore()", 'HTML_QuickForm_Error', true); return $error; } $elementName = $element->getName(); $targetIdx = $this->_elementIndex[$nameAfter]; $duplicate = false; // Like in addElement(), check that it's not an incompatible duplicate if (!empty($elementName) && isset($this->_elementIndex[$elementName])) { if ($this->_elements[$this->_elementIndex[$elementName]]->getType() != $element->getType()) { $error = PEAR::raiseError(null, QUICKFORM_INVALID_ELEMENT_NAME, null, E_USER_WARNING, "Element '$elementName' already exists in HTML_QuickForm::insertElementBefore()", 'HTML_QuickForm_Error', true); return $error; } $duplicate = true; } // Move all the elements after added back one place, reindex _elementIndex and/or _duplicateIndex $elKeys = array_keys($this->_elements); for ($i = end($elKeys); $i >= $targetIdx; $i--) { if (isset($this->_elements[$i])) { $currentName = $this->_elements[$i]->getName(); $this->_elements[$i + 1] =& $this->_elements[$i]; if ($this->_elementIndex[$currentName] == $i) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -