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])); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * 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. | ||||
| 	 * The field name will be the same as the class name plus "_" plus attribute name (e.g. posixAccount_cn). | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue