correct handling of storeSettingHostname when system.stdsubdomain is changed; refs #633

Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann
2019-01-10 20:12:59 +01:00
parent b4597d54af
commit 7841eebf08
2 changed files with 43 additions and 19 deletions

View File

@@ -458,6 +458,10 @@ if ($page == 'overview') {
} }
} }
$alias_stmt = Database::prepare("SELECT COUNT(`id`) AS count FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `aliasdomain`= :aliasdomain");
$alias_check = Database::pexecute_first($alias_stmt, array("aliasdomain" => $result['id']));
$alias_check = $alias_check['count'];
$domainip = $result_ipandport['ip']; $domainip = $result_ipandport['ip'];
$result = \Froxlor\PhpHelper::htmlentitiesArray($result); $result = \Froxlor\PhpHelper::htmlentitiesArray($result);

View File

@@ -221,31 +221,51 @@ class Store
{ {
$returnvalue = self::storeSettingField($fieldname, $fielddata, $newfieldvalue); $returnvalue = self::storeSettingField($fieldname, $fielddata, $newfieldvalue);
if ($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'hostname') { if ($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && ($fielddata['varname'] == 'hostname' || $fielddata['varname'] == 'stdsubdomain')) {
$idna_convert = new \Froxlor\Idna\IdnaWrapper(); $idna_convert = new \Froxlor\Idna\IdnaWrapper();
$newfieldvalue = $idna_convert->encode($newfieldvalue); $newfieldvalue = $idna_convert->encode($newfieldvalue);
$customerstddomains_result_stmt = Database::prepare(" if (($fielddata['varname'] == 'hostname' && Settings::Get('system.stdsubdomain') == '') || $fielddata['varname'] == 'stdsubdomain')
SELECT `standardsubdomain` FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `standardsubdomain` <> '0' {
"); if ($fielddata['varname'] == 'stdsubdomain' && $newfieldvalue == '') {
Database::pexecute($customerstddomains_result_stmt); // clear field, reset stdsubdomain to system-hostname
$oldhost = Settings::Get('system.stdsubdomain');
$newhost = Settings::Get('system.hostname');
} elseif ($fielddata['varname'] == 'stdsubdomain' && Settings::Get('system.stdsubdomain') == '') {
// former std-subdomain was system-hostname
$oldhost = Settings::Get('system.hostname');
$newhost = Settings::Get('system.stdsubdomain');
} elseif ($fielddata['varname'] == 'stdsubdomain') {
// std-subdomain just changed
$oldhost = Settings::Get('system.stdsubdomain');
$newhost = $newfieldvalue;
} elseif ($fielddata['varname'] == 'hostname' && Settings::Get('system.stdsubdomain') == '') {
$oldhost = Settings::Get('system.hostname');
$newhost = $newfieldvalue;
}
$ids = array(); $customerstddomains_result_stmt = Database::prepare("
SELECT `standardsubdomain` FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `standardsubdomain` <> '0'
");
Database::pexecute($customerstddomains_result_stmt);
while ($customerstddomains_row = $customerstddomains_result_stmt->fetch(\PDO::FETCH_ASSOC)) { $ids = array();
$ids[] = (int) $customerstddomains_row['standardsubdomain'];
}
if (count($ids) > 0) { while ($customerstddomains_row = $customerstddomains_result_stmt->fetch(\PDO::FETCH_ASSOC)) {
$upd_stmt = Database::prepare(" $ids[] = (int) $customerstddomains_row['standardsubdomain'];
UPDATE `" . TABLE_PANEL_DOMAINS . "` SET }
`domain` = REPLACE(`domain`, :host, :newval)
WHERE `id` IN ('" . implode(', ', $ids) . "') if (count($ids) > 0) {
"); $upd_stmt = Database::prepare("
Database::pexecute($upd_stmt, array( UPDATE `" . TABLE_PANEL_DOMAINS . "` SET
'host' => Settings::Get('system.hostname'), `domain` = REPLACE(`domain`, :host, :newval)
'newval' => $newfieldvalue WHERE `id` IN ('" . implode(', ', $ids) . "')
)); ");
Database::pexecute($upd_stmt, array(
'host' => $oldhost,
'newval' => $newhost
));
}
} }
} }