allow types to specify config options
This commit is contained in:
		
							parent
							
								
									0e170f56ff
								
							
						
					
					
						commit
						c40ce39bb8
					
				| 
						 | 
					@ -19,6 +19,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +41,10 @@ This is a list of API changes for all LAM releases.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<br>
 | 
					<br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<h2>4.5 -> 4.6</h2>The valid account types for each module must now
 | 
					<h2>4.6 -> 4.7</h2>Account types (e.g. user, group, host) may have config options now. See baseType::get_configOptions().<br>
 | 
				
			||||||
 | 
					<br>
 | 
				
			||||||
 | 
					<h2>4.5 -> 4.6</h2>
 | 
				
			||||||
 | 
					The valid account types for each module must now
 | 
				
			||||||
be set in can_manage(). This function is abstract in base module.
 | 
					be set in can_manage(). This function is abstract in base module.
 | 
				
			||||||
Setting the account type via meta data is no longer supported.<br>
 | 
					Setting the account type via meta data is no longer supported.<br>
 | 
				
			||||||
<br>
 | 
					<br>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@
 | 
				
			||||||
$Id$
 | 
					$Id$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
 | 
					  This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
 | 
				
			||||||
  Copyright (C) 2005 - 2012  Roland Gruber
 | 
					  Copyright (C) 2005 - 2014  Roland Gruber
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  This program is free software; you can redistribute it and/or modify
 | 
					  This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
  it under the terms of the GNU General Public License as published by
 | 
					  it under the terms of the GNU General Public License as published by
 | 
				
			||||||
