diff --git a/admin_clients.php b/admin_clients.php index fb14c6f9..e1b78f03 100644 --- a/admin_clients.php +++ b/admin_clients.php @@ -120,6 +120,12 @@ if((int)$settings['multiserver']['enabled'] == 1) $new_client->Set('desc', $desc, true, false); $new_client->Set('enabled', $client_enabled, true, true); $cid = $new_client->Insert(); + + /** + * @TODO create a set of default settings, + * which depends on the client-type + * (implementation will follow) + */ $log->logAction(ADM_ACTION, LOG_WARNING, "added froxlor-client '" . $name . "' (#" . $cid . ")"); redirectTo($filename, Array('page' => $page, 's' => $s)); @@ -200,6 +206,48 @@ if((int)$settings['multiserver']['enabled'] == 1) if(isset($_POST['send']) && $_POST['send'] == 'send') { + $_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, + $id + ) + ) { + standard_success('settingssaved', '', array('filename' => $filename, 'action' => $action, 'page' => $page)); + } } else { @@ -211,8 +259,8 @@ if((int)$settings['multiserver']['enabled'] == 1) } /** - * @TODO this has to get the client-id so the - * links "configuration" have the ID + * pass the client-id so the links "configuration" + * gets page=clients, action=settings and id={$id} */ $fields = buildFormEx($settings_data, $_part, $id); diff --git a/lib/functions/database/function.correctMysqlUsers.php b/lib/functions/database/function.correctMysqlUsers.php index 3e3b05bc..2922c283 100644 --- a/lib/functions/database/function.correctMysqlUsers.php +++ b/lib/functions/database/function.correctMysqlUsers.php @@ -17,8 +17,18 @@ * @version $Id$ */ -function correctMysqlUsers($mysql_access_host_array) +function correctMysqlUsers($mysql_access_host_array, $server_id = 0) { + /** + * for multiserver-clients + * this has to be done in + * a different way + */ + if($server_id > 0) { + correctMysqlUsersRemote($mysql_access_host_array, $server_id); + return; + } + global $db, $settings, $sql, $sql_root; foreach($sql_root as $mysql_server => $mysql_server_details) @@ -89,3 +99,17 @@ function correctMysqlUsers($mysql_access_host_array) unset($db_root); } } + +/** + * @TODO finish me + * @param array $mysql_access_host_array list of ips/hostnames of the mysql-server + * @param int $server_id id of the multiserver-client + * + * @return null + */ +function correctMysqlUsersRemote($mysql_access_host_array, $server_id = 0) +{ + /* if($server_id == 0) */ + return; + +} diff --git a/lib/functions/formfields/function.processForm.php b/lib/functions/formfields/function.processForm.php index ae4cbed0..5a392330 100644 --- a/lib/functions/formfields/function.processForm.php +++ b/lib/functions/formfields/function.processForm.php @@ -144,7 +144,7 @@ function processForm(&$form, &$input, $url_params = array()) } } -function processFormEx(&$form, &$input, $url_params = array(), $part, $settings_all, $settings_part, $only_enabledisable) +function processFormEx(&$form, &$input, $url_params = array(), $part, $settings_all, $settings_part, $only_enabledisable, $server_id = 0) { if(validateFormDefinition($form)) { @@ -287,7 +287,7 @@ function processFormEx(&$form, &$input, $url_params = array(), $part, $settings_ ) { if(isset($changed_fields[$fieldname])) { - if(($saved_field = saveFormField($fieldname, $fielddetails, manipulateFormFieldData($fieldname, $fielddetails, $changed_fields[$fieldname]))) !== false) + if(($saved_field = saveFormField($fieldname, $fielddetails, manipulateFormFieldData($fieldname, $fielddetails, $changed_fields[$fieldname]), $server_id)) !== false) { $saved_fields = array_merge($saved_fields, $saved_field); } diff --git a/lib/functions/formfields/function.saveFormField.php b/lib/functions/formfields/function.saveFormField.php index 79886b0b..470645aa 100644 --- a/lib/functions/formfields/function.saveFormField.php +++ b/lib/functions/formfields/function.saveFormField.php @@ -17,12 +17,12 @@ * @version $Id$ */ -function saveFormField($fieldname, $fielddata, $newfieldvalue) +function saveFormField($fieldname, $fielddata, $newfieldvalue, $server_id = 0) { $returnvalue = ''; if(is_array($fielddata) && isset($fielddata['save_method']) && $fielddata['save_method'] != '' && function_exists($fielddata['save_method'])) { - $returnvalue = call_user_func($fielddata['save_method'], $fieldname, $fielddata, $newfieldvalue); + $returnvalue = call_user_func($fielddata['save_method'], $fieldname, $fielddata, $newfieldvalue, $server_id); } elseif(is_array($fielddata) && !isset($fielddata['save_method'])) { diff --git a/lib/functions/settings/function.saveSetting.php b/lib/functions/settings/function.saveSetting.php index 1d442c87..b5602db3 100644 --- a/lib/functions/settings/function.saveSetting.php +++ b/lib/functions/settings/function.saveSetting.php @@ -17,7 +17,7 @@ * @version $Id$ */ -function saveSetting($settinggroup, $varname, $newvalue) +function saveSetting($settinggroup, $varname, $newvalue, $server_id = 0) { global $db; @@ -28,13 +28,9 @@ function saveSetting($settinggroup, $varname, $newvalue) WHERE `settinggroup` = \'' . $db->escape($settinggroup) . '\' AND - `varname`=\'' . $db->escape($varname) . '\' '; - /* - * - * @TODO for multiserver - * + `varname`=\'' . $db->escape($varname) . '\' AND `sid`=\''. (int)$server_id . '\' '; - */ + return $db->query($query); } diff --git a/lib/functions/settings/function.storeSettingField.php b/lib/functions/settings/function.storeSettingField.php index fdb7e5ce..71114ab2 100644 --- a/lib/functions/settings/function.storeSettingField.php +++ b/lib/functions/settings/function.storeSettingField.php @@ -17,11 +17,11 @@ * @version $Id$ */ -function storeSettingField($fieldname, $fielddata, $newfieldvalue) +function storeSettingField($fieldname, $fielddata, $newfieldvalue, $server_id = 0) { if(is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] != '' && isset($fielddata['varname']) && $fielddata['varname'] != '') { - if(saveSetting($fielddata['settinggroup'], $fielddata['varname'], $newfieldvalue) != false) + if(saveSetting($fielddata['settinggroup'], $fielddata['varname'], $newfieldvalue, $server_id) != false) { /* * when fielddata[cronmodule] is set, this means enable/disable a cronjob @@ -38,7 +38,7 @@ function storeSettingField($fieldname, $fielddata, $newfieldvalue) { if((int)$fielddata['dependency']['onlyif'] == (int)$newfieldvalue) { - storeSettingField($fielddata['dependency']['fieldname'], $fielddata['dependency']['fielddata'], $newfieldvalue); + storeSettingField($fielddata['dependency']['fieldname'], $fielddata['dependency']['fielddata'], $newfieldvalue, $server_id); } } diff --git a/lib/functions/settings/function.storeSettingHostname.php b/lib/functions/settings/function.storeSettingHostname.php index d338caf3..f35ea802 100644 --- a/lib/functions/settings/function.storeSettingHostname.php +++ b/lib/functions/settings/function.storeSettingHostname.php @@ -17,16 +17,16 @@ * @version $Id$ */ -function storeSettingHostname($fieldname, $fielddata, $newfieldvalue) +function storeSettingHostname($fieldname, $fielddata, $newfieldvalue, $server_id = 0) { - $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue); + $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue, $server_id ); if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'hostname') { global $db, $idna_convert; $newfieldvalue = $idna_convert->encode($newfieldvalue); - $customerstddomains_result = $db->query('SELECT `standardsubdomain` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `standardsubdomain` <> \'0\''); + $customerstddomains_result = $db->query('SELECT `standardsubdomain` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `standardsubdomain` <> \'0\' and `sid` = "'.$server_id.'"'); $ids = array(); while($customerstddomains_row = $db->fetch_array($customerstddomains_result)) @@ -36,8 +36,15 @@ function storeSettingHostname($fieldname, $fielddata, $newfieldvalue) if(count($ids) > 0) { - $db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `domain` = REPLACE(`domain`, \'' . $db->escape(getSetting('system', 'hostname')) . '\', \'' . $db->escape($newfieldvalue) . '\') WHERE `id` IN (\'' . implode('\',\'', $ids) . '\')'); - inserttask('1'); + if($server_id > 0) + { + $client = froxlorclient::getInstance(null, $db, $server_id); + $syshostname = $client->getSetting('system', 'hostname'); + } else { + $syshostname = getSetting('system', 'hostname'); + } + $db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `domain` = REPLACE(`domain`, \'' . $db->escape($syshostname) . '\', \'' . $db->escape($newfieldvalue) . '\') WHERE `id` IN (\'' . implode('\',\'', $ids) . '\') AND `sid` = "'.$server_id.'"'); + inserttask('1', $server_id); } } diff --git a/lib/functions/settings/function.storeSettingIpAddress.php b/lib/functions/settings/function.storeSettingIpAddress.php index 5bec530e..90e977e3 100644 --- a/lib/functions/settings/function.storeSettingIpAddress.php +++ b/lib/functions/settings/function.storeSettingIpAddress.php @@ -17,13 +17,20 @@ * @version $Id$ */ -function storeSettingIpAddress($fieldname, $fielddata, $newfieldvalue) +function storeSettingIpAddress($fieldname, $fielddata, $newfieldvalue, $server_id = 0) { - $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue); + $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue, $server_id); if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'ipaddress') { - $mysql_access_host_array = array_map('trim', explode(',', getSetting('system', 'mysql_access_host'))); + if($server_id > 0) + { + $client = froxlorclient::getInstance(null, $db, $server_id); + $mysqlhosts = $client->getSetting('system', 'mysql_access_host'); + } else { + $mysqlhosts = getSetting('system', 'mysql_access_host'); + } + $mysql_access_host_array = array_map('trim', explode(',', $mysqlhosts)); $mysql_access_host_array[] = $newfieldvalue; $mysql_access_host_array = array_unique(array_trim($mysql_access_host_array)); $mysql_access_host = implode(',', $mysql_access_host_array); diff --git a/lib/functions/settings/function.storeSettingMysqlAccessHost.php b/lib/functions/settings/function.storeSettingMysqlAccessHost.php index b7749b6e..236c972e 100644 --- a/lib/functions/settings/function.storeSettingMysqlAccessHost.php +++ b/lib/functions/settings/function.storeSettingMysqlAccessHost.php @@ -17,9 +17,9 @@ * @version $Id$ */ -function storeSettingMysqlAccessHost($fieldname, $fielddata, $newfieldvalue) +function storeSettingMysqlAccessHost($fieldname, $fielddata, $newfieldvalue, $server_id = 0) { - $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue); + $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue, $server_id); if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'mysql_access_host') { @@ -39,7 +39,7 @@ function storeSettingMysqlAccessHost($fieldname, $fielddata, $newfieldvalue) $mysql_access_host_array = array_unique(array_trim($mysql_access_host_array)); $newfieldvalue = implode(',', $mysql_access_host_array); - correctMysqlUsers($mysql_access_host_array); + correctMysqlUsers($mysql_access_host_array, $server_id); } return $returnvalue;