📄 advmultiselect.php
字号:
<?php/*** Element for HTML_QuickForm that emulate a multi-select.** The HTML_QuickForm_advmultiselect package adds an element to the* HTML_QuickForm package that is two select boxes next to each other* emulating a multi-select.** PHP versions 4 and 5** LICENSE: This source file is subject to version 3.0 of the PHP license* that is available through the world-wide-web at the following URI:* http://www.php.net/license/3_0.txt. If you did not receive a copy of* the PHP License and are unable to obtain it through the web, please* send a note to license@php.net so we can mail you a copy immediately.** @category HTML* @package HTML_QuickForm_advmultiselect* @author Laurent Laville <pear@laurent-laville.org>* @copyright 1997-2005 The PHP Group* @license http://www.php.net/license/3_0.txt PHP License 3.0* @version CVS: $Id: advmultiselect.php 7739 2006-02-12 17:21:34Z turboke $* @link http://pear.php.net/package/HTML_QuickForm_advmultiselect*/require_once 'HTML/QuickForm/select.php';/*** Replace PHP_EOL constant** category PHP* package PHP_Compat* @link http://php.net/reserved.constants.core* @author Aidan Lister <aidan@php.net>* @since PHP 5.0.2*/if (!defined('PHP_EOL')) { switch (strtoupper(substr(PHP_OS, 0, 3))) { // Windows case 'WIN': define('PHP_EOL', "\r\n"); break; // Mac case 'DAR': define('PHP_EOL', "\r"); break; // Unix default: define('PHP_EOL', "\n"); }}/*** Element for HTML_QuickForm that emulate a multi-select.** The HTML_QuickForm_advmultiselect package adds an element to the* HTML_QuickForm package that is two select boxes next to each other* emulating a multi-select.** PHP versions 4 and 5** LICENSE: This source file is subject to version 3.0 of the PHP license* that is available through the world-wide-web at the following URI:* http://www.php.net/license/3_0.txt. If you did not receive a copy of* the PHP License and are unable to obtain it through the web, please* send a note to license@php.net so we can mail you a copy immediately.** @category HTML* @package HTML_QuickForm_advmultiselect* @author Laurent Laville <pear@laurent-laville.org>* @copyright 1997-2005 The PHP Group* @license http://www.php.net/license/3_0.txt PHP License 3.0* @version Release: 0.5.1* @link http://pear.php.net/package/HTML_QuickForm_advmultiselect*/class HTML_QuickForm_advmultiselect extends HTML_QuickForm_select{ /** * Prefix function name in javascript move selections * * @var string * @access private * @since 0.4.0 */ var $_jsPrefix; /** * Postfix function name in javascript move selections * * @var string * @access private * @since 0.4.0 */ var $_jsPostfix; /** * Associative array of the multi select container attributes * * @var array * @access private * @since 0.4.0 */ var $_tableAttributes; /** * Associative array of the add button attributes * * @var array * @access private * @since 0.4.0 */ var $_addButtonAttributes; /** * Associative array of the remove button attributes * * @var array * @access private * @since 0.4.0 */ var $_removeButtonAttributes; /** * Associative array of the move up button attributes * * @var array * @access private * @since 0.5.0 */ var $_upButtonAttributes; /** * Associative array of the move up button attributes * * @var array * @access private * @since 0.5.0 */ var $_downButtonAttributes; /** * Defines if both list (unselected, selected) will have their elements be * arranged from lowest to highest (or reverse) depending on comparaison function. * * SORT_ASC is used to sort in ascending order * SORT_DESC is used to sort in descending order * * @var integer * @access private * @since 0.5.0 */ var $_sort; /** * Associative array of the unselected item box attributes * * @var array * @access private * @since 0.4.0 */ var $_attributesUnselected; /** * Associative array of the selected item box attributes * * @var array * @access private * @since 0.4.0 */ var $_attributesSelected; /** * Associative array of the internal hidden box attributes * * @var array * @access private * @since 0.4.0 */ var $_attributesHidden; /** * Default Element template string * * @var string * @access private * @since 0.4.0 */ var $_elementTemplate = '{javascript}<table{class}><!-- BEGIN label_2 --><tr><th>{label_2}</th><!-- END label_2 --><!-- BEGIN label_3 --><th> </th><th>{label_3}</th></tr><!-- END label_3 --><tr> <td valign="top">{unselected}</td> <td align="center">{add}{remove}</td> <td valign="top">{selected}</td></tr></table>'; /** * Default Element stylesheet string * * @var string * @access private * @since 0.4.0 */ var $_elementCSS = '#{id}amsSelected { font: 13.3px sans-serif; background-color: #fff; overflow: auto; height: 14.3em; width: 12em; border-left: 1px solid #404040; border-top: 1px solid #404040; border-bottom: 1px solid #d4d0c8; border-right: 1px solid #d4d0c8;}#{id}amsSelected label { padding-right: 3px; display: block;}'; /** * Class constructor * * @param string $elementName Dual Select name attribute * @param mixed $elementLabel Label(s) for the select boxes * @param mixed $options Data to be used to populate options * @param mixed $attributes Either a typical HTML attribute string or an associative array * @param integer $sortOptions Either SORT_ASC for auto ascending arrange, * SORT_DESC for auto descending arrange, or * NULL for no sort (append at end: default) * * @access public * @return void * @since 0.4.0 */ function HTML_QuickForm_advmultiselect($elementName = null, $elementLabel = null, $options = null, $attributes = null, $sortOptions = null) { $this->HTML_QuickForm_select($elementName, $elementLabel, $options, $attributes); // add multiple selection attribute by default if missing $this->updateAttributes(array('multiple' => 'multiple')); if (is_null($this->getAttribute('size'))) { // default size is ten item on each select box (left and right) $this->updateAttributes(array('size' => 10)); } if (is_null($this->getAttribute('style'))) { // default width of each select box $this->updateAttributes(array('style' => 'width:100px;')); } $this->_tableAttributes = $this->getAttribute('class'); if (is_null($this->_tableAttributes)) { // default table layout $attr = array('border' => '0', 'cellpadding' => '10', 'cellspacing' => '0'); } else { $attr = array('class' => $this->_tableAttributes); $this->_removeAttr('class', $this->_attributes); } $this->_tableAttributes = $this->_getAttrString($attr); // set default add button attributes $this->setButtonAttributes('add'); // set default remove button attributes $this->setButtonAttributes('remove'); // set default move up button attributes $this->setButtonAttributes('moveup'); // set default move up button attributes $this->setButtonAttributes('movedown'); // defines javascript functions names $this->setJsElement(); // set select boxes sort order (none by default) if (isset($sortOptions)) { $this->_sort = $sortOptions; } else { $this->_sort = false; } } /** * Sets the button attributes * * In <b>custom example 1</b>, the <i>add</i> and <i>remove</i> buttons have look set * by the css class <i>inputCommand</i>. See especially lines 43-48 and 98-103. * * In <b>custom example 2</b>, the basic text <i>add</i> and <i>remove</i> buttons * are now replaced by images. See lines 43-44. * * In <b>custom example 5</b>, we have ability to sort the selection list (on right side) * by : * <pre> * - <b>user-end</b>: with <i>Up</i> and <i>Down</i> buttons * (see lines 65,65,76 and 128-130) * - <b>programming</b>: with the QF element constructor $sort option * (see lines 34,36,38 and 59) * </pre> * * @example examples/qfams_custom_5.php Custom example 5: source code * @link http://www.laurent-laville.org/img/qfams/screenshot/custom5.png Custom example 5: screenshot * * @example examples/qfams_custom_2.php Custom example 2: source code * @link http://www.laurent-laville.org/img/qfams/screenshot/custom2.png Custom example 2: screenshot * * @example examples/qfams_custom_1.php Custom example 1: source code * @link http://www.laurent-laville.org/img/qfams/screenshot/custom1.png Custom example 1: screenshot * * @param string $button Button identifier, either 'add', 'remove', 'moveup' or 'movedown' * @param mixed $attributes (optional) Either a typical HTML attribute string * or an associative array * @access public * @since 0.4.0 */ function setButtonAttributes($button, $attributes = null) { if (!is_string($button)) { return PEAR::raiseError('Argument 1 of advmultiselect::setButtonAttributes' .' is not a string'); } switch ($button) { case 'add': if (is_null($attributes)) { $this->_addButtonAttributes = array('name' => 'add', 'value' => ' >> ', 'type' => 'button' ); } else { $this->_updateAttrArray($this->_addButtonAttributes, $this->_parseAttributes($attributes) ); } break; case 'remove': if (is_null($attributes)) { $this->_removeButtonAttributes = array('name' => 'remove', 'value' => ' << ', 'type' => 'button' ); } else { $this->_updateAttrArray($this->_removeButtonAttributes, $this->_parseAttributes($attributes) ); } break; case 'moveup': if (is_null($attributes)) { $this->_upButtonAttributes = array('name' => 'up', 'value' => ' Up ', 'type' => 'button' ); } else { $this->_updateAttrArray($this->_upButtonAttributes, $this->_parseAttributes($attributes) ); } break; case 'movedown': if (is_null($attributes)) { $this->_downButtonAttributes = array('name' => 'down', 'value' => ' Down ', 'type' => 'button' ); } else { $this->_updateAttrArray($this->_downButtonAttributes, $this->_parseAttributes($attributes) ); } break; default; return PEAR::raiseError('Argument 1 of advmultiselect::setButtonAttributes' .' has unexpected value'); } } /** * Sets element template * * @param string $html The HTML surrounding select boxes and buttons * * @access public * @return void * @since 0.4.0 */ function setElementTemplate($html) { $this->_elementTemplate = $html; } /** * Sets JavaScript function name parts. Maybe usefull to avoid conflict names * * In <b>multiple example 1</b>, the javascript function prefix is set to not null * (see line 60). * * @example examples/qfams_multiple_1.php Multiple example 1: source code * @link http://www.laurent-laville.org/img/qfams/screenshot/multiple1.png Multiple example 1: screenshot * * @param string $pref (optional) Prefix name
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -