diff --git a/interface/lib/classes/client_templates.inc.php b/interface/lib/classes/client_templates.inc.php index ccf25f4d195097f578f5d127c3e6eebf300364b2..61aa57eaa9997c57f2164729e01ead2cc79ece2c 100644 --- a/interface/lib/classes/client_templates.inc.php +++ b/interface/lib/classes/client_templates.inc.php @@ -151,11 +151,14 @@ class client_templates { elseif($is_reseller == false && $v != 0) continue; } + // we need to do this, as e. g. a single server id in web_servers etc. would not be matching "is_string" below + if(in_array($k, array('mail_servers', 'web_servers', 'dns_servers', 'db_servers'), true)) $v = strval($v); + /* we can remove this condition, but it is easier to debug with it (don't add ids and other non-limit values) */ - if (strpos($k, 'limit') !== false or strpos($k, 'default') !== false or $k == 'ssh_chroot' or $k == 'web_php_options' or $k == 'force_suexec'){ + if (strpos($k, 'limit') !== false or strpos($k, 'default') !== false or strpos($k, 'servers') !== false or $k == 'ssh_chroot' or $k == 'web_php_options' or $k == 'force_suexec'){ $app->log('Template processing key ' . $k . ' for client ' . $clientId, LOGLEVEL_DEBUG); /* process the numerical limits */ - if (is_numeric($v)){ + if (is_numeric($v) && in_array($k, array('mail_servers', 'web_servers', 'dns_servers', 'db_servers'), true) == false){ /* switch for special cases */ switch ($k){ case 'limit_cron_frequency': @@ -210,17 +213,25 @@ class client_templates { if (!isset($limits[$k])){ $limits[$k] = array(); } - + $limits_values = $limits[$k]; if (is_string($limits[$k])){ - $limits_values = explode($form["tabs"]["limits"]["fields"][$k]["separator"], $limits[$k]); + if($limits[$k] != '') { + $limits_values = explode($form["tabs"]["limits"]["fields"][$k]["separator"], $limits[$k]); + } else { + $limits_values = array(); + } } $additional_values = explode($form["tabs"]["limits"]["fields"][$k]["separator"], $v); $app->log('Template processing key ' . $k . ' type CHECKBOXARRAY, lim / add: ' . implode(',', $limits_values) . ' / ' . implode(',', $additional_values) . ' for client ' . $clientId, LOGLEVEL_DEBUG); /* unification of limits_values (master template) and additional_values (additional template) */ - $limits_unified = array(); - foreach($form["tabs"]["limits"]["fields"][$k]["value"] as $key => $val){ - if (in_array($key, $limits_values) || in_array($key, $additional_values)) $limits_unified[] = $key; + if(in_array($k, array('mail_servers', 'web_servers', 'dns_servers', 'db_servers'), true)) { + $limits_unified = array_unique(array_merge($limits_values, $additional_values)); + } else { + $limits_unified = array(); + foreach($form["tabs"]["limits"]["fields"][$k]["value"] as $key => $val){ + if (in_array($key, $limits_values) || in_array($key, $additional_values)) $limits_unified[] = $key; + } } $limits[$k] = implode($form["tabs"]["limits"]["fields"][$k]["separator"], $limits_unified); break; @@ -250,7 +261,7 @@ class client_templates { } } } - + /* * Write all back to the database */ diff --git a/interface/lib/classes/validate_client.inc.php b/interface/lib/classes/validate_client.inc.php index db55b04f187862eecd25593396597303f27c3aff..256b483c4f377a470b2175096024ebee1b26eeaf 100644 --- a/interface/lib/classes/validate_client.inc.php +++ b/interface/lib/classes/validate_client.inc.php @@ -103,38 +103,40 @@ class validate_client { if (is_array($field_value)) { $client_id = intval($_POST['id']); - $used_servers = null; - - switch ($field_name) - { - case 'web_servers': - $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM web_domain INNER JOIN sys_user ON web_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); - break; - - case 'dns_servers': - $used_servers = $app->db->queryAllRecords('SELECT id FROM dns_rr INNER JOIN sys_user ON dns_rr.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); - break; - - case 'db_servers': - $used_servers = $app->db->queryAllRecords('SELECT database_id FROM web_database INNER JOIN sys_user ON web_database.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); - break; - - case 'mail_servers': - $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM mail_domain INNER JOIN sys_user ON mail_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); - break; - - case 'xmpp_servers': - $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM xmpp_domain INNER JOIN sys_user ON xmpp_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); - break; - } + if($client_id > 0) { + $used_servers = null; + + switch ($field_name) + { + case 'web_servers': + $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM web_domain INNER JOIN sys_user ON web_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); + break; + + case 'dns_servers': + $used_servers = $app->db->queryAllRecords('SELECT id FROM dns_rr INNER JOIN sys_user ON dns_rr.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); + break; + + case 'db_servers': + $used_servers = $app->db->queryAllRecords('SELECT database_id FROM web_database INNER JOIN sys_user ON web_database.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); + break; + + case 'mail_servers': + $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM mail_domain INNER JOIN sys_user ON mail_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); + break; + + case 'xmpp_servers': + $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM xmpp_domain INNER JOIN sys_user ON xmpp_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value); + break; + } - if ($used_servers === null || count($used_servers)) - { - $errmsg = $validator['errmsg']; - if(isset($app->tform->wordbook[$errmsg])) { - return $app->tform->wordbook[$errmsg]."<br>\r\n"; - } else { - return $errmsg."<br>\r\n"; + if ($used_servers === null || count($used_servers)) + { + $errmsg = $validator['errmsg']; + if(isset($app->tform->wordbook[$errmsg])) { + return $app->tform->wordbook[$errmsg]."<br>\r\n"; + } else { + return $errmsg."<br>\r\n"; + } } } }