Skip to content

Commit de4d788

Browse files
author
Marius Burkard
committed
- fixed handling of servers in limits when using additional templates
1 parent ce7c097 commit de4d788

File tree

2 files changed

+52
-39
lines changed

2 files changed

+52
-39
lines changed

interface/lib/classes/client_templates.inc.php

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,14 @@ function apply_client_templates($clientId) {
151151
elseif($is_reseller == false && $v != 0) continue;
152152
}
153153

154+
// we need to do this, as e. g. a single server id in web_servers etc. would not be matching "is_string" below
155+
if(in_array($k, array('mail_servers', 'web_servers', 'dns_servers', 'db_servers'), true)) $v = strval($v);
156+
154157
/* we can remove this condition, but it is easier to debug with it (don't add ids and other non-limit values) */
155-
if (strpos($k, 'limit') !== false or strpos($k, 'default') !== false or $k == 'ssh_chroot' or $k == 'web_php_options' or $k == 'force_suexec'){
158+
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'){
156159
$app->log('Template processing key ' . $k . ' for client ' . $clientId, LOGLEVEL_DEBUG);
157160
/* process the numerical limits */
158-
if (is_numeric($v)){
161+
if (is_numeric($v) && in_array($k, array('mail_servers', 'web_servers', 'dns_servers', 'db_servers'), true) == false){
159162
/* switch for special cases */
160163
switch ($k){
161164
case 'limit_cron_frequency':
@@ -210,17 +213,25 @@ function apply_client_templates($clientId) {
210213
if (!isset($limits[$k])){
211214
$limits[$k] = array();
212215
}
213-
216+
214217
$limits_values = $limits[$k];
215218
if (is_string($limits[$k])){
216-
$limits_values = explode($form["tabs"]["limits"]["fields"][$k]["separator"], $limits[$k]);
219+
if($limits[$k] != '') {
220+
$limits_values = explode($form["tabs"]["limits"]["fields"][$k]["separator"], $limits[$k]);
221+
} else {
222+
$limits_values = array();
223+
}
217224
}
218225
$additional_values = explode($form["tabs"]["limits"]["fields"][$k]["separator"], $v);
219226
$app->log('Template processing key ' . $k . ' type CHECKBOXARRAY, lim / add: ' . implode(',', $limits_values) . ' / ' . implode(',', $additional_values) . ' for client ' . $clientId, LOGLEVEL_DEBUG);
220227
/* unification of limits_values (master template) and additional_values (additional template) */
221-
$limits_unified = array();
222-
foreach($form["tabs"]["limits"]["fields"][$k]["value"] as $key => $val){
223-
if (in_array($key, $limits_values) || in_array($key, $additional_values)) $limits_unified[] = $key;
228+
if(in_array($k, array('mail_servers', 'web_servers', 'dns_servers', 'db_servers'), true)) {
229+
$limits_unified = array_unique(array_merge($limits_values, $additional_values));
230+
} else {
231+
$limits_unified = array();
232+
foreach($form["tabs"]["limits"]["fields"][$k]["value"] as $key => $val){
233+
if (in_array($key, $limits_values) || in_array($key, $additional_values)) $limits_unified[] = $key;
234+
}
224235
}
225236
$limits[$k] = implode($form["tabs"]["limits"]["fields"][$k]["separator"], $limits_unified);
226237
break;
@@ -250,7 +261,7 @@ function apply_client_templates($clientId) {
250261
}
251262
}
252263
}
253-
264+
254265
/*
255266
* Write all back to the database
256267
*/

interface/lib/classes/validate_client.inc.php

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -103,38 +103,40 @@ function check_used_servers($field_name, $field_value, $validator)
103103
if (is_array($field_value))
104104
{
105105
$client_id = intval($_POST['id']);
106-
$used_servers = null;
107-
108-
switch ($field_name)
109-
{
110-
case 'web_servers':
111-
$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);
112-
break;
113-
114-
case 'dns_servers':
115-
$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);
116-
break;
117-
118-
case 'db_servers':
119-
$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);
120-
break;
121-
122-
case 'mail_servers':
123-
$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);
124-
break;
125-
126-
case 'xmpp_servers':
127-
$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);
128-
break;
129-
}
106+
if($client_id > 0) {
107+
$used_servers = null;
108+
109+
switch ($field_name)
110+
{
111+
case 'web_servers':
112+
$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);
113+
break;
114+
115+
case 'dns_servers':
116+
$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);
117+
break;
118+
119+
case 'db_servers':
120+
$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);
121+
break;
122+
123+
case 'mail_servers':
124+
$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);
125+
break;
126+
127+
case 'xmpp_servers':
128+
$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);
129+
break;
130+
}
130131

131-
if ($used_servers === null || count($used_servers))
132-
{
133-
$errmsg = $validator['errmsg'];
134-
if(isset($app->tform->wordbook[$errmsg])) {
135-
return $app->tform->wordbook[$errmsg]."<br>\r\n";
136-
} else {
137-
return $errmsg."<br>\r\n";
132+
if ($used_servers === null || count($used_servers))
133+
{
134+
$errmsg = $validator['errmsg'];
135+
if(isset($app->tform->wordbook[$errmsg])) {
136+
return $app->tform->wordbook[$errmsg]."<br>\r\n";
137+
} else {
138+
return $errmsg."<br>\r\n";
139+
}
138140
}
139141
}
140142
}

0 commit comments

Comments
 (0)