From c1cd0004bf6cef67ad8a21c010308a94e2dcdd74 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Sat, 22 Dec 2018 15:52:20 +0100 Subject: [PATCH] fix saving of settings Signed-off-by: Michael Kaufmann --- admin_settings.php | 1 + lib/Froxlor/Settings.php | 40 ++++++++++++++++++++++++++++++++++++++++ lib/Froxlor/UI/Data.php | 8 ++++---- lib/Froxlor/UI/Form.php | 12 +++++++----- 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/admin_settings.php b/admin_settings.php index 6bfa6d76..d9a55835 100644 --- a/admin_settings.php +++ b/admin_settings.php @@ -31,6 +31,7 @@ Database::needRoot(false); if ($page == 'overview' && $userinfo['change_serversettings'] == '1') { $settings_data = \Froxlor\PhpHelper::loadConfigArrayDir('./actions/admin/settings/'); + Settings::loadSettingsInto($settings_data); if (isset($_POST['send']) && $_POST['send'] == 'send') { diff --git a/lib/Froxlor/Settings.php b/lib/Froxlor/Settings.php index f7633335..2d8d0701 100644 --- a/lib/Froxlor/Settings.php +++ b/lib/Froxlor/Settings.php @@ -307,4 +307,44 @@ class Settings $result = call_user_func_array($callback, $args); return $result; } + + public static function loadSettingsInto(&$settings_data) + { + if (is_array($settings_data) && isset($settings_data['groups']) && is_array($settings_data['groups'])) { + + // prepare for use in for-loop + $row_stmt = Database::prepare(" + SELECT `settinggroup`, `varname`, `value` + FROM `" . TABLE_PANEL_SETTINGS . "` + WHERE `settinggroup` = :group AND `varname` = :varname + "); + + foreach ($settings_data['groups'] as $settings_part => $settings_part_details) { + + if (is_array($settings_part_details) && isset($settings_part_details['fields']) && is_array($settings_part_details['fields'])) { + + foreach ($settings_part_details['fields'] as $field_name => $field_details) { + + if (isset($field_details['settinggroup']) && isset($field_details['varname']) && isset($field_details['default'])) { + // execute prepared statement + $row = Database::pexecute_first($row_stmt, array( + 'group' => $field_details['settinggroup'], + 'varname' => $field_details['varname'] + )); + + if (! empty($row)) { + $varvalue = $row['value']; + } else { + $varvalue = $field_details['default']; + } + } else { + $varvalue = false; + } + + $settings_data['groups'][$settings_part]['fields'][$field_name]['value'] = $varvalue; + } + } + } + } + } } diff --git a/lib/Froxlor/UI/Data.php b/lib/Froxlor/UI/Data.php index 9f53de49..0a278857 100644 --- a/lib/Froxlor/UI/Data.php +++ b/lib/Froxlor/UI/Data.php @@ -4,7 +4,7 @@ namespace Froxlor\UI; class Data { - public static function getFormFieldDataText($fieldname, $fielddata, &$input) + public static function getFormFieldDataText($fieldname, $fielddata, $input) { if (isset($input[$fieldname])) { $newfieldvalue = str_replace("\r\n", "\n", $input[$fieldname]); @@ -15,7 +15,7 @@ class Data return $newfieldvalue; } - public static function getFormFieldDataOption($fieldname, $fielddata, &$input) + public static function getFormFieldDataOption($fieldname, $fielddata, $input) { if (isset($input[$fieldname])) { $newfieldvalue = $input[$fieldname]; @@ -30,7 +30,7 @@ class Data return $newfieldvalue; } - public static function getFormFieldDataInt($fieldname, $fielddata, &$input) + public static function getFormFieldDataInt($fieldname, $fielddata, $input) { if (isset($input[$fieldname])) { $newfieldvalue = (int) $input[$fieldname]; @@ -41,7 +41,7 @@ class Data return $newfieldvalue; } - public static function getFormFieldDataBool($fieldname, $fielddata, &$input) + public static function getFormFieldDataBool($fieldname, $fielddata, $input) { if (isset($input[$fieldname]) && ($input[$fieldname] === '1' || $input[$fieldname] === 1 || $input[$fieldname] === true || strtolower($input[$fieldname]) === 'yes' || strtolower($input[$fieldname]) === 'ja')) { $newfieldvalue = '1'; diff --git a/lib/Froxlor/UI/Form.php b/lib/Froxlor/UI/Form.php index c39fc6f7..98c5a2f1 100644 --- a/lib/Froxlor/UI/Form.php +++ b/lib/Froxlor/UI/Form.php @@ -19,7 +19,7 @@ class Form if (\Froxlor\Validate\Form::validateFieldDefinition($groupdetails)) { // Prefetch form fields foreach ($groupdetails['fields'] as $fieldname => $fielddetails) { - $groupdetails['fields'][$fieldname] = self::array_merge_prefix($fielddetails, $fielddetails['type'], prefetchFormFieldData($fieldname, $fielddetails)); + $groupdetails['fields'][$fieldname] = self::array_merge_prefix($fielddetails, $fielddetails['type'], self::prefetchFormFieldData($fieldname, $fielddetails)); $form['groups'][$groupname]['fields'][$fieldname] = $groupdetails['fields'][$fieldname]; } @@ -281,7 +281,7 @@ class Form foreach ($groupdetails['fields'] as $fieldname => $fielddetails) { if (! $only_enabledisable || ($only_enabledisable && isset($fielddetails['overview_option']))) { if (isset($changed_fields[$fieldname])) { - if (($saved_field = self::saveFormField($fieldname, $fielddetails, manipulateFormFieldData($fieldname, $fielddetails, $changed_fields[$fieldname]))) !== false) { + if (($saved_field = self::saveFormField($fieldname, $fielddetails, self::manipulateFormFieldData($fieldname, $fielddetails, $changed_fields[$fieldname]))) !== false) { $saved_fields = array_merge($saved_fields, $saved_field); } else { \Froxlor\UI\Response::standard_error('errorwhensaving', $fieldname); @@ -294,7 +294,7 @@ class Form } // Save form - return saveForm($form, $saved_fields); + return self::saveForm($form, $saved_fields); } } @@ -468,8 +468,10 @@ class Form public static function getFormFieldData($fieldname, $fielddata, &$input) { if (is_array($fielddata) && isset($fielddata['type']) && $fielddata['type'] != '' && method_exists('\\Froxlor\\UI\\Data', 'getFormFieldData' . ucfirst($fielddata['type']))) { - $gfdFunc = '\\Froxlor\\UI\\Data::getFormFieldData' . ucfirst($fielddata['type']); - $newfieldvalue = $gfdFunc($fieldname, $fielddata, $input); + $newfieldvalue = call_user_func(array( + '\\Froxlor\\UI\\Data', + 'getFormFieldData' . ucfirst($fielddata['type']) + ), $fieldname, $fielddata, $input); } else { if (isset($input[$fieldname])) { $newfieldvalue = $input[$fieldname];