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