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 -
- - - - - + $fields @@ -15,7 +10,3 @@ $header
 {$lng['admin']['serversettings']} {$lng['admin']['serversettings']} + [{$lng['admin']['configfiles']['compactoverview']}]
-
-
-
-$footer \ No newline at end of file diff --git a/templates/admin/settings/settings_form_begin.tpl b/templates/admin/settings/settings_form_begin.tpl new file mode 100644 index 00000000..3aea38a6 --- /dev/null +++ b/templates/admin/settings/settings_form_begin.tpl @@ -0,0 +1,6 @@ +$header +
+ + + + diff --git a/templates/admin/settings/settings_form_end.tpl b/templates/admin/settings/settings_form_end.tpl new file mode 100644 index 00000000..a9a6eab1 --- /dev/null +++ b/templates/admin/settings/settings_form_end.tpl @@ -0,0 +1,7 @@ + + + +
+
+
+$footer diff --git a/templates/admin/settings/settings_overview.tpl b/templates/admin/settings/settings_overview.tpl new file mode 100644 index 00000000..9f9bc4ba --- /dev/null +++ b/templates/admin/settings/settings_overview.tpl @@ -0,0 +1,14 @@ + + + + + $fields + + + +
+  {$lng['admin']['configfiles']['serverconfiguration']} + [{$lng['admin']['configfiles']['overview']}] +
+   +
diff --git a/templates/admin/settings/settings_overviewgroup.tpl b/templates/admin/settings/settings_overviewgroup.tpl new file mode 100644 index 00000000..801a7b1f --- /dev/null +++ b/templates/admin/settings/settings_overviewgroup.tpl @@ -0,0 +1,11 @@ + + +  {$title} + + {$option} + + + {$lng['admin']['configfiles']['serverconfiguration']} + + +