Source for file select.php
Documentation is available at select.php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// +----------------------------------------------------------------------+
// | 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. |
// +----------------------------------------------------------------------+
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> |
// | Bertrand Mansion <bmansion@mamasam.com> |
// +----------------------------------------------------------------------+
// $Id: select.php,v 1.29 2005/07/22 17:30:51 avb Exp $
require_once('HTML/QuickForm/element.php');
* Class to dynamically create an HTML SELECT
* @author Adam Daniel <adaniel1@eesus.jnj.com>
* @author Bertrand Mansion <bmansion@mamasam.com>
* Contains the select options
* Default values of the SELECT
* @param string Select name attribute
* @param mixed Label(s) for the select
* @param mixed Data to be used to populate options
* @param mixed Either a typical HTML attribute string or an associative array
$this->_persistantFreeze = true;
* Returns the current API version
* Sets the default values of the select box
* @param mixed $values Array or comma delimited string of selected values
$values = split("[ ]?,[ ]?", $values);
$this->_values = array ($values);
* Returns an array of the selected values
* @return array of selected values
} // end func getSelected
* Sets the input field name
* @param string $name Input field name attribute
$this->updateAttributes (array ('name' => $name));
* Returns the element name
return $this->getAttribute ('name');
* Returns the element name (possibly with brackets appended)
if ($this->getAttribute ('multiple')) {
} //end func getPrivateName
* Sets the value of the form element
* @param mixed $values Array or comma delimited string of selected values
* Returns an array of the selected values
* @return array of selected values
* Sets the select field size, only applies to 'multiple' selects
* @param int $size Size of select field
$this->updateAttributes (array ('size' => $size));
* Returns the select field size
return $this->getAttribute ('size');
* Sets the select mutiple attribute
* @param bool $multiple Whether the select supports multi-selections
$this->updateAttributes (array ('multiple' => 'multiple'));
$this->removeAttribute ('multiple');
* Returns the select mutiple attribute
* @return bool true if multiple select, false otherwise
return (bool) $this->getAttribute ('multiple');
* Adds a new OPTION to the SELECT
* @param string $text Display text for the OPTION
* @param string $value Value for the OPTION
* @param mixed $attributes Either a typical HTML attribute string
* or an associative array
function addOption($text, $value, $attributes=null )
if (null === $attributes) {
$attributes = array ('value' => $value);
$attributes = $this->_parseAttributes ($attributes);
if (isset ($attributes['selected'])) {
// the 'selected' attribute will be set in toHtml()
$this->_removeAttr ('selected', $attributes);
$this->_values = array ($value);
} elseif (!in_array($value, $this->_values)) {
$this->_values[] = $value;
$this->_updateAttrArray ($attributes, array ('value' => $value));
$this->_options[] = array ('text' => $text, 'attr' => $attributes);
* Loads the options from an associative array
* @param array $arr Associative array of options
* @param mixed $values (optional) Array or comma delimited string of selected values
* @return PEAR_Error on error or true
return PEAR ::raiseError ('Argument 1 of HTML_Select::loadArray is not a valid array');
foreach ($arr as $key => $val) {
// Warning: new API since release 2.3
* Loads the options from DB_result object
* If no column names are specified the first two columns of the result are
* used as the text and value columns respectively
* @param object $result DB_result object
* @param string $textCol (optional) Name of column to display as the OPTION text
* @param string $valueCol (optional) Name of column to use as the OPTION value
* @param mixed $values (optional) Array or comma delimited string of selected values
* @return PEAR_Error on error or true
function loadDbResult(&$result, $textCol=null , $valueCol=null , $values=null )
return PEAR ::raiseError ('Argument 1 of HTML_Select::loadDbResult is not a valid DB_result');
$fetchMode = ($textCol && $valueCol) ? DB_FETCHMODE_ASSOC : DB_FETCHMODE_DEFAULT;
while (is_array($row = $result->fetchRow ($fetchMode)) ) {
if ($fetchMode == DB_FETCHMODE_ASSOC ) {
$this->addOption($row[$textCol], $row[$valueCol]);
} // end func loadDbResult
* Queries a database and loads the options from the results
* @param mixed $conn Either an existing DB connection or a valid dsn
* @param string $sql SQL query string
* @param string $textCol (optional) Name of column to display as the OPTION text
* @param string $valueCol (optional) Name of column to use as the OPTION value
* @param mixed $values (optional) Array or comma delimited string of selected values
function loadQuery(&$conn, $sql, $textCol=null , $valueCol=null , $values=null )
$dbConn = &DB ::connect ($conn, true );
if (DB ::isError ($dbConn)) {
return PEAR ::raiseError ('Argument 1 of HTML_Select::loadQuery is not a valid type');
$result = $dbConn->query ($sql);
if (DB ::isError ($result)) {
* Loads options from different types of data sources
* This method is a simulated overloaded method. The arguments, other than the
* first are optional and only mean something depending on the type of the first argument.
* If the first argument is an array then all arguments are passed in order to loadArray.
* If the first argument is a db_result then all arguments are passed in order to loadDbResult.
* If the first argument is a string or a DB connection then all arguments are
* passed in order to loadQuery.
* @param mixed $options Options source currently supports assoc array or DB_result
* @param mixed $param1 (optional) See function detail
* @param mixed $param2 (optional) See function detail
* @param mixed $param3 (optional) See function detail
* @param mixed $param4 (optional) See function detail
* @return PEAR_Error on error or true
function load(&$options, $param1=null , $param2=null , $param3=null , $param4=null )
case (is_a($options, 'db_result')):
return $this->loadDbResult($options, $param1, $param2, $param3);
return $this->loadQuery($options, $param1, $param2, $param3, $param4);
* Returns the SELECT in HTML
if ($this->_flagFrozen) {
$tabs = $this->_getTabs ();
if ($this->getComment () != '') {
$strHtml .= $tabs . '<!-- ' . $this->getComment () . " //-->\n";
$attrString = $this->_getAttrString ($this->_attributes);
$attrString = $this->_getAttrString ($this->_attributes);
$strHtml .= $tabs . '<select' . $attrString . ">\n";
foreach ($this->_options as $option) {
if (is_array($this->_values) && in_array((string) $option['attr']['value'], $this->_values)) {
$this->_updateAttrArray ($option['attr'], array ('selected' => 'selected'));
$strHtml .= $tabs . "\t<option" . $this->_getAttrString ($option['attr']) . '>' .
$option['text'] . "</option>\n";
return $strHtml . $tabs . '</select>';
* Returns the value of field without HTML tags
foreach ($this->_values as $key => $val) {
for ($i = 0 , $optCount = count($this->_options); $i < $optCount; $i++ ) {
if ((string) $val == (string) $this->_options[$i]['attr']['value']) {
$value[$key] = $this->_options[$i]['text'];
$html = empty ($value)? ' ': join('<br />', $value);
if ($this->_persistantFreeze) {
// Only use id attribute if doing single hidden input
if (1 == count($value)) {
$id = $this->getAttribute ('id');
$idAttr = isset ($id)? array ('id' => $id): array ();
foreach ($value as $key => $item) {
$html .= '<input' . $this->_getAttrString (array (
'value' => $this->_values[$key]
} //end func getFrozenHtml
* We check the options and return only the values that _could_ have been
* selected. We also return a scalar value if select is not "multiple"
$value = $this->_findValue ($submitValues);
if (is_array($value) && !empty ($this->_options)) {
for ($i = 0 , $optCount = count($this->_options); $i < $optCount; $i++ ) {
if ($v == $this->_options[$i]['attr']['value']) {
return $this->_prepareValue ($cleanValue[0 ], $assoc);
return $this->_prepareValue ($cleanValue, $assoc);
// {{{ onQuickFormEvent()
if ('updateValue' == $event) {
$value = $this->_findValue ($caller->_constantValues );
$value = $this->_findValue ($caller->_submitValues );
// XXX: should we push this to element::onQuickFormEvent()?
if (null === $value && !$caller->isSubmitted ()) {
$value = $this->_findValue ($caller->_defaultValues );
return parent ::onQuickFormEvent ($event, $arg, $caller);
} //end class HTML_QuickForm_select
Documentation generated on Mon, 11 Mar 2019 14:16:36 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.
|