AutorÃa | Ultima modificación | Ver Log |
<?php/* vim: set expandtab tabstop=4 shiftwidth=4: */// +----------------------------------------------------------------------+// | PHP version 4.0 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.0 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Author: Ron McClain <ron@humaniq.com> |// +----------------------------------------------------------------------+//// $Id$require_once('HTML/QuickForm/Renderer.php');/*** A concrete renderer for HTML_QuickForm, makes an object from form contents** Based on HTML_Quickform_Renderer_Array code** @access public*/class HTML_QuickForm_Renderer_Object extends HTML_QuickForm_Renderer{/*** The object being generated* @var object $_obj*/var $_obj= null;/*** Number of sections in the form (i.e. number of headers in it)* @var integer $_sectionCount*/var $_sectionCount;/*** Current section number* @var integer $_currentSection*/var $_currentSection;/*** Object representing current group* @var object $_currentGroup*/var $_currentGroup = null;/*** Class of Element Objects* @var object $_elementType*/var $_elementType = 'QuickFormElement';/*** Additional style information for different elements* @var array $_elementStyles*/var $_elementStyles = array();/*** true: collect all hidden elements into string; false: process them as usual form elements* @var bool $_collectHidden*/var $_collectHidden = false;/*** Constructor** @param collecthidden bool true: collect all hidden elements* @access public*/public function __construct($collecthidden = false) {parent::__construct();$this->_collectHidden = $collecthidden;$this->_obj = new QuickformForm;}/*** Old syntax of class constructor. Deprecated in PHP7.** @deprecated since Moodle 3.1*/public function HTML_QuickForm_Renderer_Object($collecthidden = false) {debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);self::__construct($collecthidden);}/*** Return the rendered Object* @access public*/function toObject(){return $this->_obj;}/*** Set the class of the form elements. Defaults to QuickformElement.* @param type string Name of element class* @access public*/function setElementType($type){$this->_elementType = $type;}function startForm(&$form){$this->_obj->frozen = $form->isFrozen();$this->_obj->javascript = $form->getValidationScript();$this->_obj->attributes = $form->getAttributes(true);$this->_obj->requirednote = $form->getRequiredNote();$this->_obj->errors = new StdClass;if($this->_collectHidden) {$this->_obj->hidden = '';}$this->_currentSection = null;$this->_sectionCount = 0;} // end func startFormfunction renderHeader(&$header){$hobj = new StdClass;$hobj->header = $header->toHtml();$this->_obj->sections[$this->_sectionCount] = $hobj;$this->_currentSection = $this->_sectionCount++;}function renderElement(&$element, $required, $error){$elObj = $this->_elementToObject($element, $required, $error);if(!empty($error)) {$name = $elObj->name;$this->_obj->errors->$name = $error;}$this->_storeObject($elObj);} // end func renderElementfunction renderHidden(&$element){if($this->_collectHidden) {$this->_obj->hidden .= $element->toHtml() . "\n";} else {$this->renderElement($element, false, null);}} //end func renderHiddenfunction startGroup(&$group, $required, $error){$this->_currentGroup = $this->_elementToObject($group, $required, $error);if(!empty($error)) {$name = $this->_currentGroup->name;$this->_obj->errors->$name = $error;}} // end func startGroupfunction finishGroup(&$group){$this->_storeObject($this->_currentGroup);$this->_currentGroup = null;} // end func finishGroup/*** Creates an object representing an element** @access private* @param element object An HTML_QuickForm_element object* @param required bool Whether an element is required* @param error string Error associated with the element* @return object*/function _elementToObject(&$element, $required, $error){if($this->_elementType) {$ret = new $this->_elementType;}$ret->name = $element->getName();$ret->value = $element->getValue();$ret->type = $element->getType();$ret->frozen = $element->isFrozen();$labels = $element->getLabel();if (is_array($labels)) {$ret->label = array_shift($labels);foreach ($labels as $key => $label) {$key = is_int($key)? $key + 2: $key;$ret->{'label_' . $key} = $label;}} else {$ret->label = $labels;}$ret->required = $required;$ret->error = $error;if(isset($this->_elementStyles[$ret->name])) {$ret->style = $this->_elementStyles[$ret->name];$ret->styleTemplate = "styles/". $ret->style .".html";}if($ret->type == 'group') {$ret->separator = $element->_separator;$ret->elements = array();} else {$ret->html = $element->toHtml();}return $ret;}/*** Stores an object representation of an element in the form array** @access private* @param elObj object Object representation of an element* @return void*/function _storeObject($elObj){$name = $elObj->name;if(is_object($this->_currentGroup) && $elObj->type != 'group') {$this->_currentGroup->elements[] = $elObj;} elseif (isset($this->_currentSection)) {$this->_obj->sections[$this->_currentSection]->elements[] = $elObj;} else {$this->_obj->elements[] = $elObj;}}function setElementStyle($elementName, $styleName = null){if(is_array($elementName)) {$this->_elementStyles = array_merge($this->_elementStyles, $elementName);} else {$this->_elementStyles[$elementName] = $styleName;}}} // end class HTML_QuickForm_Renderer_Object/*** Convenience class for the form object passed to outputObject()** Eg.* {form.outputJavaScript():h}* {form.outputHeader():h}* <table>* <tr>* <td>{form.name.label:h}</td><td>{form.name.html:h}</td>* </tr>* </table>* </form>*/class QuickformForm{/*** Whether the form has been frozen* @var boolean $frozen*/var $frozen;/*** Javascript for client-side validation* @var string $javascript*/var $javascript;/*** Attributes for form tag* @var string $attributes*/var $attributes;/*** Note about required elements* @var string $requirednote*/var $requirednote;/*** Collected html of all hidden variables* @var string $hidden*/var $hidden;/*** Set if there were validation errors.* StdClass object with element names for keys and their* error messages as values* @var object $errors*/var $errors;/*** Array of QuickformElementObject elements. If there are headers in the form* this will be empty and the elements will be in the* separate sections* @var array $elements*/var $elements;/*** Array of sections contained in the document* @var array $sections*/var $sections;/*** Output <form> header* {form.outputHeader():h}* @return string <form attributes>*/function outputHeader(){return "<form " . $this->attributes . ">\n";}/*** Output form javascript* {form.outputJavaScript():h}* @return string Javascript*/function outputJavaScript(){return $this->javascript;}} // end class QuickformForm/*** Convenience class describing a form element.* The properties defined here will be available from* your flexy templates by referencing* {form.zip.label:h}, {form.zip.html:h}, etc.*/class QuickformElement{/*** Element name* @var string $name*/var $name;/*** Element value* @var mixed $value*/var $value;/*** Type of element* @var string $type*/var $type;/*** Whether the element is frozen* @var boolean $frozen*/var $frozen;/*** Label for the element* @var string $label*/var $label;/*** Whether element is required* @var boolean $required*/var $required;/*** Error associated with the element* @var string $error*/var $error;/*** Some information about element style* @var string $style*/var $style;/*** HTML for the element* @var string $html*/var $html;/*** If element is a group, the group separator* @var mixed $separator*/var $separator;/*** If element is a group, an array of subelements* @var array $elements*/var $elements;function isType($type){return ($this->type == $type);}function notFrozen(){return !$this->frozen;}function isButton(){return ($this->type == "submit" || $this->type == "reset");}/*** XXX: why does it use Flexy when all other stuff here does not depend on it?*/function outputStyle(){ob_start();HTML_Template_Flexy::staticQuickTemplate('styles/' . $this->style . '.html', $this);$ret = ob_get_contents();ob_end_clean();return $ret;}} // end class QuickformElement?>