| 
						 | 
					@ -186,6 +186,33 @@ class baseType {
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						* Returns a list of configuration options.
 | 
				
			||||||
 | 
						* 
 | 
				
			||||||
 | 
						* The field names are used as keywords to load and save settings.
 | 
				
			||||||
 | 
						* We recommend to use the type name as prefix for them (e.g. user_someSetting) to avoid naming conflicts.
 | 
				
			||||||
 | 
						*
 | 
				
			||||||
 | 
						* @return mixed htmlElement or array of htmlElement
 | 
				
			||||||
 | 
						* 
 | 
				
			||||||
 | 
						* @see htmlElement
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
						public function get_configOptions() {
 | 
				
			||||||
 | 
							return null;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						* Checks input values of config settings.
 | 
				
			||||||
 | 
						* <br>
 | 
				
			||||||
 | 
						* If the input data is invalid the return value is an array that contains subarrays to build StatusMessages ('message type', 'message head', 'message text').
 | 
				
			||||||
 | 
						* <br>If no errors occured the function returns an empty array.
 | 
				
			||||||
 | 
						*
 | 
				
			||||||
 | 
						* @param array $options hash array (option name => value) that contains the input. The option values are all arrays containing one or more elements.
 | 
				
			||||||
 | 
						* @return array list of error messages
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
						public function check_configOptions(&$options) {
 | 
				
			||||||
 | 
							return array();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
| 
						 | 
					@ -201,6 +201,48 @@ function LAMVersion() {
 | 
				
			||||||
	return '0.0.unknown';
 | 
						return '0.0.unknown';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Extracts config options from HTTP POST data.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @param array $confTypes array (option name => type (e.g. multiselect))
 | 
				
			||||||
 | 
					 * @return array list of config options (name => array(values))
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function extractConfigOptionsFromPOST($confTypes) {
 | 
				
			||||||
 | 
						$options = array();
 | 
				
			||||||
 | 
						foreach ($confTypes as $element => $type) {
 | 
				
			||||||
 | 
							// text fields
 | 
				
			||||||
 | 
							if ($type == "text") {
 | 
				
			||||||
 | 
								$options[$element] = array($_POST[$element]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// text fields
 | 
				
			||||||
 | 
							elseif ($type == "text_obfuscated") {
 | 
				
			||||||
 | 
								$options[$element] = array(obfuscateText($_POST[$element]));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// hidden fields
 | 
				
			||||||
 | 
							elseif ($type == "hidden") {
 | 
				
			||||||
 | 
								$options[$element] = array($_POST[$element]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// checkboxes
 | 
				
			||||||
 | 
							elseif ($type == "checkbox") {
 | 
				
			||||||
 | 
								if (isset($_POST[$element]) && ($_POST[$element] == "on")) $options[$element] = array('true');
 | 
				
			||||||
 | 
								else $options[$element] = array('false');
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// dropdownbox
 | 
				
			||||||
 | 
							elseif ($type == "select") {
 | 
				
			||||||
 | 
								$options[$element] = array($_POST[$element]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// multiselect
 | 
				
			||||||
 | 
							elseif ($type == "multiselect") {
 | 
				
			||||||
 | 
								$options[$element] = $_POST[$element];  // value is already an array
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// textarea
 | 
				
			||||||
 | 
							elseif ($type == "textarea") {
 | 
				
			||||||
 | 
								$options[$element] = explode("\r\n", $_POST[$element]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return $options;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
* Prints a meta refresh page
 | 
					* Prints a meta refresh page
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -227,6 +227,7 @@ if (sizeof($availableTypes) > 0) {
 | 
				
			||||||
	$container->addElement($availableContainer, true);
 | 
						$container->addElement($availableContainer, true);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$_SESSION['conftypes_optionTypes'] = array();
 | 
				
			||||||
// show active types
 | 
					// show active types
 | 
				
			||||||
if (sizeof($activeTypes) > 0) {
 | 
					if (sizeof($activeTypes) > 0) {
 | 
				
			||||||
	$container->addElement(new htmlSubTitle(_("Active account types")), true);
 | 
						$container->addElement(new htmlSubTitle(_("Active account types")), true);
 | 
				
			||||||
| 
						 | 
					@ -264,6 +265,20 @@ if (sizeof($activeTypes) > 0) {
 | 
				
			||||||
		$attrsInput->setFieldSize(40);
 | 
							$attrsInput->setFieldSize(40);
 | 
				
			||||||
		$activeContainer->addElement($attrsInput);
 | 
							$activeContainer->addElement($attrsInput);
 | 
				
			||||||
		$activeContainer->addNewLine();
 | 
							$activeContainer->addNewLine();
 | 
				
			||||||
 | 
							// type options
 | 
				
			||||||
 | 
							$typeObj = new $activeTypes[$i];
 | 
				
			||||||
 | 
							$typeConfigOptions = $typeObj->get_configOptions();
 | 
				
			||||||
 | 
							if (!empty($typeConfigOptions)) {
 | 
				
			||||||
 | 
								foreach ($typeConfigOptions as $typeConfigOption) {
 | 
				
			||||||
 | 
									$activeContainer->addElement($typeConfigOption, true);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// save option types to session
 | 
				
			||||||
 | 
								ob_start();
 | 
				
			||||||
 | 
								$dummyIndex = 1;
 | 
				
			||||||
 | 
								$typeConfigOptionTypes = parseHtml(null, $typeConfigOptions, array(), true, $dummyIndex, 'user');
 | 
				
			||||||
 | 
								ob_end_clean();
 | 
				
			||||||
 | 
								$_SESSION['conftypes_optionTypes'] = array_merge($_SESSION['conftypes_optionTypes'], $typeConfigOptionTypes);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		// advanced options
 | 
							// advanced options
 | 
				
			||||||
		$advancedOptionsContent = new htmlTable();
 | 
							$advancedOptionsContent = new htmlTable();
 | 
				
			||||||
		// LDAP filter
 | 
							// LDAP filter
 | 
				
			||||||
| 
						 | 
					@ -327,7 +342,13 @@ if (sizeof($activeTypes) > 0) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$tabindex = 1;
 | 
					$tabindex = 1;
 | 
				
			||||||
parseHtml(null, $container, array(), false, $tabindex, 'user');
 | 
					$dynamicTypeOptions = array();
 | 
				
			||||||
 | 
					foreach ($_SESSION['conftypes_optionTypes'] as $key => $value) {
 | 
				
			||||||
 | 
						if (isset($typeSettings[$key])) {
 | 
				
			||||||
 | 
							$dynamicTypeOptions[$key] = explode(LAMConfig::LINE_SEPARATOR, $typeSettings[$key]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					parseHtml(null, $container, $dynamicTypeOptions, false, $tabindex, 'user');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "<input type=\"hidden\" name=\"postAvailable\" value=\"yes\">\n";
 | 
					echo "<input type=\"hidden\" name=\"postAvailable\" value=\"yes\">\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -403,6 +424,7 @@ function checkInput() {
 | 
				
			||||||
			$typeSettings[$key] = $_POST[$key];
 | 
								$typeSettings[$key] = $_POST[$key];
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						$typeConfigOptions = extractConfigOptionsFromPOST($_SESSION['conftypes_optionTypes']);
 | 
				
			||||||
	for ($i = 0; $i < sizeof($accountTypes); $i++) {
 | 
						for ($i = 0; $i < sizeof($accountTypes); $i++) {
 | 
				
			||||||
		// set hidden
 | 
							// set hidden
 | 
				
			||||||
		$key = "hidden_" . $accountTypes[$i];
 | 
							$key = "hidden_" . $accountTypes[$i];
 | 
				
			||||||
| 
						 | 
					@ -418,6 +440,16 @@ function checkInput() {
 | 
				
			||||||
			$key = "readOnly_" . $accountTypes[$i];
 | 
								$key = "readOnly_" . $accountTypes[$i];
 | 
				
			||||||
			$typeSettings[$key] = (isset($_POST[$key]) && ($_POST[$key] == 'on'));
 | 
								$typeSettings[$key] = (isset($_POST[$key]) && ($_POST[$key] == 'on'));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							// check dynamic type settings
 | 
				
			||||||
 | 
							$typeObj = new $accountTypes[$i];
 | 
				
			||||||
 | 
							$typeMessages = $typeObj->check_configOptions($typeConfigOptions);
 | 
				
			||||||
 | 
							if (!empty($typeMessages)) {
 | 
				
			||||||
 | 
								$errors = array_merge($errors, $typeMessages);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// add dynamic type settings
 | 
				
			||||||
 | 
						foreach ($typeConfigOptions as $key => $value) {
 | 
				
			||||||
 | 
							$typeSettings[$key] = implode(LAMConfig::LINE_SEPARATOR, $value);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// save input
 | 
						// save input
 | 
				
			||||||
	$conf->set_typeSettings($typeSettings);
 | 
						$conf->set_typeSettings($typeSettings);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -273,40 +273,7 @@ function checkInput() {
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// check module options
 | 
						// check module options
 | 
				
			||||||
	// create option array to check and save
 | 
						// create option array to check and save
 | 
				
			||||||
	$options = array();
 | 
						$options = extractConfigOptionsFromPOST($_SESSION['conf_types']);
 | 
				
			||||||
	$opt_keys = array_keys($_SESSION['conf_types']);
 | 
					 | 
				
			||||||
	for ($i = 0; $i < sizeof($opt_keys); $i++) {
 | 
					 | 
				
			||||||
		$element = $opt_keys[$i];
 | 
					 | 
				
			||||||
		// text fields
 | 
					 | 
				
			||||||
		if ($_SESSION['conf_types'][$element] == "text") {
 | 
					 | 
				
			||||||
			$options[$element] = array($_POST[$element]);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		// text fields
 | 
					 | 
				
			||||||
		elseif ($_SESSION['conf_types'][$element] == "text_obfuscated") {
 | 
					 | 
				
			||||||
			$options[$element] = array(obfuscateText($_POST[$element]));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		// hidden fields
 | 
					 | 
				
			||||||
		elseif ($_SESSION['conf_types'][$element] == "hidden") {
 | 
					 | 
				
			||||||
			$options[$element] = array($_POST[$element]);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		// checkboxes
 | 
					 | 
				
			||||||
		elseif ($_SESSION['conf_types'][$element] == "checkbox") {
 | 
					 | 
				
			||||||
			if (isset($_POST[$element]) && ($_POST[$element] == "on")) $options[$element] = array('true');
 | 
					 | 
				
			||||||
			else $options[$element] = array('false');
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		// dropdownbox
 | 
					 | 
				
			||||||
		elseif ($_SESSION['conf_types'][$element] == "select") {
 | 
					 | 
				
			||||||
			$options[$element] = array($_POST[$element]);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		// multiselect
 | 
					 | 
				
			||||||
		elseif ($_SESSION['conf_types'][$element] == "multiselect") {
 | 
					 | 
				
			||||||
			$options[$element] = $_POST[$element];  // value is already an array
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		// textarea
 | 
					 | 
				
			||||||
		elseif ($_SESSION['conf_types'][$element] == "textarea") {
 | 
					 | 
				
			||||||
			$options[$element] = explode("\r\n", $_POST[$element]);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// get list of scopes of modules
 | 
						// get list of scopes of modules
 | 
				
			||||||
	$scopes = array();
 | 
						$scopes = array();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue