support multi-value selects
This commit is contained in:
parent
a02441f0ab
commit
0bbf26bc17
|
@ -1400,6 +1400,81 @@ abstract class baseModule {
|
||||||
$this->attributes[$attrName] = array_values(array_unique($this->attributes[$attrName]));
|
$this->attributes[$attrName] = array_values(array_unique($this->attributes[$attrName]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a select field type that may contain multiple values to the given htmlTable.
|
||||||
|
* The field name will be the same as the attribute name plus a counting number (e.g. street_0).
|
||||||
|
* The last field will be followed by a button to add a new value. This is named add_{attribute name} (e.g. add_street).
|
||||||
|
* There must be a help entry with the attribute name as ID.
|
||||||
|
* A new line will also be added after this entry so multiple calls will show the fields one below the other.
|
||||||
|
*
|
||||||
|
* @param htmlTable $container parent container
|
||||||
|
* @param String $attrName attribute name
|
||||||
|
* @param String $label label name
|
||||||
|
* @param array $options options for the selects
|
||||||
|
* @param boolean $hasDescriptiveOptions has descriptive options
|
||||||
|
* @param boolean $required this is a required field (default false)
|
||||||
|
* @param integer $fieldSize field size
|
||||||
|
* @param array $htmlIDs reference to array where to add the generated HTML IDs of the input fields
|
||||||
|
*/
|
||||||
|
protected function addMultiValueSelectField(&$container, $attrName, $label, $options, $hasDescriptiveOptions = false,
|
||||||
|
$required = false, $fieldSize = 1, &$htmlIDs = null) {
|
||||||
|
$values = array();
|
||||||
|
if (isset($this->attributes[$attrName][0])) {
|
||||||
|
$values = $this->attributes[$attrName];
|
||||||
|
}
|
||||||
|
if (sizeof($values) == 0) {
|
||||||
|
$values[] = '';
|
||||||
|
}
|
||||||
|
natcasesort($values);
|
||||||
|
$values = array_values($values);
|
||||||
|
if ($label !== null) {
|
||||||
|
$labelTextOut = new htmlOutputText($label);
|
||||||
|
$labelTextOut->alignment = htmlElement::ALIGN_TOP;
|
||||||
|
$container->addElement($labelTextOut);
|
||||||
|
}
|
||||||
|
$subContainer = new htmlTable();
|
||||||
|
$subContainer->alignment = htmlElement::ALIGN_TOP;
|
||||||
|
for ($i = 0; $i < sizeof($values); $i++) {
|
||||||
|
$input = new htmlSelect($attrName . '_' . $i, $options, array($values[$i]), $fieldSize);
|
||||||
|
$subContainer->addElement($input);
|
||||||
|
if (!empty($htmlIDs)) {
|
||||||
|
$htmlIDs[] = $attrName . '_' . $i;
|
||||||
|
}
|
||||||
|
if (!empty($values[$i])) {
|
||||||
|
$subContainer->addElement(new htmlButton('del_' . $attrName . '_' . $i, 'del.png', true));
|
||||||
|
}
|
||||||
|
if ($i == 0) {
|
||||||
|
$subContainer->addElement(new htmlButton('add_' . $attrName, 'add.png', true));
|
||||||
|
}
|
||||||
|
$subContainer->addNewLine();
|
||||||
|
}
|
||||||
|
$container->addElement($subContainer);
|
||||||
|
$help = new htmlHelpLink($attrName);
|
||||||
|
$help->alignment = htmlElement::ALIGN_TOP;
|
||||||
|
$container->addElement($help, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates a multi-value select field.
|
||||||
|
* The select fields must be created with function addMultiValueSelectField().
|
||||||
|
*
|
||||||
|
* @param String $attrName attribute name
|
||||||
|
*/
|
||||||
|
protected function processMultiValueSelectField($attrName) {
|
||||||
|
$counter = 0;
|
||||||
|
while (isset($_POST[$attrName . '_' . $counter])) {
|
||||||
|
$this->attributes[$attrName][$counter] = trim($_POST[$attrName . '_' . $counter]);
|
||||||
|
if (($this->attributes[$attrName][$counter] == '') || isset($_POST['del_' . $attrName . '_' . $counter])) {
|
||||||
|
unset($this->attributes[$attrName][$counter]);
|
||||||
|
}
|
||||||
|
$counter++;
|
||||||
|
}
|
||||||
|
if (isset($_POST['add_' . $attrName])) {
|
||||||
|
$this->attributes[$attrName][] = '';
|
||||||
|
}
|
||||||
|
$this->attributes[$attrName] = array_values(array_unique($this->attributes[$attrName]));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a simple text input field for the self service.
|
* Adds a simple text input field for the self service.
|
||||||
* The field name will be the same as the class name plus "_" plus attribute name (e.g. posixAccount_cn).
|
* The field name will be the same as the class name plus "_" plus attribute name (e.g. posixAccount_cn).
|
||||||
|
|
Loading…
Reference in New Issue