home *** CD-ROM | disk | FTP | other *** search
- <?php
-
- /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
- /**
- * DB_Table_QuickForm creates HTML_QuickForm objects from DB_Table properties.
- *
- * PHP versions 4 and 5
- *
- * LICENSE:
- *
- * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net>
- * David C. Morse <morse@php.net>
- * Mark Wiesemann <wiesemann@php.net>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * The names of the authors may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @category Database
- * @package DB_Table
- * @author Paul M. Jones <pmjones@php.net>
- * @author David C. Morse <morse@php.net>
- * @author Mark Wiesemann <wiesemann@php.net>
- * @license http://opensource.org/licenses/bsd-license.php New BSD License
- * @version CVS: $Id: QuickForm.php,v 1.45 2008/03/28 20:00:38 wiesemann Exp $
- * @link http://pear.php.net/package/DB_Table
- */
-
- /**
- * Needed to build forms.
- */
- require_once 'HTML/QuickForm.php';
-
- /**
- * US-English messages for some QuickForm rules. Moritz Heidkamp
- * suggested this approach for easier i18n.
- */
- if (! isset($GLOBALS['_DB_TABLE']['qf_rules'])) {
- $GLOBALS['_DB_TABLE']['qf_rules'] = array(
- 'required' => 'The item %s is required.',
- 'numeric' => 'The item %s must be numbers only.',
- 'maxlength' => 'The item %s can have no more than %d characters.'
- );
- }
-
- /**
- * If you want to use an extended HTML_QuickForm object, you can specify the
- * class name in $_DB_TABLE['qf_class_name'].
- * ATTENTION: You have to include the class file yourself, DB_Table does
- * not take care of this!
- */
- if (!isset($GLOBALS['_DB_TABLE']['qf_class_name'])) {
- $GLOBALS['_DB_TABLE']['qf_class_name'] = 'HTML_QuickForm';
- }
-
- /**
- * DB_Table_QuickForm creates HTML_QuickForm objects from DB_Table properties.
- *
- * DB_Table_QuickForm provides HTML form creation facilities based on
- * DB_Table column definitions transformed into HTML_QuickForm elements.
- *
- * @category Database
- * @package DB_Table
- * @author Paul M. Jones <pmjones@php.net>
- * @author David C. Morse <morse@php.net>
- * @author Mark Wiesemann <wiesemann@php.net>
- * @version Release: 1.5.5
- * @link http://pear.php.net/package/DB_Table
- */
-
- class DB_Table_QuickForm {
-
-
- /**
- *
- * Build a form based on DB_Table column definitions.
- *
- * @static
- *
- * @access public
- *
- * @param array $cols A sequential array of DB_Table column definitions
- * from which to create form elements.
- *
- * @param string $arrayName By default, the form will use the names
- * of the columns as the names of the form elements. If you pass
- * $arrayName, the column names will become keys in an array named
- * for this parameter.
- *
- * @param array $args An associative array of optional arguments to
- * pass to the QuickForm object. The keys are...
- *
- * 'formName' : String, name of the form; defaults to the name of the
- * table.
- *
- * 'method' : String, form method; defaults to 'post'.
- *
- * 'action' : String, form action; defaults to
- * $_SERVER['REQUEST_URI'].
- *
- * 'target' : String, form target target; defaults to '_self'
- *
- * 'attributes' : Associative array, extra attributes for <form>
- * tag; the key is the attribute name and the value is attribute
- * value.
- *
- * 'trackSubmit' : Boolean, whether to track if the form was
- * submitted by adding a special hidden field
- *
- * @param string $clientValidate By default, validation will match
- * the 'qf_client' value from the column definition. However,
- * if you set $clientValidate to true or false, this will
- * override the value from the column definition.
- *
- * @param array $formFilters An array with filter function names or
- * callbacks that will be applied to all form elements.
- *
- * @return object HTML_QuickForm
- *
- * @see HTML_QuickForm
- *
- * @see DB_Table_QuickForm::createForm()
- *
- */
-
- function &getForm($cols, $arrayName = null, $args = array(),
- $clientValidate = null, $formFilters = null)
- {
- $form =& DB_Table_QuickForm::createForm($args);
- DB_Table_QuickForm::addElements($form, $cols, $arrayName);
- DB_Table_QuickForm::addRules($form, $cols, $arrayName, $clientValidate);
- DB_Table_QuickForm::addFilters($form, $cols, $arrayName, $formFilters);
-
- return $form;
- }
-
-
- /**
- *
- * Creates an empty form object.
- *
- * In case you want more control over your form, you can call this function
- * to create it, then add whatever elements you want.
- *
- * @static
- *
- * @access public
- *
- * @author Ian Eure <ieure@php.net>
- *
- * @param array $args An associative array of optional arguments to
- * pass to the QuickForm object. The keys are...
- *
- * 'formName' : String, name of the form; defaults to the name of the
- * table.
- *
- * 'method' : String, form method; defaults to 'post'.
- *
- * 'action' : String, form action; defaults to
- * $_SERVER['REQUEST_URI'].
- *
- * 'target' : String, form target target; defaults to '_self'
- *
- * 'attributes' : Associative array, extra attributes for <form>
- * tag; the key is the attribute name and the value is attribute
- * value.
- *
- * 'trackSubmit' : Boolean, whether to track if the form was
- * submitted by adding a special hidden field
- *
- * @return object HTML_QuickForm
- *
- */
-
- function &createForm($args = array())
- {
- if (isset($args['formName'])) {
- $formName = $args['formName'];
- } elseif (isset($this)) {
- $formName = $this->table;
- } else {
- $formName = '_db_table_form_';
- }
-
- $method = isset($args['method'])
- ? $args['method'] : 'post';
-
- $action = isset($args['action'])
- ? $args['action'] : $_SERVER['REQUEST_URI'];
-
- $target = isset($args['target'])
- ? $args['target'] : '_self';
-
- $attributes = isset($args['attributes'])
- ? $args['attributes'] : null;
-
- $trackSubmit = isset($args['trackSubmit'])
- ? $args['trackSubmit'] : false;
-
- $form =& new $GLOBALS['_DB_TABLE']['qf_class_name']($formName, $method,
- $action, $target, $attributes, $trackSubmit);
-
- return $form;
- }
-
-
- /**
- *
- * Adds DB_Table columns to a pre-existing HTML_QuickForm object.
- *
- * @author Ian Eure <ieure@php.net>
- *
- * @static
- *
- * @access public
- *
- * @param object &$form An HTML_QuickForm object.
- *
- * @param array $cols A sequential array of DB_Table column definitions
- * from which to create form elements.
- *
- * @param string $arrayName By default, the form will use the names
- * of the columns as the names of the form elements. If you pass
- * $arrayName, the column names will become keys in an array named
- * for this parameter.
- *
- * @return void
- *
- */
-
- function addElements(&$form, $cols, $arrayName = null)
- {
- $elements =& DB_Table_QuickForm::getElements($cols, $arrayName);
- $cols_keys = array_keys($cols);
- foreach (array_keys($elements) as $k) {
-
- $element =& $elements[$k];
-
- // are we adding a group?
- if (is_array($element)) {
-
- // get the label for the group. have to do it this way
- // because the group of elements does not itself have a
- // label, there are only the labels for the individual
- // elements.
- $tmp = $cols[$cols_keys[$k]];
- if (! isset($tmp['qf_label'])) {
- $label = $cols_keys[$k];
- if ($arrayName) {
- $label = $arrayName . "[$label]";
- }
- } else {
- $label = $tmp['qf_label'];
- }
-
- // set the element name
- if ($arrayName) {
- $name = $arrayName . '[' . $cols_keys[$k] . ']';
- } else {
- $name = $cols_keys[$k];
- }
-
- // fix the column definition temporarily to get the separator
- // for the group
- $col = $cols[$cols_keys[$k]];
- DB_Table_QuickForm::fixColDef($col, $name);
-
- // done
- $group =& $form->addGroup($element, $name, $label,
- $col['qf_groupsep']);
-
- // set default value (if given) for radio elements
- // (reason: QF "resets" the checked state, when adding a group)
- if ($tmp['qf_type'] == 'radio' && isset($tmp['qf_setvalue'])) {
- $form->setDefaults(array($name => $tmp['qf_setvalue']));
- }
-
- } elseif (is_object($element)) {
- $form->addElement($element);
- }
- }
- }
-
- /**
- *
- * Gets controls for a list of columns
- *
- * @author Ian Eure <ieure@php.net>
- *
- * @static
- *
- * @access public
- *
- * @param object &$form An HTML_QuickForm object.
- *
- * @param array $cols A sequential array of DB_Table column definitions
- * from which to create form elements.
- *
- * @param string $arrayName By default, the form will use the names
- * of the columns as the names of the form elements. If you pass
- * $arrayName, the column names will become keys in an array named
- * for this parameter.
- *
- * @return array Form elements
- *
- */
-
- function &getElements($cols, $arrayName = null)
- {
- $elements = array();
-
- foreach ($cols as $name => $col) {
-
- if ($arrayName) {
- $elemname = $arrayName . "[$name]";
- } else {
- $elemname = $name;
- }
-
- DB_Table_QuickForm::fixColDef($col, $elemname);
-
- $elements[] =& DB_Table_QuickForm::getElement($col, $elemname);
- }
-
- return $elements;
- }
-
-
- /**
- *
- * Build a single QuickForm element based on a DB_Table column.
- *
- * @static
- *
- * @access public
- *
- * @param array $col A DB_Table column definition.
- *
- * @param string $elemname The name to use for the generated QuickForm
- * element.
- *
- * @return object HTML_QuickForm_Element
- *
- */
-
- function &getElement($col, $elemname)
- {
- if (isset($col['qf_setvalue'])) {
- $setval = $col['qf_setvalue'];
- }
-
- switch ($col['qf_type']) {
-
- case 'advcheckbox':
- case 'checkbox':
-
- $element =& HTML_QuickForm::createElement(
- 'advcheckbox',
- $elemname,
- $col['qf_label'],
- isset($col['qf_label_append']) ?
- $col['qf_label_append'] : null,
- $col['qf_attrs'],
- $col['qf_vals']
- );
-
- // WARNING: advcheckbox elements in HTML_QuickForm v3.2.2
- // and earlier do not honor setChecked(); they will always
- // be un-checked, unless a POST value sets them. Upgrade
- // to QF 3.2.3 or later.
- if (isset($setval) && $setval == true) {
- $element->setChecked(true);
- } else {
- $element->setChecked(false);
- }
-
- break;
-
- case 'autocomplete':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label'],
- $col['qf_vals'],
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'date':
-
- if (! isset($col['qf_opts']['format'])) {
- $col['qf_opts']['format'] = 'Y-m-d';
- }
-
- $element =& HTML_QuickForm::createElement(
- 'date',
- $elemname,
- $col['qf_label'],
- $col['qf_opts'],
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'time':
-
- if (! isset($col['qf_opts']['format'])) {
- $col['qf_opts']['format'] = 'H:i:s';
- }
-
- $element =& HTML_QuickForm::createElement(
- 'date',
- $elemname,
- $col['qf_label'],
- $col['qf_opts'],
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'timestamp':
-
- if (! isset($col['qf_opts']['format'])) {
- $col['qf_opts']['format'] = 'Y-m-d H:i:s';
- }
-
- $element =& HTML_QuickForm::createElement(
- 'date',
- $elemname,
- $col['qf_label'],
- $col['qf_opts'],
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'hidden':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- null,
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
-
- case 'radio':
-
- $element = array();
-
- foreach ((array) $col['qf_vals'] as $btnvalue => $btnlabel) {
-
- $element[] =& HTML_QuickForm::createElement(
- $col['qf_type'],
- null, // elemname not added because this is a group
- null,
- $btnlabel,
- $btnvalue,
- $col['qf_attrs']
- );
-
- }
-
- break;
-
- case 'select':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label'],
- $col['qf_vals'],
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setSelected($setval);
- }
-
- break;
-
- case 'password':
- case 'text':
- case 'textarea':
-
- if (! isset($col['qf_attrs']['maxlength']) &&
- isset($col['size'])) {
- $col['qf_attrs']['maxlength'] = $col['size'];
- }
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label'],
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'static':
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label'],
- (isset($setval) ? $setval : '')
- );
- break;
-
- case 'hierselect':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label'],
- $col['qf_attrs'],
- $col['qf_groupsep']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'jscalendar':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label'],
- $col['qf_opts'],
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'header':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'static':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'link':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label'],
- $col['qf_href'], // link href
- $setval, // link text
- $col['qf_attrs']
- );
-
- break;
-
- case 'reset':
- case 'submit':
-
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- null,
- $col['qf_attrs']
- );
-
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- break;
-
- case 'callback': // custom QF elements that need more than
- // the standard parameters
- // code from Arne Bippes <arne.bippes@brandao.de>
-
- if (is_callable(array($col['qf_callback'], 'createElement'))) {
- // Does an object with name from $col['qf_callback'] and
- // a method with name 'createElement' exist?
- $ret_value = call_user_func_array(
- array($col['qf_callback'], 'createElement'),
- array(&$element, &$col, &$elemname, &$setval));
- }
- elseif (is_callable($col['qf_callback'])) {
- // Does a method with name from $col['qf_callback'] exist?
- $ret_value = call_user_func_array(
- $col['qf_callback'],
- array(&$element, &$col, &$elemname, &$setval));
- }
- if ($ret_value) {
- break;
- }
- // fall into default block of switch statement:
- // - if $col['qf_callback'] is ...
- // - not a valid object
- // - a valid object, but a method 'createElement' doesn't exist
- // - not a valid method name
- // - if an error occured in 'createElement' or in the method
-
- default:
-
- /**
- * @author Moritz Heidkamp <moritz.heidkamp@invision-team.de>
- */
-
- // not a recognized type. is it registered with QuickForm?
- if (HTML_QuickForm::isTypeRegistered($col['qf_type'])) {
-
- // yes, create it with some minimalist parameters
- $element =& HTML_QuickForm::createElement(
- $col['qf_type'],
- $elemname,
- $col['qf_label'],
- $col['qf_attrs']
- );
-
- // set its default value, if there is one
- if (isset($setval)) {
- $element->setValue($setval);
- }
-
- } else {
- // element type is not registered with QuickForm.
- $element = null;
- }
-
- break;
-
- }
-
- // done
- return $element;
- }
-
-
- /**
- *
- * Build an array of form elements based from DB_Table columns.
- *
- * @static
- *
- * @access public
- *
- * @param array $cols A sequential array of DB_Table column
- * definitions from which to create form elements.
- *
- * @param string $arrayName By default, the form will use the names
- * of the columns as the names of the form elements. If you pass
- * $arrayName, the column names will become keys in an array named
- * for this parameter.
- *
- * @return array An array of HTML_QuickForm_Element objects.
- *
- */
-
- function &getGroup($cols, $arrayName = null)
- {
- $group = array();
-
- foreach ($cols as $name => $col) {
-
- if ($arrayName) {
- $elemname = $arrayName . "[$name]";
- } else {
- $elemname = $name;
- }
-
- DB_Table_QuickForm::fixColDef($col, $elemname);
-
- $group[] =& DB_Table_QuickForm::getElement($col, $elemname);
- }
-
- return $group;
- }
-
-
- /**
- *
- * Adds static form elements like 'header', 'static', 'submit' or 'reset' to
- * a pre-existing HTML_QuickForm object.
- *
- * @static
- *
- * @access public
- *
- * @param object &$form An HTML_QuickForm object.
- *
- * @param array $elements A sequential array of form element definitions.
- *
- * @return void
- *
- */
-
- function addStaticElements(&$form, $elements)
- {
- foreach ($elements as $name => $elemDef) {
-
- DB_Table_QuickForm::fixColDef($elemDef, $name);
-
- $element =& DB_Table_QuickForm::getElement($elemDef, $name);
-
- if (!is_object($element)) {
- continue;
- }
-
- if (isset($elemDef['before']) && !empty($elemDef['before'])) {
- $form->insertElementBefore($element, $elemDef['before']);
- } else {
- $form->addElement($element);
- }
- }
- }
-
-
- /**
- *
- * Adds DB_Table filters to a pre-existing HTML_QuickForm object.
- *
- * @static
- *
- * @access public
- *
- * @param object &$form An HTML_QuickForm object.
- *
- * @param array $cols A sequential array of DB_Table column definitions
- * from which to create form elements.
- *
- * @param string $arrayName By default, the form will use the names
- * of the columns as the names of the form elements. If you pass
- * $arrayName, the column names will become keys in an array named
- * for this parameter.
- *
- * @param array $formFilters An array with filter function names or
- * callbacks that will be applied to all form elements.
- *
- * @return void
- *
- */
- function addFilters(&$form, $cols, $arrayName = null,
- $formFilters = null)
- {
- foreach ($cols as $name => $col) {
- if ($arrayName) {
- $elemname = $arrayName . "[$name]";
- } else {
- $elemname = $name;
- }
-
- DB_Table_QuickForm::fixColDef($col, $elemname);
-
- foreach (array_keys($col['qf_filters']) as $fk) {
- $form->applyFilter($elemname, $col['qf_filters'][$fk]);
- }
- }
-
- if (is_array($formFilters)) {
- foreach (array_keys($formFilters) as $fk) {
- $form->applyFilter('__ALL__', $formFilters[$fk]);
- }
- }
- }
-
-
- /**
- *
- * Adds element rules to a pre-existing HTML_QuickForm object.
- *
- * @static
- *
- * @access public
- *
- * @param object &$form An HTML_QuickForm object.
- *
- * @param array $cols A sequential array of DB_Table column definitions
- * from which to create form elements.
- *
- * @param string $arrayName By default, the form will use the names
- * of the columns as the names of the form elements. If you pass
- * $arrayName, the column names will become keys in an array named
- * for this parameter.
- *
- * @param string $clientValidate By default, validation will match
- * the 'qf_client' value from the column definition. However,
- * if you set $clientValidate to true or false, this will
- * override the value from the column definition.
- *
- * @return void
- *
- */
-
- function addRules(&$form, $cols, $arrayName = null,
- $clientValidate = null)
- {
- foreach ($cols as $name => $col) {
-
- if ($arrayName) {
- $elemname = $arrayName . "[$name]";
- } else {
- $elemname = $name;
- }
-
- // make sure all necessary elements are in place
- DB_Table_QuickForm::fixColDef($col, $elemname);
-
- // if clientValidate is specified, override the column
- // definition. otherwise use the col def as it is.
- if (! is_null($clientValidate)) {
- // override
- if ($clientValidate) {
- $validate = 'client';
- } else {
- $validate = 'server';
- }
- } else {
- // use as-is
- if ($col['qf_client']) {
- $validate = 'client';
- } else {
- $validate = 'server';
- }
- }
-
- // **always** override these rules to make them
- // server-side only. suggested by Mark Wiesemann,
- // debugged by Hero Wanders.
- $onlyServer = array('filename', 'maxfilesize', 'mimetype',
- 'uploadedfile');
-
- // loop through the rules and add them
- foreach ($col['qf_rules'] as $type => $opts) {
-
- // some rules (e.g. rules for file elements) can only be
- // checked on the server; therefore, don't use client-side
- // validation for these rules
- $ruleValidate = $validate;
- if (in_array($type, $onlyServer)) {
- $ruleValidate = 'server';
- }
-
- switch ($type) {
-
- case 'alphanumeric':
- case 'email':
- case 'lettersonly':
- case 'nonzero':
- case 'nopunctuation':
- case 'numeric':
- case 'required':
- case 'uploadedfile':
- // $opts is the error message
- $message = $opts;
- $format = null;
- break;
-
- case 'filename':
- case 'maxfilesize':
- case 'maxlength':
- case 'mimetype':
- case 'minlength':
- case 'regex':
- // $opts[0] is the message
- // $opts[1] is the size, mimetype, or regex
- $message = $opts[0];
- $format = $opts[1];
- break;
-
- default:
- // by Alex Hoebart: this should allow any registered rule.
- if (!in_array($type, $form->getRegisteredRules())) {
- // rule is not registered ==> do not add a rule
- continue;
- }
- if (is_array($opts)) {
- // $opts[0] is the message
- // $opts[1] is the size or regex
- $message = $opts[0];
- $format = $opts[1];
- } else {
- // $opts is the error message
- $message = $opts;
- $format = null;
- }
- break;
- }
-
- switch ($col['qf_type']) {
-
- case 'date':
- case 'time':
- case 'timestamp':
- // date "elements" are groups ==> use addGroupRule()
- $form->addGroupRule($elemname, $message, $type, $format,
- null, $ruleValidate);
- break;
-
- default: // use addRule() for all other elements
- $form->addRule($elemname, $message, $type, $format,
- $ruleValidate);
- break;
-
- }
-
- }
- }
- }
-
-
- /**
- *
- * "Fixes" a DB_Table column definition for QuickForm.
- *
- * Makes it so that all the 'qf_*' key constants are populated
- * with appropriate default values; also checks the 'require'
- * value (if not set, defaults to false).
- *
- * @static
- *
- * @access public
- *
- * @param array &$col A DB_Table column definition.
- *
- * @param string $elemname The name for the target form element.
- *
- * @return void
- *
- */
-
- function fixColDef(&$col, $elemname)
- {
- // always have a "require" value, false if not set
- if (! isset($col['require'])) {
- $col['require'] = false;
- }
-
- // array of acceptable values, typically for
- // 'select' or 'radio'
- if (! isset($col['qf_vals'])) {
- $col['qf_vals'] = null;
- }
-
- // are we doing client validation in addition to
- // server validation? by default, no.
- if (! isset($col['qf_client'])) {
- $col['qf_client'] = false;
- }
-
- if (! isset($col['qf_filters'])) {
- $col['qf_filters'] = array();
- }
-
- // the element type; if not set,
- // assigns an element type based on the column type.
- // by default, the type is 'text' (unless there are
- // values, in which case the type is 'select')
- if (! isset($col['qf_type'])) {
-
- // if $col['type'] is not set, set it to null
- // ==> in the switch statement below, the
- // default case will be used
- if (!isset($col['type'])) {
- $col['type'] = null;
- }
-
- switch ($col['type']) {
-
- case 'boolean':
- $col['qf_type'] = 'checkbox';
- $col['qf_vals'] = array(0,1);
- break;
-
- case 'date':
- $col['qf_type'] = 'date';
- break;
-
- case 'time':
- $col['qf_type'] = 'time';
- break;
-
- case 'timestamp':
- $col['qf_type'] = 'timestamp';
- break;
-
- case 'clob':
- $col['qf_type'] = 'textarea';
- break;
-
- default:
- if (isset($col['qf_vals'])) {
- $col['qf_type'] = 'select';
- } else {
- $col['qf_type'] = 'text';
- }
- break;
-
- }
- }
-
- // label for the element; defaults to the element
- // name. adds both quickform label and table-header
- // label if qf_label is not set.
- if (! isset($col['qf_label'])) {
- if (isset($col['label'])) {
- $col['qf_label'] = $col['label'];
- }
- else {
- $col['qf_label'] = $elemname . ':';
- }
- }
-
- // special options for the element, typically used
- // for 'date' element types
- if (! isset($col['qf_opts'])) {
- $col['qf_opts'] = array();
- }
-
- // array of additional HTML attributes for the element
- if (! isset($col['qf_attrs'])) {
- // setting to array() generates an error in HTML_Common
- $col['qf_attrs'] = null;
- }
-
- // array of QuickForm validation rules to apply
- if (! isset($col['qf_rules'])) {
- $col['qf_rules'] = array();
- }
-
- // if the element is hidden, then we're done
- // (adding rules to hidden elements is mostly useless)
- if ($col['qf_type'] == 'hidden') {
- return;
- }
-
- // code to keep BC for the separator for grouped QF elements
- if (isset($col['qf_radiosep'])) {
- $col['qf_groupsep'] = $col['qf_radiosep'];
- }
-
- // add a separator for grouped elements
- if (!isset($col['qf_groupsep'])) {
- $col['qf_groupsep'] = '<br />';
- }
-
- // $col['qf_set_default_rules'] === false allows to turn off
- // the automatic creation of QF rules for this "column"
- // (suggested by Arne Bippes)
- if (isset($col['qf_set_default_rules']) &&
- $col['qf_set_default_rules'] === false) {
- return;
- }
-
- // the element is required
- // ==> set 'uploadedfile' (for file elements) or 'required' (for all
- // other elements) rule if it is was not already set
- $req_rule_name = ($col['qf_type'] == 'file') ? 'uploadedfile' : 'required';
- if (!isset($col['qf_rules'][$req_rule_name]) && $col['require']) {
-
- $col['qf_rules'][$req_rule_name] = sprintf(
- $GLOBALS['_DB_TABLE']['qf_rules']['required'],
- $col['qf_label']
- );
-
- }
-
- // for file elements the 'numeric' and 'maxlength' rules must not be set
- if ($col['qf_type'] == 'file') {
- return;
- }
-
- $numeric = array('smallint', 'integer', 'bigint', 'decimal',
- 'single', 'double');
-
- // the element is numeric
- if (!isset($col['qf_rules']['numeric']) && isset($col['type']) &&
- in_array($col['type'], $numeric)) {
-
- $col['qf_rules']['numeric'] = sprintf(
- $GLOBALS['_DB_TABLE']['qf_rules']['numeric'],
- $col['qf_label']
- );
-
- }
-
- // the element has a maximum length
- if (!isset($col['qf_rules']['maxlength']) && isset($col['size'])) {
-
- $max = $col['size'];
-
- $msg = sprintf(
- $GLOBALS['_DB_TABLE']['qf_rules']['maxlength'],
- $col['qf_label'],
- $max
- );
-
- $col['qf_rules']['maxlength'] = array($msg, $max);
- }
- }
- }
-
- ?>
-