Container
1 year ago
Controller
2 years ago
DataSource
2 years ago
Element
1 year ago
Renderer
1 year ago
Rule
2 years ago
Container.php
1 year ago
Controller.php
1 year ago
DataSource.php
2 years ago
Element.php
2 years ago
Exception.php
2 years ago
Factory.php
2 years ago
JavascriptBuilder.php
2 years ago
Loader.php
2 years ago
Node.php
1 year ago
Renderer.php
1 year ago
Rule.php
2 years ago
Factory.php
171 lines
| 1 | <?php |
| 2 | |
| 3 | namespace { |
| 4 | /** |
| 5 | * Static Factory class for HTML_QuickForm2 package |
| 6 | * |
| 7 | * PHP version 5 |
| 8 | * |
| 9 | * LICENSE: |
| 10 | * |
| 11 | * Copyright (c) 2006-2010, Alexey Borzov <avb@php.net>, |
| 12 | * Bertrand Mansion <golgote@mamasam.com> |
| 13 | * All rights reserved. |
| 14 | * |
| 15 | * Redistribution and use in source and binary forms, with or without |
| 16 | * modification, are permitted provided that the following conditions |
| 17 | * are met: |
| 18 | * |
| 19 | * * Redistributions of source code must retain the above copyright |
| 20 | * notice, this list of conditions and the following disclaimer. |
| 21 | * * Redistributions in binary form must reproduce the above copyright |
| 22 | * notice, this list of conditions and the following disclaimer in the |
| 23 | * documentation and/or other materials provided with the distribution. |
| 24 | * * The names of the authors may not be used to endorse or promote products |
| 25 | * derived from this software without specific prior written permission. |
| 26 | * |
| 27 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
| 28 | * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| 29 | * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| 30 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| 31 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| 32 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| 33 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| 34 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| 35 | * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| 36 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| 37 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 38 | * |
| 39 | * @category HTML |
| 40 | * @package HTML_QuickForm2 |
| 41 | * @author Alexey Borzov <avb@php.net> |
| 42 | * @author Bertrand Mansion <golgote@mamasam.com> |
| 43 | * @license http://opensource.org/licenses/bsd-license.php New BSD License |
| 44 | * @version SVN: $Id: Factory.php 299305 2010-05-12 20:15:28Z avb $ |
| 45 | * @link http://pear.php.net/package/HTML_QuickForm2 |
| 46 | */ |
| 47 | /** |
| 48 | * Class with static methods for loading classes and files |
| 49 | */ |
| 50 | // require_once 'HTML/QuickForm2/Loader.php'; |
| 51 | /** |
| 52 | * Static factory class |
| 53 | * |
| 54 | * The class handles instantiation of Element and Rule objects as well as |
| 55 | * registering of new Element and Rule classes. |
| 56 | * |
| 57 | * @category HTML |
| 58 | * @package HTML_QuickForm2 |
| 59 | * @author Alexey Borzov <avb@php.net> |
| 60 | * @author Bertrand Mansion <golgote@mamasam.com> |
| 61 | * @version Release: @package_version@ |
| 62 | */ |
| 63 | class HTML_QuickForm2_Factory |
| 64 | { |
| 65 | /** |
| 66 | * List of element types known to Factory |
| 67 | * @var array |
| 68 | */ |
| 69 | protected static $elementTypes = array('button' => array('HTML_QuickForm2_Element_Button', null), 'checkbox' => array('HTML_QuickForm2_Element_InputCheckbox', null), 'date' => array('HTML_QuickForm2_Element_Date', null), 'fieldset' => array('HTML_QuickForm2_Container_Fieldset', null), 'group' => array('HTML_QuickForm2_Container_Group', null), 'file' => array('HTML_QuickForm2_Element_InputFile', null), 'hidden' => array('HTML_QuickForm2_Element_InputHidden', null), 'image' => array('HTML_QuickForm2_Element_InputImage', null), 'inputbutton' => array('HTML_QuickForm2_Element_InputButton', null), 'password' => array('HTML_QuickForm2_Element_InputPassword', null), 'radio' => array('HTML_QuickForm2_Element_InputRadio', null), 'reset' => array('HTML_QuickForm2_Element_InputReset', null), 'select' => array('HTML_QuickForm2_Element_Select', null), 'submit' => array('HTML_QuickForm2_Element_InputSubmit', null), 'text' => array('HTML_QuickForm2_Element_InputText', null), 'textarea' => array('HTML_QuickForm2_Element_Textarea', null)); |
| 70 | /** |
| 71 | * List of registered rules |
| 72 | * @var array |
| 73 | */ |
| 74 | protected static $registeredRules = array('nonempty' => array('HTML_QuickForm2_Rule_Nonempty', null), 'empty' => array('HTML_QuickForm2_Rule_Empty', null), 'required' => array('HTML_QuickForm2_Rule_Required', null), 'compare' => array('HTML_QuickForm2_Rule_Compare', null), 'eq' => array('HTML_QuickForm2_Rule_Compare', null, array('operator' => '===')), 'neq' => array('HTML_QuickForm2_Rule_Compare', null, array('operator' => '!==')), 'lt' => array('HTML_QuickForm2_Rule_Compare', null, array('operator' => '<')), 'lte' => array('HTML_QuickForm2_Rule_Compare', null, array('operator' => '<=')), 'gt' => array('HTML_QuickForm2_Rule_Compare', null, array('operator' => '>')), 'gte' => array('HTML_QuickForm2_Rule_Compare', null, array('operator' => '>=')), 'regex' => array('HTML_QuickForm2_Rule_Regex', null), 'callback' => array('HTML_QuickForm2_Rule_Callback', null), 'length' => array('HTML_QuickForm2_Rule_Length', null), 'minlength' => array('HTML_QuickForm2_Rule_Length', null, array('max' => 0)), 'maxlength' => array('HTML_QuickForm2_Rule_Length', null, array('min' => 0)), 'maxfilesize' => array('HTML_QuickForm2_Rule_MaxFileSize', null), 'mimetype' => array('HTML_QuickForm2_Rule_MimeType', null), 'each' => array('HTML_QuickForm2_Rule_Each', null), 'notcallback' => array('HTML_QuickForm2_Rule_NotCallback', null), 'notregex' => array('HTML_QuickForm2_Rule_NotRegex', null)); |
| 75 | /** |
| 76 | * Registers a new element type |
| 77 | * |
| 78 | * @param string Type name (treated case-insensitively) |
| 79 | * @param string Class name |
| 80 | * @param string File containing the class, leave empty if class already loaded |
| 81 | */ |
| 82 | public static function registerElement($type, $className, $includeFile = null) |
| 83 | { |
| 84 | self::$elementTypes[\strtolower($type)] = array($className, $includeFile); |
| 85 | } |
| 86 | /** |
| 87 | * Checks whether an element type is known to factory |
| 88 | * |
| 89 | * @param string Type name (treated case-insensitively) |
| 90 | * @return bool |
| 91 | */ |
| 92 | public static function isElementRegistered($type) |
| 93 | { |
| 94 | return isset(self::$elementTypes[\strtolower($type)]); |
| 95 | } |
| 96 | /** |
| 97 | * Creates a new element object of the given type |
| 98 | * |
| 99 | * @param string Type name (treated case-insensitively) |
| 100 | * @param mixed Element name (passed to element's constructor) |
| 101 | * @param mixed Element attributes (passed to element's constructor) |
| 102 | * @param array Element-specific data (passed to element's constructor) |
| 103 | * @return HTML_QuickForm2_Node A created element |
| 104 | * @throws HTML_QuickForm2_InvalidArgumentException If type name is unknown |
| 105 | * @throws HTML_QuickForm2_NotFoundException If class for the element can |
| 106 | * not be found and/or loaded from file |
| 107 | */ |
| 108 | public static function createElement($type, $name = null, $attributes = null, array $data = array()) |
| 109 | { |
| 110 | $type = \strtolower($type); |
| 111 | if (!isset(self::$elementTypes[$type])) { |
| 112 | throw new \HTML_QuickForm2_InvalidArgumentException("Element type '{$type}' is not known"); |
| 113 | } |
| 114 | list($className, $includeFile) = self::$elementTypes[$type]; |
| 115 | if (!\class_exists($className)) { |
| 116 | \HTML_QuickForm2_Loader::loadClass($className, $includeFile); |
| 117 | } |
| 118 | return new $className($name, $attributes, $data); |
| 119 | } |
| 120 | /** |
| 121 | * Registers a new rule type |
| 122 | * |
| 123 | * @param string Rule type name (treated case-insensitively) |
| 124 | * @param string Class name |
| 125 | * @param string File containing the class, leave empty if class already loaded |
| 126 | * @param mixed Configuration data for rules of the given type |
| 127 | */ |
| 128 | public static function registerRule($type, $className, $includeFile = null, $config = null) |
| 129 | { |
| 130 | self::$registeredRules[\strtolower($type)] = array($className, $includeFile, $config); |
| 131 | } |
| 132 | /** |
| 133 | * Checks whether a rule type is known to Factory |
| 134 | * |
| 135 | * @param string Rule type name (treated case-insensitively) |
| 136 | * @return bool |
| 137 | */ |
| 138 | public static function isRuleRegistered($type) |
| 139 | { |
| 140 | return isset(self::$registeredRules[\strtolower($type)]); |
| 141 | } |
| 142 | /** |
| 143 | * Creates a new Rule of the given type |
| 144 | * |
| 145 | * @param string Rule type name (treated case-insensitively) |
| 146 | * @param HTML_QuickForm2_Node Element to validate by the rule |
| 147 | * @param string Message to display if validation fails |
| 148 | * @param mixed Configuration data for the rule |
| 149 | * @return HTML_QuickForm2_Rule A created Rule |
| 150 | * @throws HTML_QuickForm2_InvalidArgumentException If rule type is unknown |
| 151 | * @throws HTML_QuickForm2_NotFoundException If class for the rule |
| 152 | * can't be found and/or loaded from file |
| 153 | */ |
| 154 | public static function createRule($type, \HTML_QuickForm2_Node $owner, $message = '', $config = null) |
| 155 | { |
| 156 | $type = \strtolower($type); |
| 157 | if (!isset(self::$registeredRules[$type])) { |
| 158 | throw new \HTML_QuickForm2_InvalidArgumentException("Rule '{$type}' is not known"); |
| 159 | } |
| 160 | list($className, $includeFile) = self::$registeredRules[$type]; |
| 161 | if (!\class_exists($className)) { |
| 162 | \HTML_QuickForm2_Loader::loadClass($className, $includeFile); |
| 163 | } |
| 164 | if (isset(self::$registeredRules[$type][2])) { |
| 165 | $config = \call_user_func(array($className, 'mergeConfig'), $config, self::$registeredRules[$type][2]); |
| 166 | } |
| 167 | return new $className($owner, $message, $config); |
| 168 | } |
| 169 | } |
| 170 | } |
| 171 |