diff --git a/actions/admin/settings/130.webserver.php b/actions/admin/settings/130.webserver.php
index 97d0fcb2..ee3f0116 100644
--- a/actions/admin/settings/130.webserver.php
+++ b/actions/admin/settings/130.webserver.php
@@ -31,6 +31,7 @@ return array(
'option_mode' => 'one',
'option_options' => array('apache2' => 'Apache 2', 'lighttpd' => 'ligHTTPd'),
'save_method' => 'storeSettingField',
+ 'overview_option' => true
),
'system_apacheconf_vhost' => array(
'label' => $lng['serversettings']['apacheconf_vhost'],
diff --git a/actions/admin/settings/170.logger.php b/actions/admin/settings/170.logger.php
index 4bb5f51a..e7ce0b6f 100644
--- a/actions/admin/settings/170.logger.php
+++ b/actions/admin/settings/170.logger.php
@@ -29,6 +29,7 @@ return array(
'type' => 'bool',
'default' => false,
'save_method' => 'storeSettingField',
+ 'overview_option' => true
),
'logger_severity' => array(
'label' => $lng['serversettings']['logger']['severity'],
diff --git a/actions/admin/settings/180.dkim.php b/actions/admin/settings/180.dkim.php
index 34898204..8e937cd5 100644
--- a/actions/admin/settings/180.dkim.php
+++ b/actions/admin/settings/180.dkim.php
@@ -29,6 +29,7 @@ return array(
'type' => 'bool',
'default' => false,
'save_method' => 'storeSettingFieldInsertBindTask',
+ 'overview_option' => true
),
'dkim_prefix' => array(
'label' => $lng['dkim']['dkim_prefix'],
diff --git a/actions/admin/settings/185.spf.php b/actions/admin/settings/185.spf.php
index ab949417..6403fb42 100644
--- a/actions/admin/settings/185.spf.php
+++ b/actions/admin/settings/185.spf.php
@@ -26,7 +26,8 @@ return array(
'varname' => 'use_spf',
'type' => 'bool',
'default' => false,
- 'save_method' => 'storeSettingField'
+ 'save_method' => 'storeSettingField',
+ 'overview_option' => true
),
'spf_entry' => array(
'label' => $lng['spf']['spf_entry'],
diff --git a/actions/admin/settings/190.ticket.php b/actions/admin/settings/190.ticket.php
index 9a50d452..f76b0002 100644
--- a/actions/admin/settings/190.ticket.php
+++ b/actions/admin/settings/190.ticket.php
@@ -30,6 +30,7 @@ return array(
'default' => false,
'cronmodule' => 'froxlor/ticket',
'save_method' => 'storeSettingField',
+ 'overview_option' => true
),
'ticket_noreply_email' => array(
'label' => $lng['serversettings']['ticket']['noreply_email'],
diff --git a/actions/admin/settings/200.aps.php b/actions/admin/settings/200.aps.php
index 7961f324..2fa444dd 100644
--- a/actions/admin/settings/200.aps.php
+++ b/actions/admin/settings/200.aps.php
@@ -30,6 +30,7 @@ return array(
'default' => false,
'cronmodule' => 'froxlor/aps',
'save_method' => 'storeSettingField',
+ 'overview_option' => true
),
'aps_items_per_page' => array(
'label' => $lng['aps']['packages_per_page'],
diff --git a/admin_settings.php b/admin_settings.php
index ddcafa74..52ecd7a7 100644
--- a/admin_settings.php
+++ b/admin_settings.php
@@ -31,20 +31,78 @@ if(($page == 'settings' || $page == 'overview')
&& $userinfo['change_serversettings'] == '1')
{
$settings_data = loadConfigArrayDir('./actions/admin/settings/');
- $settings = loadSettings(&$settings_data, &$db);
+ $settings = loadSettings($settings_data, $db);
if(isset($_POST['send'])
&& $_POST['send'] == 'send')
{
- if(processForm(&$settings_data, &$_POST, array('filename' => $filename, 'action' => $action, 'page' => $page)))
+ $_part = isset($_GET['part']) ? $_GET['part'] : '';
+
+ if($_part == '')
{
+ $_part = isset($_POST['part']) ? $_POST['part'] : '';
+ }
+
+ if($_part != '')
+ {
+ if($_part == 'all')
+ {
+ $settings_all = true;
+ $settings_part = false;
+ }
+ else
+ {
+ $settings_all = false;
+ $settings_part = true;
+ }
+
+ $only_enabledisable = false;
+ }
+ else
+ {
+ $settings_all = false;
+ $settings_part = false;
+ $only_enabledisable = true;
+ }
+
+ if(processFormEx(
+ $settings_data,
+ $_POST,
+ array('filename' => $filename, 'action' => $action, 'page' => $page),
+ $_part,
+ $settings_all,
+ $settings_part,
+ $only_enabledisable
+ )
+ ) {
standard_success('settingssaved', '', array('filename' => $filename, 'action' => $action, 'page' => $page));
}
}
else
{
- $fields = buildForm(&$settings_data);
- eval("echo \"" . getTemplate("settings/settings") . "\";");
+ $_part = isset($_GET['part']) ? $_GET['part'] : '';
+
+ if($_part == '')
+ {
+ $_part = isset($_POST['part']) ? $_POST['part'] : '';
+ }
+
+ $fields = buildFormEx($settings_data, $_part);
+
+ $settings_page = '';
+ if($_part == '')
+ {
+ eval("\$settings_page .= \"" . getTemplate("settings/settings_overview") . "\";");
+ }
+ else
+ {
+ eval("\$settings_page .= \"" . getTemplate("settings/settings") . "\";");
+ }
+
+ eval("echo \"" . getTemplate("settings/settings_form_begin") . "\";");
+ eval("echo \$settings_page;");
+ eval("echo \"" . getTemplate("settings/settings_form_end") . "\";");
+
}
}
elseif($page == 'rebuildconfigs'
diff --git a/lib/functions/formfields/function.buildFormEx.php b/lib/functions/formfields/function.buildFormEx.php
new file mode 100644
index 00000000..f898a440
--- /dev/null
+++ b/lib/functions/formfields/function.buildFormEx.php
@@ -0,0 +1,62 @@
+ (2010-)
+ * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
+ * @package Settings
+ * @version $Id $
+ */
+
+function buildFormEx($form, $part = '')
+{
+ $fields = '';
+
+ if(validateFormDefinition($form))
+ {
+ foreach($form['groups'] as $groupname => $groupdetails)
+ {
+ // show overview
+ if($part == '')
+ {
+ if(isset($groupdetails['title']) && $groupdetails['title'] != '')
+ {
+ $fields .= getFormOverviewGroupOutput($groupname, $groupdetails);
+ }
+ }
+ // only show one section
+ elseif($part != '' && ($groupname == $part || $part == 'all'))
+ {
+ if(isset($groupdetails['title']) && $groupdetails['title'] != '')
+ {
+ $fields .= getFormGroupOutput($groupname, $groupdetails);
+ }
+
+ if(validateFieldDefinition($groupdetails))
+ {
+ // Prefetch form fields
+ foreach($groupdetails['fields'] as $fieldname => $fielddetails)
+ {
+ $groupdetails['fields'][$fieldname] = array_merge_prefix($fielddetails, $fielddetails['type'], prefetchFormFieldData($fieldname, $fielddetails));
+ $form['groups'][$groupname]['fields'][$fieldname] = $groupdetails['fields'][$fieldname];
+ }
+
+ // Collect form field output
+ foreach($groupdetails['fields'] as $fieldname => $fielddetails)
+ {
+ $fields .= getFormFieldOutput($fieldname, $fielddetails);
+ }
+ }
+ }
+ }
+ }
+
+ return $fields;
+}
diff --git a/lib/functions/formfields/function.getFormFieldData.php b/lib/functions/formfields/function.getFormFieldData.php
index 919f07a0..b2475c88 100644
--- a/lib/functions/formfields/function.getFormFieldData.php
+++ b/lib/functions/formfields/function.getFormFieldData.php
@@ -17,7 +17,7 @@
* @version $Id$
*/
-function getFormFieldData($fieldname, $fielddata, $input)
+function getFormFieldData($fieldname, $fielddata, &$input)
{
if(is_array($fielddata) && isset($fielddata['type']) && $fielddata['type'] != '' && function_exists('getFormFieldData' . ucfirst($fielddata['type'])))
{
diff --git a/lib/functions/formfields/function.getFormGroupOutput.php b/lib/functions/formfields/function.getFormGroupOutput.php
index c3efc573..782784ad 100644
--- a/lib/functions/formfields/function.getFormGroupOutput.php
+++ b/lib/functions/formfields/function.getFormGroupOutput.php
@@ -23,3 +23,54 @@ function getFormGroupOutput($groupname, $groupdetails)
eval("\$group = \"" . getTemplate("settings/settings_group") . "\";");
return $group;
}
+
+function getFormOverviewGroupOutput($groupname, $groupdetails)
+{
+ global $lng, $settings, $filename, $s;
+
+ $group = '';
+ $title = $groupdetails['title'];
+ $part = $groupname;
+
+ $activated = true;
+ $option = '';
+ if(isset($groupdetails['fields']))
+ {
+ foreach($groupdetails['fields'] as $fieldname => $fielddetails)
+ {
+ if(isset($fielddetails['overview_option'])
+ && $fielddetails['overview_option'] == true
+ ) {
+ if($fielddetails['type'] != 'option'
+ && $fielddetails['type'] != 'bool')
+ {
+ standard_error('overviewsettingoptionisnotavalidfield');
+ }
+
+ if($fielddetails['type'] == 'option')
+ {
+ $options_array = $fielddetails['option_options'];
+ $options = '';
+ foreach($options_array as $value => $vtitle)
+ {
+ $options .= makeoption($vtitle, $value, $settings[$fielddetails['settinggroup']][$fielddetails['varname']]);
+ }
+ $option.= $fielddetails['label'].': ';
+ $option.= '';
+ $activated = true;
+ }
+ else
+ {
+ $option.= $lng['admin']['activated'].': ';
+ $option.= makeyesno($fieldname, '1', '0', $settings[$fielddetails['settinggroup']][$fielddetails['varname']]);
+ $activated = (int)$settings[$fielddetails['settinggroup']][$fielddetails['varname']];
+ }
+ }
+ }
+ }
+
+ eval("\$group = \"" . getTemplate("settings/settings_overviewgroup") . "\";");
+ return $group;
+}
diff --git a/lib/functions/formfields/function.processForm.php b/lib/functions/formfields/function.processForm.php
index d28cd5f5..ae4cbed0 100644
--- a/lib/functions/formfields/function.processForm.php
+++ b/lib/functions/formfields/function.processForm.php
@@ -17,7 +17,7 @@
* @version $Id$
*/
-function processForm($form, $input, $url_params = array())
+function processForm(&$form, &$input, $url_params = array())
{
if(validateFormDefinition($form))
{
@@ -45,7 +45,7 @@ function processForm($form, $input, $url_params = array())
// Validate fields
foreach($groupdetails['fields'] as $fieldname => $fielddetails)
{
- $newfieldvalue = getFormFieldData($fieldname, $fielddetails, &$input);
+ $newfieldvalue = getFormFieldData($fieldname, $fielddetails, $input);
if($newfieldvalue != $fielddetails['value'])
{
@@ -143,3 +143,166 @@ function processForm($form, $input, $url_params = array())
return saveForm($form, $saved_fields);
}
}
+
+function processFormEx(&$form, &$input, $url_params = array(), $part, $settings_all, $settings_part, $only_enabledisable)
+{
+ if(validateFormDefinition($form))
+ {
+ $submitted_fields = array();
+ $changed_fields = array();
+ $saved_fields = array();
+
+ foreach($form['groups'] as $groupname => $groupdetails)
+ {
+ if(($settings_part && $part == $groupname)
+ || $settings_all
+ || $only_enabledisable
+ ){
+ if(validateFieldDefinition($groupdetails))
+ {
+ // Prefetch form fields
+ foreach($groupdetails['fields'] as $fieldname => $fielddetails)
+ {
+ if(!$only_enabledisable
+ || ($only_enabledisable && isset($fielddetails['overview_option']))
+ ) {
+ $groupdetails['fields'][$fieldname] = array_merge_prefix($fielddetails, $fielddetails['type'], prefetchFormFieldData($fieldname, $fielddetails));
+ $form['groups'][$groupname]['fields'][$fieldname] = $groupdetails['fields'][$fieldname];
+ }
+ }
+ }
+ }
+ }
+
+ foreach($form['groups'] as $groupname => $groupdetails)
+ {
+ if(($settings_part && $part == $groupname)
+ || $settings_all
+ || $only_enabledisable
+ ){
+ if(validateFieldDefinition($groupdetails))
+ {
+ // Validate fields
+ foreach($groupdetails['fields'] as $fieldname => $fielddetails)
+ {
+ if(!$only_enabledisable
+ || ($only_enabledisable && isset($fielddetails['overview_option']))
+ ) {
+ $newfieldvalue = getFormFieldData($fieldname, $fielddetails, $input);
+
+ if($newfieldvalue != $fielddetails['value'])
+ {
+ if(($error = validateFormField($fieldname, $fielddetails, $newfieldvalue)) !== true)
+ {
+ standard_error($error, $fieldname);
+ }
+ else
+ {
+ $changed_fields[$fieldname] = $newfieldvalue;
+ }
+ }
+
+ $submitted_fields[$fieldname] = $newfieldvalue;
+ }
+ }
+ }
+ }
+ }
+
+ foreach($form['groups'] as $groupname => $groupdetails)
+ {
+ if(($settings_part && $part == $groupname)
+ || $settings_all
+ || $only_enabledisable
+ ){
+ if(validateFieldDefinition($groupdetails))
+ {
+ // Check fields for plausibility
+ foreach($groupdetails['fields'] as $fieldname => $fielddetails)
+ {
+ if(!$only_enabledisable
+ || ($only_enabledisable && isset($fielddetails['overview_option']))
+ ) {
+ if(($plausibility_check = checkPlausibilityFormField($fieldname, $fielddetails, $submitted_fields[$fieldname], $submitted_fields)) !== false)
+ {
+ if(is_array($plausibility_check) && isset($plausibility_check[0]))
+ {
+ if($plausibility_check[0] == FORMFIELDS_PLAUSIBILITY_CHECK_OK)
+ {
+ // Nothing to do here, everything's okay
+ }
+ elseif($plausibility_check[0] == FORMFIELDS_PLAUSIBILITY_CHECK_ERROR)
+ {
+ unset($plausibility_check[0]);
+ $error = $plausibility_check[1];
+ unset($plausibility_check[1]);
+ $targetname = implode(' ', $plausibility_check);
+ standard_error($error, $targetname);
+ }
+ elseif($plausibility_check[0] == FORMFIELDS_PLAUSIBILITY_CHECK_QUESTION)
+ {
+ unset($plausibility_check[0]);
+ $question = $plausibility_check[1];
+ unset($plausibility_check[1]);
+ $targetname = implode(' ', $plausibility_check);
+ if(!isset($input[$question]))
+ {
+ if(is_array($url_params) && isset($url_params['filename']))
+ {
+ $filename = $url_params['filename'];
+ unset($url_params['filename']);
+ }
+ else
+ {
+ $filename = '';
+ }
+ ask_yesno($question, $filename, array_merge($url_params, $submitted_fields, array($question => $question)), $targetname);
+ }
+ }
+ else
+ {
+ standard_error('plausibilitychecknotunderstood');
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ foreach($form['groups'] as $groupname => $groupdetails)
+ {
+ if(($settings_part && $part == $groupname)
+ || $settings_all
+ || $only_enabledisable
+ ){
+ if(validateFieldDefinition($groupdetails))
+ {
+ // Save fields
+ foreach($groupdetails['fields'] as $fieldname => $fielddetails)
+ {
+ if(!$only_enabledisable
+ || ($only_enabledisable && isset($fielddetails['overview_option']))
+ ) {
+ if(isset($changed_fields[$fieldname]))
+ {
+ if(($saved_field = saveFormField($fieldname, $fielddetails, manipulateFormFieldData($fieldname, $fielddetails, $changed_fields[$fieldname]))) !== false)
+ {
+ $saved_fields = array_merge($saved_fields, $saved_field);
+ }
+ else
+ {
+ standard_error('errorwhensaving', $fieldname);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Save form
+ return saveForm($form, $saved_fields);
+ }
+}
diff --git a/lib/functions/settings/function.loadSettings.php b/lib/functions/settings/function.loadSettings.php
index b3276681..d3c4db96 100644
--- a/lib/functions/settings/function.loadSettings.php
+++ b/lib/functions/settings/function.loadSettings.php
@@ -17,7 +17,7 @@
* @version $Id$
*/
-function loadSettings($settings_data, $db)
+function loadSettings(&$settings_data, $db)
{
$settings = array();
diff --git a/lib/init.php b/lib/init.php
index 63afb0c7..5ec5e017 100644
--- a/lib/init.php
+++ b/lib/init.php
@@ -150,7 +150,7 @@ if(get_magic_quotes_gpc())
*/
$settings_data = loadConfigArrayDir('./actions/admin/settings/');
-$settings = loadSettings(&$settings_data, &$db);
+$settings = loadSettings($settings_data, $db);
/*
* when upgrading from syscp, the header-graphic gets lost
diff --git a/lng/english.lng.php b/lng/english.lng.php
index adc90a78..5815e7ea 100644
--- a/lng/english.lng.php
+++ b/lng/english.lng.php
@@ -752,7 +752,7 @@ $lng['serversettings']['logger']['severity'] = 'Logging level';
$lng['admin']['logger']['normal'] = 'normal';
$lng['admin']['logger']['paranoid'] = 'paranoid';
$lng['serversettings']['logger']['types']['title'] = 'Log-type(s)';
-$lng['serversettings']['logger']['types']['description'] = 'Specify logtypes seperated by comma.
Available logtypes are: syslog, file, mysql';
+$lng['serversettings']['logger']['types']['description'] = 'Specify logtypes. To select multiple types, hold down CTRL while selecting.
Available logtypes are: syslog, file, mysql';
$lng['serversettings']['logger']['logfile'] = 'Logfile path including filename';
$lng['error']['logerror'] = 'Log-Error: %s';
$lng['serversettings']['logger']['logcron'] = 'Log cronjobs (one run)';
@@ -1356,5 +1356,7 @@ $lng['customer']['mysql_add']['infomail_body']['main'] = "Hello {CUST_NAME},\n\n
$lng['error']['domains_cantdeletedomainwithapsinstances'] = 'You cannot delete a domain which is used by an installed APS package. You have to uninstall it first.';
$lng['serversettings']['awstats_path'] = 'Path to AWStats \'awstats_buildstaticpages.pl\'';
$lng['serversettings']['awstats_conf'] = 'AWStats configuration path';
+$lng['error']['overviewsettingoptionisnotavalidfield'] = 'Woops, a field that should be displayed as an option in the settings-overview is not an excepted type. You can blame the developers for this. This should not happen!';
+$lng['admin']['configfiles']['compactoverview'] = 'Compact-overview';
?>
diff --git a/lng/german.lng.php b/lng/german.lng.php
index 42d1a0fb..06a671a1 100644
--- a/lng/german.lng.php
+++ b/lng/german.lng.php
@@ -756,7 +756,7 @@ $lng['serversettings']['logger']['severity'] = 'Logging Level';
$lng['admin']['logger']['normal'] = 'Normal';
$lng['admin']['logger']['paranoid'] = 'Paranoid';
$lng['serversettings']['logger']['types']['title'] = 'Log-Art(en)';
-$lng['serversettings']['logger']['types']['description'] = 'Tragen Sie hier die gewünschten Logtypen kommagetrennt ein.
Mögliche Logtypen sind: syslog, file, mysql';
+$lng['serversettings']['logger']['types']['description'] = 'Wählen Sie hier die gewünschten Logtypen. Für Mehrfachauswahl, halten Sie wäghrend der Auswahl STRG gedrückt
Mögliche Logtypen sind: syslog, file, mysql';
$lng['serversettings']['logger']['logfile'] = 'Log-Datei Pfad inklusive Dateinamen';
$lng['error']['logerror'] = 'Log-Fehler: %s';
$lng['serversettings']['logger']['logcron'] = 'Log Cronjobs (einen Durchgang)';
@@ -1336,6 +1336,7 @@ $lng['customer']['mysql_add']['infomail_body']['main'] = "Hallo {CUST_NAME},\n\n
$lng['error']['domains_cantdeletedomainwithapsinstances'] = 'Sie können keine Domain löschen, die noch von APS Paketen verwendet wird. Löschen Sie zuerst alle installierten APS Pakete dieser Domain.';
$lng['serversettings']['awstats_path'] = 'Pfad zu AWStats \'awstats_buildstaticpages.pl\'';
$lng['serversettings']['awstats_conf'] = 'AWStats Konfigurations-Pfad';
+$lng['admin']['configfiles']['compactoverview'] = 'Kompakt-Übersicht';
$lng['mysql']['mysql_server'] = 'MySQL-Server';
$lng['admin']['ipsandports']['webserverdefaultconfig'] = 'Webserver Standard Konfiguration';
diff --git a/templates/admin/settings/settings.tpl b/templates/admin/settings/settings.tpl
index 301489d4..cfcdcdf2 100644
--- a/templates/admin/settings/settings.tpl
+++ b/templates/admin/settings/settings.tpl
@@ -1,12 +1,7 @@
-$header
-
+ {$lng['admin']['configfiles']['serverconfiguration']}
+ [{$lng['admin']['configfiles']['overview']}]
+ |
+ ||
| + + | +
{$title}
+