implemented configuration options for modules
This commit is contained in:
parent
aa052ebf10
commit
3959293d09
|
@ -24,7 +24,7 @@ All module classes should extend the baseModule class.<br>
|
|||
</h3>
|
||||
<h3><br>
|
||||
</h3>
|
||||
<h3>2.1.1. can_manage</h3>
|
||||
<h3>2.1.1. can_manage*</h3>
|
||||
<br>
|
||||
<table cellpadding="2" cellspacing="2" border="0"
|
||||
style="text-align: left; width: 300px;">
|
||||
|
@ -43,7 +43,7 @@ can manage accounts of the current type<span style="font-style: italic;"></span>
|
|||
otherwise <span style="font-style: italic;">false</span>.<br>
|
||||
<br>
|
||||
<br>
|
||||
<h3>2.1.2. get_alias</h3>
|
||||
<h3>2.1.2. get_alias*</h3>
|
||||
<br>
|
||||
<table style="text-align: left; width: 300px;" border="0"
|
||||
cellspacing="2" cellpadding="2">
|
||||
|
@ -63,6 +63,8 @@ module selection of the configuration wizard.<br>
|
|||
Please take care that your alias name is not too long. It may contain
|
||||
any character but should not include parts that may be interpreted by
|
||||
the browser (e.g. '<' or '>').<br>
|
||||
If you use different aliases dependent on the account type please make
|
||||
sure that there is a general alias for unknown types.<br>
|
||||
<br>
|
||||
<h3>2.1.3. is_base_module*</h3>
|
||||
<br>
|
||||
|
@ -118,7 +120,7 @@ The resulting LDAP filter will look like this:
|
|||
is only used for base modules. Standard modules do not need to
|
||||
implement it.</span><br>
|
||||
<br>
|
||||
<h3>2.1.5. get_dependencies</h3>
|
||||
<h3>2.1.5. get_dependencies*</h3>
|
||||
<br>
|
||||
<table cellpadding="2" cellspacing="2" border="0"
|
||||
style="text-align: left; width: 300px; font-weight: bold;">
|
||||
|
@ -168,7 +170,92 @@ Returns an hash array including meta data for the baseModule.<br>
|
|||
<span style="font-weight: bold;">Example: return array("is_base" =>
|
||||
true);</span><br style="font-weight: bold;">
|
||||
<br>
|
||||
<h3>2.1.7. get_scope()</h3>
|
||||
<h3>2.1.7. get_configOptions()*</h3>
|
||||
<br>
|
||||
<table cellpadding="2" cellspacing="2" border="0"
|
||||
style="text-align: left; width: 300px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td
|
||||
style="vertical-align: top; background-color: rgb(204, 204, 204); text-align: center;"><span
|
||||
style="font-weight: bold;">function get_configOptions($scopes)</span><br>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
Returns a list of configuration options.<br>
|
||||
<span style="font-weight: bold;">$scopes</span> is a list of <span
|
||||
style="font-style: italic;">account types</span> (user, group, host)
|
||||
which are used.<br>
|
||||
<span style="font-weight: bold;"></span><br>
|
||||
The return value is an array
|
||||
that contains <span style="font-weight: bold;">meta HTML code</span>.<br>
|
||||
<br>
|
||||
The type "fieldset" is not allowed here.<br>
|
||||
The <span style="font-style: italic;">name</span> attributes are used
|
||||
as keywords to load and save settings. We recommend to use the module
|
||||
name as prefix for them (e.g. posixAccount_homeDirectory) to avoid
|
||||
naming confilcts.<br>
|
||||
<br>
|
||||
<h3>2.1.8. get_configDescriptions()*</h3>
|
||||
<br>
|
||||
<table cellpadding="2" cellspacing="2" border="0"
|
||||
style="text-align: left; width: 300px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td
|
||||
style="vertical-align: top; background-color: rgb(204, 204, 204); text-align: center;"><span
|
||||
style="font-weight: bold;">function get_configDescriptions()</span><br>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
Returns the description of every configuration option and the legend of
|
||||
the module fieldset on the configuration page.<br>
|
||||
<span style="font-weight: bold;"></span><br>
|
||||
The <span style="font-style: italic;">return</span> value is a hash
|
||||
array with this format:<br>
|
||||
<br>
|
||||
<span style="font-weight: bold;"> array( 'legend'
|
||||
=> 'Some general description for fieldset',</span><br
|
||||
style="font-weight: bold;">
|
||||
<span style="font-weight: bold;">
|
||||
'descriptions' => array('option1'
|
||||
=> 'description1', ...))</span><br>
|
||||
<br>
|
||||
<h3>2.1.9. check_configOptions*</h3>
|
||||
<br>
|
||||
<table style="text-align: left; width: 400px; height: 30px;" border="0"
|
||||
cellspacing="2" cellpadding="2">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td
|
||||
style="vertical-align: top; background-color: rgb(204, 204, 204); text-align: center;"><span
|
||||
style="font-weight: bold;">function check_configOptions($scopes,
|
||||
$options)</span><br>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
This function checks the input for module configuration settings.<br>
|
||||
<br>
|
||||
<span style="font-weight: bold;">$scopes</span> is a list of used
|
||||
account types (user, group, host).<br>
|
||||
<span style="font-weight: bold;"></span><span style="font-weight: bold;">$options</span>
|
||||
is an hash array
|
||||
(option name => value) that contains the input. The option values
|
||||
are all arrays containing one or more elements.<br>
|
||||
If the input data is invalid the return value is an array that contains
|
||||
arrays to build StatusMessages (0 => message type, 1 => message
|
||||
head, 2 => message text, 3 => additional variables).<br>
|
||||
If no errors occured the function returns an empty array.<span
|
||||
style="font-weight: bold;"></span><br>
|
||||
<br style="font-weight: bold;">
|
||||
<span style="font-weight: bold;"></span>
|
||||
<h3>2.1.10. get_scope()</h3>
|
||||
<br>
|
||||
<table cellpadding="2" cellspacing="2" border="0"
|
||||
style="text-align: left; width: 300px;">
|
||||
|
@ -187,6 +274,8 @@ Returns the account type (user/group/host) of this module object.<br>
|
|||
<span style="font-weight: bold;">This function is provided by the
|
||||
baseModule and should not be overwritten.</span><br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<h3>2.2. Class functions</h3>
|
||||
<h3>2.2.1. init</h3>
|
||||
<br>
|
||||
|
@ -654,11 +743,51 @@ given</span><span style="font-weight: normal;"> (only if <span
|
|||
<ul>
|
||||
<li> array to build StatusMessages (0 => message type, 1
|
||||
=> message
|
||||
head, 2 => message text, 3 => additional variables)<span
|
||||
style="font-weight: bold;"><br>
|
||||
</span></li>
|
||||
head, 2 => message text, 3 => additional variables)</li>
|
||||
</ul>
|
||||
</ul>
|
||||
<br>
|
||||
<h3>6.7 get_configOptions()<br>
|
||||
</h3>
|
||||
"config_options" => array('user' => array,
|
||||
'host' => array, 'all' => array)<br>
|
||||
<br>
|
||||
The values from <span style="font-weight: bold;">'all'</span>
|
||||
are always returned, the other values only if they are inside the <span
|
||||
style="font-style: italic;">$scopes</span> array.<br
|
||||
style="font-weight: bold;">
|
||||
<br style="font-weight: bold;">
|
||||
<span style="font-weight: bold;"> <span
|
||||
style="font-style: italic;">Syntax for sub arrays is the same as for
|
||||
the
|
||||
return value of get_configOptions().<br>
|
||||
<br>
|
||||
</span></span>
|
||||
<h3>6.8 get_configDescriptions()<br>
|
||||
</h3>
|
||||
"config_descriptions" => array<br>
|
||||
<br>
|
||||
<span style="font-weight: bold;"> <span
|
||||
style="font-style: italic;">Syntax for array is the same as for the
|
||||
return value of get_configDescriptions().<br>
|
||||
<br>
|
||||
</span></span>
|
||||
<h3>6.9 check_configOptions()<br>
|
||||
</h3>
|
||||
"config_checks" => array('user' => array,
|
||||
'host' => 'array', 'all' => array)<br>
|
||||
<br>
|
||||
The values from 'all' are always used for checking,
|
||||
the other values only if they are inside the <span
|
||||
style="font-style: italic;">$scopes</span> array.<br>
|
||||
<span style="font-weight: bold;"><br style="font-weight: bold;">
|
||||
</span><span style="font-weight: bold;"> <span
|
||||
style="font-style: italic;">Syntax for sub arrays is the same as for
|
||||
check_profileOptions().<br>
|
||||
<br>
|
||||
</span></span>
|
||||
<h3><br>
|
||||
</h3>
|
||||
<span style="font-weight: bold;"></span><span style="font-weight: bold;"><span
|
||||
style="font-style: italic;"></span></span><span
|
||||
style="font-style: italic; font-weight: bold;"></span><span
|
||||
|
|
|
@ -141,7 +141,7 @@ class baseModule {
|
|||
/**
|
||||
* Checks input values of account profiles.
|
||||
*
|
||||
* @return profile elements
|
||||
* @return array profile elements
|
||||
*/
|
||||
function check_profileOptions($options) {
|
||||
$messages = array();
|
||||
|
@ -204,6 +204,106 @@ class baseModule {
|
|||
return $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of elements for the configuration.
|
||||
*
|
||||
* @param array $scopes account types (user, group, host)
|
||||
* @return array configuration elements
|
||||
*/
|
||||
function get_configOptions($scopes) {
|
||||
$return = array();
|
||||
for ($i = 0; $i < sizeof($scopes); $i++) {
|
||||
if (isset($this->meta['config_options'][$scopes[$i]])) $return = array_merge($return, $this->meta['config_options'][$scopes[$i]]);
|
||||
}
|
||||
if (isset($this->meta['config_options']['all'])) $return = array_merge($return, $this->meta['config_options']['all']);
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array containing descriptions shown on configuration pages.
|
||||
*
|
||||
* The returned array has the format array('legend' => '...', descriptions => array('option1' => '...', ...)).
|
||||
* <br> The "legend" value is used as text for the fieldset, the descriptions are used when the configuration is printed.
|
||||
*
|
||||
* @return array configuration elements
|
||||
*/
|
||||
function get_configDescriptions() {
|
||||
$return = array('legend' => 'no description', 'descriptions' => array());
|
||||
if (isset($this->meta['config_descriptions'])) $return = $this->meta['config_descriptions'];
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks input values of module settings.
|
||||
*
|
||||
* @param array $scopes list of account types which are used
|
||||
* @param array $options hash array containing the settings (array('option' => array('value')))
|
||||
* @return array profile elements
|
||||
*/
|
||||
function check_configOptions($scopes, $options) {
|
||||
$messages = array();
|
||||
$scopes[] = 'all'; // add checks that are independent of scope
|
||||
for ($s = 0; $s < sizeof($scopes); $s++) {
|
||||
if (is_array($this->meta['config_checks'][$scopes[$s]])) {
|
||||
$identifiers = array_keys($this->meta['config_checks'][$scopes[$s]]);
|
||||
for ($i = 0; $i < sizeof($identifiers); $i++) {
|
||||
// check if option is required
|
||||
if ($this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['required'] && ($options[$identifiers[$i]][0] == '')) {
|
||||
$messages[] = $this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['required_message'];
|
||||
}
|
||||
// check by regular expression (case insensitive)
|
||||
if ($this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['type'] == 'regex_i') {
|
||||
// ignore empty fileds
|
||||
if ($options[$identifiers[$i]][0] == '') continue;
|
||||
if (! eregi($this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['regex'], $options[$identifiers[$i]][0])) {
|
||||
$messages[] = $this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['error_message'];
|
||||
}
|
||||
}
|
||||
// check by regular expression (case sensitive)
|
||||
elseif ($this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['type'] == 'regex') {
|
||||
// ignore empty fileds
|
||||
if ($options[$identifiers[$i]][0] == '') continue;
|
||||
if (! ereg($this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['regex'], $options[$identifiers[$i]][0])) {
|
||||
$messages[] = $this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['error_message'];
|
||||
}
|
||||
}
|
||||
// check by integer comparison (greater)
|
||||
elseif ($this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['type'] == 'int_greater') {
|
||||
// ignore if both fields are empty
|
||||
if (($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name1']][0] == '') && ($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name2']][0] == '')) continue;
|
||||
// print error message if only one field is empty
|
||||
if (($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name1']][0] == '') || ($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name2']][0] == '')) {
|
||||
$messages[] = $this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['error_message'];
|
||||
continue;
|
||||
}
|
||||
// compare
|
||||
if (!(intval($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name1']][0]) > intval($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name2']][0]))) {
|
||||
$messages[] = $this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['error_message'];
|
||||
}
|
||||
}
|
||||
// check by integer comparison (greater or equal)
|
||||
elseif ($this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['type'] == 'int_greaterOrEqual') {
|
||||
// ignore if both fields are empty
|
||||
if (($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name1']][0] == '') && ($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name2']][0] == '')) continue;
|
||||
// print error message if only one field is empty
|
||||
if (($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name1']][0] == '') || ($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name2']][0] == '')) {
|
||||
$messages[] = $this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['error_message'];
|
||||
continue;
|
||||
}
|
||||
// compare
|
||||
if (!(intval($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name1']][0]) >= intval($options[$this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['cmp_name2']][0]))) {
|
||||
$messages[] = $this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['error_message'];
|
||||
}
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "Unsupported type!", $this->meta['config_checks'][$scopes[$s]][$identifiers[$i]]['type']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $messages;
|
||||
}
|
||||
|
||||
// TODO implement missing interface
|
||||
}
|
||||
|
||||
|
|
|
@ -365,7 +365,15 @@ class Config {
|
|||
echo "<b>" . _("Module settings") . ": </b><br>\n";
|
||||
echo "<ul>\n";
|
||||
$names = array_keys($this->moduleSettings);
|
||||
for ($i = 0; $i < sizeof($names); $i++) echo "<li>" . $names[$i] . ": " . implode(", ", $this->moduleSettings[$names[$i]]) . "</li>\n";
|
||||
$descriptions = getConfigDescriptions();
|
||||
$descriptions = $descriptions['descriptions'];
|
||||
for ($i = 0; $i < sizeof($names); $i++) {
|
||||
echo "<li><b>";
|
||||
// print description if available
|
||||
if (isset($descriptions[$names[$i]])) echo $descriptions[$names[$i]];
|
||||
else echo $names[$i];
|
||||
echo ": </b>" . implode(", ", $this->moduleSettings[$names[$i]]) . "</li>\n";
|
||||
}
|
||||
echo "</ul>\n";
|
||||
}
|
||||
|
||||
|
|
|
@ -249,6 +249,61 @@ function checkProfileOptions($scope, $options) {
|
|||
return $_SESSION["profile_account_$scope"]->checkProfileOptions($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a hash array (module name => elements) of all module options for the configuration page.
|
||||
*
|
||||
* @param array $scopes hash array (module name => array(account types))
|
||||
* @return array configuration options
|
||||
*/
|
||||
function getConfigOptions($scopes) {
|
||||
$return = array();
|
||||
$modules = array_keys($scopes);
|
||||
for ($i = 0; $i < sizeof($modules); $i++) {
|
||||
$m = new $modules[$i]('none');
|
||||
$return[$modules[$i]] = $m->get_configOptions($scopes[$modules[$i]]);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a hash array (module name => descriptions) containing descriptions shown on configuration pages.
|
||||
*
|
||||
* The returned array has the format array('legend' => array('posixAccount' => '...', ...), descriptions => array('option1' => '...', ...)).
|
||||
* <br> The "legend" value is used as text for the fieldset, the descriptions are used when the configuration is printed.
|
||||
*
|
||||
* @return array configuration descriptions
|
||||
*/
|
||||
function getConfigDescriptions() {
|
||||
$return = array('legend' => array(), 'descriptions' => array());
|
||||
$modules = array_merge(getAvailableModules('user'), getAvailableModules('group'), getAvailableModules('host'));
|
||||
$modules = array_values(array_unique($modules));
|
||||
for ($i = 0; $i < sizeof($modules); $i++) {
|
||||
$m = new $modules[$i]('none');
|
||||
$desc = $m->get_configDescriptions();
|
||||
$return['legend'][$modules[$i]] = $desc['legend'];
|
||||
$return['descriptions'] = array_merge($return['descriptions'], $desc['descriptions']);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the configuration options are valid
|
||||
*
|
||||
* @param array $scopes hash array (module name => array(account types))
|
||||
* @param array $options hash array containing all options (name => array(...))
|
||||
* @return array list of error messages
|
||||
*/
|
||||
function checkConfigOptions($scopes, $options) {
|
||||
$return = array();
|
||||
$modules = array_keys($scopes);
|
||||
for ($i = 0; $i < sizeof($modules); $i++) {
|
||||
$m = new $modules[$i]('none');
|
||||
$errors = $m->check_configOptions($scopes[$modules[$i]], $options);
|
||||
$return = array_merge($return, $errors);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a help entry from an account module.
|
||||
*
|
||||
|
|
|
@ -33,6 +33,9 @@ $Id$
|
|||
/** Access to config functions */
|
||||
include_once ("../../lib/config.inc");
|
||||
|
||||
/** access to module settings */
|
||||
include_once ("../../lib/modules.inc");
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
@ -72,6 +75,8 @@ if ($_POST['back'] || $_POST['submitconf'] || $_POST['editmodules']){
|
|||
$_SESSION['conf_groupmodules'] = explode(",", $_POST['groupmodules']);
|
||||
$_SESSION['conf_hostmodules'] = explode(",", $_POST['hostmodules']);
|
||||
$_SESSION['conf_filename'] = $_POST['filename'];
|
||||
$modSettings = array_keys($_SESSION['config_types']);
|
||||
for ($i = 0; $i < sizeof($modSettings); $i++) $_SESSION['config_moduleSettings'][$modSettings[$i]] = $_POST[$modSettings[$i]];
|
||||
}
|
||||
// go to final page
|
||||
if ($_POST['submitconf']){
|
||||
|
@ -244,6 +249,58 @@ echo ("</fieldset>");
|
|||
|
||||
echo ("<p></p>");
|
||||
|
||||
|
||||
// module settings
|
||||
|
||||
// get list of scopes of modules
|
||||
$scopes = array();
|
||||
$mods = $conf->get_UserModules();
|
||||
for ($i = 0; $i < sizeof($mods); $i++) $scopes[$mods[$i]][] = 'user';
|
||||
$mods = $conf->get_GroupModules();
|
||||
for ($i = 0; $i < sizeof($mods); $i++) $scopes[$mods[$i]][] = 'group';
|
||||
$mods = $conf->get_HostModules();
|
||||
for ($i = 0; $i < sizeof($mods); $i++) $scopes[$mods[$i]][] = 'host';
|
||||
|
||||
// get module options
|
||||
$options = getConfigOptions($scopes);
|
||||
// get current setting
|
||||
$old_options = $conf->get_moduleSettings();
|
||||
// get module descriptions
|
||||
$moduleDescriptions = getConfigDescriptions();
|
||||
|
||||
// save scopes
|
||||
$_SESSION['config_scopes'] = $scopes;
|
||||
|
||||
// index for tab order (1 is LDAP suffix)
|
||||
$tabindex = 2;
|
||||
|
||||
// display module boxes
|
||||
$modules = array_keys($options);
|
||||
for ($m = 0; $m < sizeof($modules); $m++) {
|
||||
// ignore empty values
|
||||
if (!is_array($options[$modules[$m]]) || (sizeof($options[$modules[$m]]) < 1)) continue;
|
||||
echo "<fieldset>\n";
|
||||
echo "<legend><b>" . $moduleDescriptions['legend'][$modules[$m]] . "</b></legend>\n";
|
||||
echo "<table>\n";
|
||||
for ($l = 0; $l < sizeof($options[$modules[$m]]); $l++) { // option lines
|
||||
echo "<tr>\n";
|
||||
for ($o = 0; $o < sizeof($options[$modules[$m]][$l]); $o++) { // line parts
|
||||
echo "<td";
|
||||
if (isset($options[$modules[$m]][$l][$o]['align'])) echo " align=\"" . $options[$modules[$m]][$l][$o]['align'] . "\"";
|
||||
if (isset($options[$modules[$m]][$l][$o]['colspan'])) echo " colspan=\"" . $options[$modules[$m]][$l][$o]['colspan'] . "\"";
|
||||
if (isset($options[$modules[$m]][$l][$o]['rowspan'])) echo " rowspan=\"" . $options[$modules[$m]][$l][$o]['rowspan'] . "\"";
|
||||
echo ">";
|
||||
print_option($options[$modules[$m]][$l][$o], $modules[$m], $old_options, $tabindex);
|
||||
echo "</td>\n";
|
||||
}
|
||||
echo "</tr>\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
echo "</fieldset>\n";
|
||||
echo "<br>";
|
||||
}
|
||||
|
||||
|
||||
echo ("<fieldset><legend><b>" . _("Ranges") . "</b></legend>");
|
||||
echo ("<table border=0>");
|
||||
|
||||
|
@ -437,5 +494,110 @@ echo ("</form>\n");
|
|||
echo ("</body>\n");
|
||||
echo ("</html>\n");
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* prints out the row of a section table including the option name, values and help
|
||||
*
|
||||
* @param array $values an array formated as module option
|
||||
* @param string $module_name the name of the module the options belong to
|
||||
* @param array $old_options a hash array with the values from the loaded profile
|
||||
* @param integer $tabindex current value for tabulator order
|
||||
*/
|
||||
function print_option($values, $modulename, $old_options, &$tabindex) {
|
||||
switch ($values['kind']) {
|
||||
// text value
|
||||
case 'text':
|
||||
echo $values['text'] . "\n";
|
||||
break;
|
||||
// help link
|
||||
case 'help':
|
||||
echo "<a href=../help.php?module=$modulename&HelpNumber=" . $values['value'] . ">" . _('Help') . "</a>\n";
|
||||
break;
|
||||
// input field
|
||||
case 'input':
|
||||
if (($values['type'] == 'text') || ($values['type'] == 'checkbox')) {
|
||||
if ($values['type'] == 'text') {
|
||||
$output = "<input tabindex=\"$tabindex\" type=\"text\" name=\"" . $values['name'] . "\"";
|
||||
if ($values['size']) $output .= " size=\"" . $values['size'] . "\"";
|
||||
if ($values['maxlength']) $output .= " maxlength=\"" . $values['maxlength'] . "\"";
|
||||
if (isset($old_options[$values['name']])) $output .= " value=\"" . $old_options[$values['name']][0] . "\"";
|
||||
elseif ($values['value']) $output .= " value=\"" . $values['value'] . "\"";
|
||||
if ($values['disabled']) $output .= " disabled";
|
||||
$output .= ">\n";
|
||||
echo $output;
|
||||
$_SESSION['config_types'][$values['name']] = "text";
|
||||
}
|
||||
elseif ($values['type'] == 'checkbox') {
|
||||
$output = "<input tabindex=\"$tabindex\" type=\"checkbox\" name=\"" . $values['name'] . "\"";
|
||||
if ($values['size']) $output .= " size=\"" . $values['size'] . "\"";
|
||||
if ($values['maxlength']) $output .= " maxlength=\"" . $values['maxlength'] . "\"";
|
||||
if ($values['disabled']) $output .= " disabled";
|
||||
if (isset($old_options[$values['name']]) && ($old_options[$values['name']][0] == 'true')) $output .= " checked";
|
||||
elseif ($values['checked']) $output .= " checked";
|
||||
$output .= ">\n";
|
||||
echo $output;
|
||||
$_SESSION['config_types'][$values['name']] = "checkbox";
|
||||
}
|
||||
$tabindex++;
|
||||
}
|
||||
break;
|
||||
// select box
|
||||
case 'select':
|
||||
if (! is_numeric($values['size'])) $values['size'] = 1;// correct size if needed
|
||||
if ($values['multiple']) {
|
||||
echo "<select tabindex=\"$tabindex\" name=\"" . $values['name'] . "[]\" size=\"" . $values['size'] . "\" multiple>\n";
|
||||
$_SESSION['config_types'][$values['name']] = "multiselect";
|
||||
}
|
||||
else {
|
||||
echo "<select tabindex=\"$tabindex\" name=\"" . $values['name'] . "\" size=\"" . $values['size'] . "\">\n";
|
||||
$_SESSION['config_types'][$values['name']] = "select";
|
||||
}
|
||||
// option values
|
||||
for ($i = 0; $i < sizeof($values['options']); $i++) {
|
||||
// use values from old profile if given
|
||||
if (isset($old_options[$values['name']])) {
|
||||
if (in_array($values['options'][$i], $old_options[$values['name']])) {
|
||||
echo "<option selected>" . $values['options'][$i] . "</option>\n";
|
||||
}
|
||||
else {
|
||||
echo "<option>" . $values['options'][$i] . "</option>\n";
|
||||
}
|
||||
}
|
||||
// use default values if not in profile
|
||||
else {
|
||||
if (is_array($values['options_selected']) && in_array($values['options'][$i], $values['options_selected'])) {
|
||||
echo "<option selected>" . $values['options'][$i] . "</option>\n";
|
||||
}
|
||||
else {
|
||||
echo "<option>" . $values['options'][$i] . "</option>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
echo "</select>\n";
|
||||
$tabindex++;
|
||||
break;
|
||||
// subtable
|
||||
case 'table':
|
||||
echo "<table>\n";
|
||||
for ($l = 0; $l < sizeof($values['value']); $l++) { // option lines
|
||||
echo "<tr>\n";
|
||||
for ($o = 0; $o < sizeof($values['value'][$l]); $o++) { // line parts
|
||||
echo "<td>";
|
||||
print_option($values['value'][$l][$o], $values['value'], $old_options, $tabindex);
|
||||
echo "</td>\n";
|
||||
}
|
||||
echo "</tr>\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
break;
|
||||
// print error message for invalid types
|
||||
default:
|
||||
echo _("Unrecognized type") . ": " . $values['kind'] . "\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
|
|
|
@ -214,6 +214,54 @@ if (! $conf->set_HostModules($_SESSION['conf_hostmodules'])) {
|
|||
exit;
|
||||
}
|
||||
|
||||
// check module options
|
||||
// create option array to check and save
|
||||
$options = array();
|
||||
$opt_keys = array_keys($_SESSION['config_types']);
|
||||
foreach ($opt_keys as $element) {
|
||||
// text fields
|
||||
if ($_SESSION['config_types'][$element] == "text") {
|
||||
$options[$element] = array($_SESSION['config_moduleSettings'][$element]);
|
||||
}
|
||||
// checkboxes
|
||||
elseif ($_SESSION['config_types'][$element] == "checkbox") {
|
||||
if ($_SESSION['config_moduleSettings'][$element] == "on") $options[$element] = array('true');
|
||||
else $options[$element] = array('false');
|
||||
}
|
||||
// dropdownbox
|
||||
elseif ($_SESSION['config_types'][$element] == "select") {
|
||||
$options[$element] = array($_SESSION['config_moduleSettings'][$element]);
|
||||
}
|
||||
// multiselect
|
||||
elseif ($_SESSION['config_types'][$element] == "multiselect") {
|
||||
$options[$element] = $_SESSION['config_moduleSettings'][$element]; // value is already an array
|
||||
}
|
||||
}
|
||||
|
||||
// remove double slashes if magic quotes are on
|
||||
if (get_magic_quotes_gpc() == 1) {
|
||||
foreach ($opt_keys as $element) {
|
||||
if (is_string($options[$element][0])) $options[$element][0] = stripslashes($options[$element][0]);
|
||||
}
|
||||
}
|
||||
|
||||
// check options
|
||||
$errors = checkConfigOptions($_SESSION['config_scopes'], $options);
|
||||
// print error messages if any
|
||||
if (sizeof($errors) > 0) {
|
||||
for ($i = 0; $i < sizeof($errors); $i++) {
|
||||
if (sizeof($errors[$i]) > 3) { // messages with additional variables
|
||||
StatusMessage($errors[$i][0], $errors[$i][1], $errors[$i][2], $errors[$i][3]);
|
||||
}
|
||||
else {
|
||||
StatusMessage($errors[$i][0], $errors[$i][1], $errors[$i][2]);
|
||||
}
|
||||
}
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
// save module setting
|
||||
$conf->set_moduleSettings($options);
|
||||
|
||||
// check if password was changed
|
||||
if ($passwd1) {
|
||||
|
|
Loading…
Reference in New Issue