2007-07-19 12:40:28 +02:00
|
|
|
<?php
|
2008-01-09 05:18:36 +01:00
|
|
|
/**
|
|
|
|
* Multi-line listbox field, created from a <select> tag.
|
|
|
|
* @package forms
|
|
|
|
* @subpackage fields-basic
|
2007-07-19 12:40:28 +02:00
|
|
|
*/
|
|
|
|
class ListboxField extends DropdownField {
|
2009-06-02 01:37:03 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The size of the field in rows.
|
|
|
|
* @var int
|
|
|
|
*/
|
2007-07-19 12:40:28 +02:00
|
|
|
protected $size;
|
2009-06-02 01:37:03 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Should the user be able to select multiple
|
|
|
|
* items on this dropdown field?
|
|
|
|
*
|
|
|
|
* @var boolean
|
|
|
|
*/
|
|
|
|
protected $multiple = false;
|
2007-07-19 12:40:28 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a new dropdown field.
|
2009-06-02 01:37:03 +02:00
|
|
|
*
|
|
|
|
* @param string $name The field name
|
|
|
|
* @param string $title The field title
|
|
|
|
* @param array $source An map of the dropdown items
|
|
|
|
* @param string|array $value You can pass an array of values or a single value like a drop down to be selected
|
|
|
|
* @param int $size Optional size of the select element
|
2007-07-19 12:40:28 +02:00
|
|
|
* @param form The parent form
|
|
|
|
*/
|
2009-06-02 01:37:03 +02:00
|
|
|
function __construct($name, $title = '', $source = array(), $value = '', $size = null, $multiple = false, $form = null) {
|
2007-07-19 12:40:28 +02:00
|
|
|
if($size) $this->size = $size;
|
|
|
|
if($multiple) $this->multiple = $multiple;
|
|
|
|
parent::__construct($name, $title, $source, $value, $form);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a <select> tag containing all the appropriate <option> tags
|
|
|
|
*/
|
|
|
|
function Field() {
|
2008-09-30 05:21:28 +02:00
|
|
|
$size = '';
|
|
|
|
$multiple = '';
|
|
|
|
|
2007-07-19 12:40:28 +02:00
|
|
|
if($this->size) $size = "size=\"$this->size\"";
|
2008-09-30 05:21:28 +02:00
|
|
|
|
2007-07-19 12:40:28 +02:00
|
|
|
if($this->multiple) {
|
|
|
|
$multiple = "multiple=\"multiple\"";
|
|
|
|
$this->name .= '[]';
|
|
|
|
}
|
|
|
|
|
2008-10-02 12:09:29 +02:00
|
|
|
$options = "";
|
|
|
|
|
2007-07-19 12:40:28 +02:00
|
|
|
// We have an array of values
|
|
|
|
if(is_array($this->value)){
|
|
|
|
// Loop through and figure out which values were selected.
|
|
|
|
|
2008-10-15 14:39:09 +02:00
|
|
|
foreach($this->getSource() as $value => $title) {
|
2007-07-19 12:40:28 +02:00
|
|
|
// Loop through the array of values to find out if this value is selected.
|
2008-10-02 12:09:29 +02:00
|
|
|
$selected = "";
|
2007-07-19 12:40:28 +02:00
|
|
|
foreach($this->value as $v){
|
2008-10-02 12:09:29 +02:00
|
|
|
if($value == $v) {
|
2007-07-19 12:40:28 +02:00
|
|
|
$selected = " selected=\"selected\"";
|
|
|
|
break;
|
2008-10-02 12:09:29 +02:00
|
|
|
}
|
|
|
|
}
|
2007-07-19 12:40:28 +02:00
|
|
|
$options .= "<option$selected value=\"$value\">$title</option>\n";
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
// Listbox was based a singlular value, so treat it like a dropdown.
|
2008-10-15 14:39:09 +02:00
|
|
|
foreach($this->getSource() as $value => $title) {
|
|
|
|
$selected = $value == $this->value ? " selected=\"selected\"" : "";
|
|
|
|
$options .= "<option$selected value=\"$value\">$title</option>";
|
2007-07-19 12:40:28 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$id = $this->id();
|
|
|
|
return "<select $size $multiple name=\"$this->name\" id=\"$id\">$options</select>";
|
|
|
|
}
|
2009-06-02 01:37:03 +02:00
|
|
|
|
2007-07-19 12:40:28 +02:00
|
|
|
/**
|
2009-06-02 01:37:03 +02:00
|
|
|
* Sets the size of this dropdown in rows.
|
|
|
|
* @param int $size The height in rows (e.g. 3)
|
2007-07-19 12:40:28 +02:00
|
|
|
*/
|
2009-06-02 01:37:03 +02:00
|
|
|
function setSize($size) {
|
|
|
|
$this->size = $size;
|
2007-07-19 12:40:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2009-06-02 01:37:03 +02:00
|
|
|
* Sets this field to have a muliple select attribute
|
|
|
|
* @param boolean $bool
|
|
|
|
*/
|
|
|
|
function setMultiple($bool) {
|
2007-07-19 12:40:28 +02:00
|
|
|
$this->multiple = $bool;
|
|
|
|
}
|
2009-06-02 01:37:03 +02:00
|
|
|
|
2007-07-19 12:40:28 +02:00
|
|
|
}
|
2009-02-02 00:49:53 +01:00
|
|
|
?>
|