web_domain_edit.php 36 KB
Newer Older
tbrehm's avatar
tbrehm committed
1
2
<?php
/*
3
Copyright (c) 2007 - 2009, Till Brehm, projektfarm Gmbh
tbrehm's avatar
tbrehm committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/


/******************************************
* Begin Form configuration
******************************************/

$tform_def_file = "form/web_domain.tform.php";

/******************************************
* End Form configuration
******************************************/

require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');

44
45
//* Check permissions for module
$app->auth->check_module_permissions('sites');
tbrehm's avatar
tbrehm committed
46
47

// Loading classes
48
$app->uses('tpl,tform,tform_actions,ini_parser,getconf');
tbrehm's avatar
tbrehm committed
49
50
51
52
$app->load('tform_actions');

class page_action extends tform_actions {

53
	//* Returna a "3/2/1" path hash from a numeric id '123'
54
55
56
57
58
59
60
61
62
63
64
65
	function id_hash($id,$levels) {
		$hash = "" . $id % 10 ;
		$id /= 10 ;
		$levels -- ;
		while ( $levels > 0 ) {
			$hash .= "/" . $id % 10 ;
			$id /= 10 ;
			$levels-- ;
		}
		return $hash;
	}
	
66
67
	function onShowNew() {
		global $app, $conf;
68

69
70
		// we will check only users, not admins
		if($_SESSION["s"]["user"]["typ"] == 'user') {
71
72
73
74
75
			if(!$app->tform->checkClientLimit('limit_web_domain',"type = 'vhost'")) {
				$app->error($app->tform->wordbook["limit_web_domain_txt"]);
			}
			if(!$app->tform->checkResellerLimit('limit_web_domain',"type = 'vhost'")) {
				$app->error('Reseller: '.$app->tform->wordbook["limit_web_domain_txt"]);
76
			}
77
78
79
80
81
			
			// Get the limits of the client
			$client_group_id = $_SESSION["s"]["user"]["default_group"];
			$client = $app->db->queryOneRecord("SELECT client.default_webserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
			$app->tpl->setVar("server_id_value", $client['default_webserver']);
82
		}
83

84
85
		parent::onShowNew();
	}
86

tbrehm's avatar
tbrehm committed
87
88
	function onShowEnd() {
		global $app, $conf;
89

90
		//* Client: If the logged in user is not admin and has no sub clients (no reseller)
91
		if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
92

tbrehm's avatar
tbrehm committed
93
94
			// Get the limits of the client
			$client_group_id = $_SESSION["s"]["user"]["default_group"];
95
			$client = $app->db->queryOneRecord("SELECT limit_web_domain, default_webserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
96

tbrehm's avatar
tbrehm committed
97
98
99
100
			// Set the webserver to the default server of the client
			$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = $client[default_webserver]");
			$app->tpl->setVar("server_id","<option value='$client[default_webserver]'>$tmp[server_name]</option>");
			unset($tmp);
101

tbrehm's avatar
tbrehm committed
102
103
			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ".$client['default_webserver']." AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
104
			$ips = $app->db->queryAllRecords($sql);
105
			$ip_select = "<option value='*'>*</option>";
106
107
108
109
110
111
112
			//$ip_select = "";
			if(is_array($ips)) {
				foreach( $ips as $ip) {
					$selected = ($ip["ip_address"] == $this->dataRecord["ip_address"])?'SELECTED':'';
					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
				}
			}
113
			$app->tpl->setVar("ip_address",$ip_select);
114
115
			unset($tmp);
			unset($ips);
tbrehm's avatar
tbrehm committed
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
			
			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ".$client['default_webserver']." AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
			$ips = $app->db->queryAllRecords($sql);
			$ip_select = "<option value=''></option>";
			//$ip_select = "";
			if(is_array($ips)) {
				foreach( $ips as $ip) {
					$selected = ($ip["ip_address"] == $this->dataRecord["ipv6_address"])?'SELECTED':'';
					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
				}
			}
			$app->tpl->setVar("ipv6_address",$ip_select);
			unset($tmp);
			unset($ips);
131
132
133
134
135
136
137
138
139
140
141
142
143
			
			//PHP Version Selection (FastCGI)
			$fastcgi = $app->getconf->get_server_config($client['default_webserver'],'fastcgi');
			$php_versions = explode('\n',$fastcgi['fastcgi_additional_php_versions']);
			$php_select = "<option value=''>Default</option>";
			if(is_array($php_versions)) {
				foreach( $php_versions as $php_version) {
					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
					$php_select .= "<option value='$php_version' $selected>$php_version</option>\r\n";
				}
			}
			$app->tpl->setVar("fastcgi_php_version",$php_select);
			unset($php_versions);
144

145
			//* Reseller: If the logged in user is not admin and has sub clients (is a reseller)
146
		} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
147

148
149
			// Get the limits of the client
			$client_group_id = $_SESSION["s"]["user"]["default_group"];
150
			$client = $app->db->queryOneRecord("SELECT client.client_id, limit_web_domain, default_webserver, client.contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
151

152
153
154
155
			// Set the webserver to the default server of the client
			$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = $client[default_webserver]");
			$app->tpl->setVar("server_id","<option value='$client[default_webserver]'>$tmp[server_name]</option>");
			unset($tmp);
156

157
			// Fill the client select field
158
			$sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id']." ORDER BY name";
159
			$records = $app->db->queryAllRecords($sql);
160
161
			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
			$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contact_name'].'</option>';
162
			//$tmp_data_record = $app->tform->getDataRecord($this->id);
163
164
			if(is_array($records)) {
				foreach( $records as $rec) {
165
					$selected = @(is_array($this->dataRecord) && ($rec["groupid"] == $this->dataRecord['client_group_id'] || $rec["groupid"] == $this->dataRecord['sys_groupid']))?'SELECTED':'';
166
					$client_select .= "<option value='$rec[groupid]' $selected>$rec[name]</option>\r\n";
167
168
169
				}
			}
			$app->tpl->setVar("client_group_id",$client_select);
170

tbrehm's avatar
tbrehm committed
171
172
			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ".$client['default_webserver']." AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
173
			$ips = $app->db->queryAllRecords($sql);
174
			$ip_select = "<option value='*'>*</option>";
175
176
177
178
179
180
181
			//$ip_select = "";
			if(is_array($ips)) {
				foreach( $ips as $ip) {
					$selected = ($ip["ip_address"] == $this->dataRecord["ip_address"])?'SELECTED':'';
					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
				}
			}
182
			$app->tpl->setVar("ip_address",$ip_select);
183
184
			unset($tmp);
			unset($ips);
tbrehm's avatar
tbrehm committed
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
			
			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ".$client['default_webserver']." AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
			$ips = $app->db->queryAllRecords($sql);
			$ip_select = "<option value=''></option>";
			//$ip_select = "";
			if(is_array($ips)) {
				foreach( $ips as $ip) {
					$selected = ($ip["ip_address"] == $this->dataRecord["ipv6_address"])?'SELECTED':'';
					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
				}
			}
			$app->tpl->setVar("ipv6_address",$ip_select);
			unset($tmp);
			unset($ips);
200
201
202
203
204
205
206
207
208
209
210
211
212
			
			//PHP Version Selection (FastCGI)
			$fastcgi = $app->getconf->get_server_config($client['default_webserver'],'fastcgi');
			$php_versions = explode('\n',$fastcgi['fastcgi_additional_php_versions']);
			$php_select = "<option value=''>Default</option>";
			if(is_array($php_versions)) {
				foreach( $php_versions as $php_version) {
					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
					$php_select .= "<option value='$php_version' $selected>$php_version</option>\r\n";
				}
			}
			$app->tpl->setVar("fastcgi_php_version",$php_select);
			unset($php_versions);
213
214

			//* Admin: If the logged in user is admin
tbrehm's avatar
tbrehm committed
215
		} else {
216

tbrehm's avatar
tbrehm committed
217
218
			// The user is admin, so we fill in all IP addresses of the server
			if($this->id > 0) {
219
				$server_id = @$this->dataRecord["server_id"];
tbrehm's avatar
tbrehm committed
220
221
222
223
224
			} else {
				// Get the first server ID
				$tmp = $app->db->queryOneRecord("SELECT server_id FROM server WHERE web_server = 1 ORDER BY server_name LIMIT 0,1");
				$server_id = $tmp['server_id'];
			}
tbrehm's avatar
tbrehm committed
225
226
227
		
			//* Fill the IPv4 select field
			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND server_id = $server_id";
tbrehm's avatar
tbrehm committed
228
229
230
231
232
233
234
235
236
237
238
239
			$ips = $app->db->queryAllRecords($sql);
			$ip_select = "<option value='*'>*</option>";
			//$ip_select = "";
			if(is_array($ips)) {
				foreach( $ips as $ip) {
					$selected = ($ip["ip_address"] == $this->dataRecord["ip_address"])?'SELECTED':'';
					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
				}
			}
			$app->tpl->setVar("ip_address",$ip_select);
			unset($tmp);
			unset($ips);
tbrehm's avatar
tbrehm committed
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
			
			//* Fill the IPv6 select field
			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND server_id = $server_id";
			$ips = $app->db->queryAllRecords($sql);
			$ip_select = "<option value=''></option>";
			//$ip_select = "";
			if(is_array($ips)) {
				foreach( $ips as $ip) {
					$selected = ($ip["ip_address"] == $this->dataRecord["ipv6_address"])?'SELECTED':'';
					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
				}
			}
			$app->tpl->setVar("ipv6_address",$ip_select);
			unset($tmp);
			unset($ips);
255
256
257
258
259
260
261
262
263
264
265
266
267
			
			//PHP Version Selection (FastCGI)
			$fastcgi = $app->getconf->get_server_config($server_id,'fastcgi');
			$php_versions = explode('\n',$fastcgi['fastcgi_additional_php_versions']);
			$php_select = "<option value=''>Default</option>";
			if(is_array($php_versions)) {
				foreach( $php_versions as $php_version) {
					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
					$php_select .= "<option value='$php_version' $selected>$php_version</option>\r\n";
				}
			}
			$app->tpl->setVar("fastcgi_php_version",$php_select);
			unset($php_versions);
268

tbrehm's avatar
tbrehm committed
269
			// Fill the client select field
270
			$sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0 ORDER BY name";
tbrehm's avatar
tbrehm committed
271
272
			$clients = $app->db->queryAllRecords($sql);
			$client_select = "<option value='0'></option>";
273
			//$tmp_data_record = $app->tform->getDataRecord($this->id);
tbrehm's avatar
tbrehm committed
274
275
			if(is_array($clients)) {
				foreach( $clients as $client) {
276
277
					//$selected = @($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
					$selected = @(is_array($this->dataRecord) && ($client["groupid"] == $this->dataRecord['client_group_id'] || $client["groupid"] == $this->dataRecord['sys_groupid']))?'SELECTED':'';
tbrehm's avatar
tbrehm committed
278
279
280
281
					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
				}
			}
			$app->tpl->setVar("client_group_id",$client_select);
282

tbrehm's avatar
tbrehm committed
283
		}
284

285
		$ssl_domain_select = '';
286
287
		$tmp = $app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id = ".$this->id);
		$ssl_domains = array($tmp["domain"],'www.'.$tmp["domain"]);
288
289
290
291
292
293
294
295
296
297
		if(is_array($ssl_domains)) {
			foreach( $ssl_domains as $ssl_domain) {
				$selected = ($ssl_domain == $this->dataRecord['ssl_domain'])?'SELECTED':'';
				$ssl_domain_select .= "<option value='$ssl_domain' $selected>$ssl_domain</option>\r\n";
			}
		}
		$app->tpl->setVar("ssl_domain",$ssl_domain_select);
		unset($ssl_domain_select);
		unset($ssl_domains);
		unset($ssl_domain);
298

tbrehm's avatar
tbrehm committed
299
300
		if($this->id > 0) {
			//* we are editing a existing record
301
302
			$app->tpl->setVar("edit_disabled", 1);
			$app->tpl->setVar("server_id_value", $this->dataRecord["server_id"]);
tbrehm's avatar
tbrehm committed
303
		} else {
304
			$app->tpl->setVar("edit_disabled", 0);
tbrehm's avatar
tbrehm committed
305
		}
306

307
308
		$tmp_txt = ($this->dataRecord['traffic_quota_lock'] == 'y')?'<b>('.$app->tform->lng('traffic_quota_exceeded_txt').')</b>':'';
		$app->tpl->setVar("traffic_quota_exceeded_txt", $tmp_txt);
309

310
311
312
313
314
315
		/*
		 * Now we have to check, if we should use the domain-module to select the domain
		 * or not
		 */
		$app->uses('ini_parser,getconf');
		$settings = $app->getconf->get_global_config('domains');
316
317
318
319
		if ($settings['use_domain_module'] == 'y') {
			/*
			 * The domain-module is in use.
			*/
320
			$client_group_id = $_SESSION["s"]["user"]["default_group"];
321
322
323
324
325
326
327
328
			/*
			 * The admin can select ALL domains, the user only the domains assigned to him
			 */
			$sql = "SELECT domain FROM domain ";
			if ($_SESSION["s"]["user"]["typ"] != 'admin') {
				$sql .= "WHERE sys_groupid =" . $client_group_id;
			}
			$sql .= " ORDER BY domain";
329
330
			$domains = $app->db->queryAllRecords($sql);
			$domain_select = '';
331
332
			if(is_array($domains) && sizeof($domains) > 0) {
				/* We have domains in the list, so create the drop-down-list */
333
				foreach( $domains as $domain) {
334
335
336
337
338
					$domain_select .= "<option value=" . $domain['domain'] ;
					if ($domain['domain'] == $this->dataRecord["domain"]) {
						$domain_select .= " selected";
					}
					$domain_select .= ">" . $domain['domain'] . "</option>\r\n";
339
340
				}
			}
341
342
343
344
345
			else {
				/*
				 * We have no domains in the domain-list. This means, we can not add ANY new domain.
				 * To avoid, that the variable "domain_option" is empty and so the user can
				 * free enter a domain, we have to create a empty option!
346
				*/
347
348
				$domain_select .= "<option value=''></option>\r\n";
			}
349
350
			$app->tpl->setVar("domain_option",$domain_select);
		}
351

tbrehm's avatar
tbrehm committed
352
353
		parent::onShowEnd();
	}
354

tbrehm's avatar
tbrehm committed
355
356
	function onSubmit() {
		global $app, $conf;
357

tbrehm's avatar
tbrehm committed
358
359
360
361
		// Set a few fixed values
		$this->dataRecord["parent_domain_id"] = 0;
		$this->dataRecord["type"] = 'vhost';
		$this->dataRecord["vhost_type"] = 'name';
362

tbrehm's avatar
tbrehm committed
363
364
365
		if($_SESSION["s"]["user"]["typ"] != 'admin') {
			// Get the limits of the client
			$client_group_id = $_SESSION["s"]["user"]["default_group"];
366
			$client = $app->db->queryOneRecord("SELECT limit_traffic_quota, limit_web_domain, default_webserver, parent_client_id, limit_web_quota FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
367

368
			//* Check the website quota of the client
369
			if(isset($_POST["hd_quota"]) && $client["limit_web_quota"] >= 0) {
370
371
				$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ".intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
				$webquota = $tmp["webquota"];
372
				$new_web_quota = intval($this->dataRecord["hd_quota"]);
373
				if(($webquota + $new_web_quota > $client["limit_web_quota"]) || ($new_web_quota < 0 && $client["limit_web_quota"] >= 0)) {
374
					$max_free_quota = floor($client["limit_web_quota"] - $webquota);
375
376
					if($max_free_quota < 0) $max_free_quota = 0;
					$app->tform->errorMessage .= $app->tform->lng("limit_web_quota_free_txt").": ".$max_free_quota." MB<br>";
377
378
379
380
381
382
					// Set the quota field to the max free space
					$this->dataRecord["hd_quota"] = $max_free_quota;
				}
				unset($tmp);
				unset($tmp_quota);
			}
383

384
			//* Check the traffic quota of the client
385
386
387
388
			if(isset($_POST["traffic_quota"]) && $client["limit_traffic_quota"] > 0) {
				$tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain WHERE domain_id != ".intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
				$trafficquota = $tmp["trafficquota"];
				$new_traffic_quota = intval($this->dataRecord["traffic_quota"]);
389
				if(($trafficquota + $new_traffic_quota > $client["limit_traffic_quota"]) || ($new_traffic_quota < 0 && $client["limit_traffic_quota"] >= 0)) {
390
391
392
393
394
395
396
397
398
					$max_free_quota = floor($client["limit_traffic_quota"] - $trafficquota);
					if($max_free_quota < 0) $max_free_quota = 0;
					$app->tform->errorMessage .= $app->tform->lng("limit_traffic_quota_free_txt").": ".$max_free_quota." MB<br>";
					// Set the quota field to the max free space
					$this->dataRecord["traffic_quota"] = $max_free_quota;
				}
				unset($tmp);
				unset($tmp_quota);
			}
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
			
			if($client['parent_client_id'] > 0) {
				// Get the limits of the reseller
				$reseller = $app->db->queryOneRecord("SELECT limit_traffic_quota, limit_web_domain, default_webserver, limit_web_quota FROM client WHERE client_id = ".$client['parent_client_id']);

				//* Check the website quota of the client
				if(isset($_POST["hd_quota"]) && $reseller["limit_web_quota"] >= 0) {
					$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ".intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
					$webquota = $tmp["webquota"];
					$new_web_quota = intval($this->dataRecord["hd_quota"]);
					if(($webquota + $new_web_quota > $reseller["limit_web_quota"]) || ($new_web_quota < 0 && $reseller["limit_web_quota"] >= 0)) {
						$max_free_quota = floor($reseller["limit_web_quota"] - $webquota);
						if($max_free_quota < 0) $max_free_quota = 0;
						$app->tform->errorMessage .= $app->tform->lng("limit_web_quota_free_txt").": ".$max_free_quota." MB<br>";
						// Set the quota field to the max free space
						$this->dataRecord["hd_quota"] = $max_free_quota;
					}
					unset($tmp);
					unset($tmp_quota);
				}

				//* Check the traffic quota of the client
				if(isset($_POST["traffic_quota"]) && $reseller["limit_traffic_quota"] > 0) {
					$tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain WHERE domain_id != ".intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
					$trafficquota = $tmp["trafficquota"];
					$new_traffic_quota = intval($this->dataRecord["traffic_quota"]);
					if(($trafficquota + $new_traffic_quota > $reseller["limit_traffic_quota"]) || ($new_traffic_quota < 0 && $reseller["limit_traffic_quota"] >= 0)) {
						$max_free_quota = floor($reseller["limit_traffic_quota"] - $trafficquota);
						if($max_free_quota < 0) $max_free_quota = 0;
						$app->tform->errorMessage .= $app->tform->lng("limit_traffic_quota_free_txt").": ".$max_free_quota." MB<br>";
						// Set the quota field to the max free space
						$this->dataRecord["traffic_quota"] = $max_free_quota;
					}
					unset($tmp);
					unset($tmp_quota);
				}
			}
436

tbrehm's avatar
tbrehm committed
437
438
439
440
441
442
			// When the record is updated
			if($this->id > 0) {
				// restore the server ID if the user is not admin and record is edited
				$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ".intval($this->id));
				$this->dataRecord["server_id"] = $tmp["server_id"];
				unset($tmp);
443
				// When the record is inserted
tbrehm's avatar
tbrehm committed
444
			} else {
445
				//* set the server ID to the default webserver of the client
tbrehm's avatar
tbrehm committed
446
				$this->dataRecord["server_id"] = $client["default_webserver"];
447

448
449
450
451
452
				// Check if the user may add another web_domain
				if($client["limit_web_domain"] >= 0) {
					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = $client_group_id and type = 'vhost'");
					if($tmp["number"] >= $client["limit_web_domain"]) {
						$app->error($app->tform->wordbook["limit_web_domain_txt"]);
tbrehm's avatar
tbrehm committed
453
454
					}
				}
455

tbrehm's avatar
tbrehm committed
456
			}
457

458
459
			// Clients may not set the client_group_id, so we unset them if user is not a admin and the client is not a reseller
			if(!$app->auth->has_clients($_SESSION['s']['user']['userid'])) unset($this->dataRecord["client_group_id"]);
tbrehm's avatar
tbrehm committed
460
		}
461
462
463
		
		//* make sure that the email domain is lowercase
		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
464
465
		
		//* get the server config for this server
466
467
468
469
470
471
472
473
474
475
476
477
		$app->uses("getconf");
		$web_config = $app->getconf->get_server_config(intval($this->dataRecord["server_id"]),'web');
		//* Check for duplicate ssl certs per IP if SNI is disabled
		if(isset($this->dataRecord['ssl']) && $this->dataRecord['ssl'] == 'y' && $web_config['enable_sni'] != 'y') {
			$sql = "SELECT count(domain_id) as number FROM web_domain WHERE `ssl` = 'y' AND ip_address = '".$app->db->quote($this->dataRecord['ip_address'])."' and domain_id != ".$this->id;
			$tmp = $app->db->queryOneRecord($sql);
			if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("error_no_sni_txt");
		}
		
		// Check if pm.max_children >= pm.max_spare_servers >= pm.start_servers >= pm.min_spare_servers > 0
		if(isset($this->dataRecord['pm_max_children'])) {
			if(intval($this->dataRecord['pm_max_children']) >= intval($this->dataRecord['pm_max_spare_servers']) && intval($this->dataRecord['pm_max_spare_servers']) >= intval($this->dataRecord['pm_start_servers']) && intval($this->dataRecord['pm_start_servers']) >= intval($this->dataRecord['pm_min_spare_servers']) && intval($this->dataRecord['pm_min_spare_servers']) > 0){
478
		
479
480
481
482
			} else {
				$app->tform->errorMessage .= $app->tform->lng("error_php_fpm_pm_settings_txt").'<br>';
			}
		}
483

tbrehm's avatar
tbrehm committed
484
485
		parent::onSubmit();
	}
486

tbrehm's avatar
tbrehm committed
487
488
	function onAfterInsert() {
		global $app, $conf;
489

chjacobsen's avatar
typo    
chjacobsen committed
490
		// make sure that the record belongs to the clinet group and not the admin group when admin inserts it
tbrehm's avatar
tbrehm committed
491
492
493
494
495
		// also make sure that the user can not delete domain created by a admin
		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
			$client_group_id = intval($this->dataRecord["client_group_id"]);
			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
		}
496
497
498
499
		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
			$client_group_id = intval($this->dataRecord["client_group_id"]);
			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
		}
500

tbrehm's avatar
tbrehm committed
501
502
		// Get configuration for the web system
		$app->uses("getconf");
tbrehm's avatar
tbrehm committed
503
504
		$web_rec = $app->tform->getDataRecord($this->id);
		$web_config = $app->getconf->get_server_config(intval($web_rec["server_id"]),'web');
tbrehm's avatar
tbrehm committed
505
		$document_root = str_replace("[website_id]",$this->id,$web_config["website_path"]);
506
507
508
509
		$document_root = str_replace("[website_idhash_1]",$this->id_hash($page_form->id,1),$document_root);
		$document_root = str_replace("[website_idhash_2]",$this->id_hash($page_form->id,1),$document_root);
		$document_root = str_replace("[website_idhash_3]",$this->id_hash($page_form->id,1),$document_root);
		$document_root = str_replace("[website_idhash_4]",$this->id_hash($page_form->id,1),$document_root);
510

tbrehm's avatar
tbrehm committed
511
		// get the ID of the client
512
		if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
tbrehm's avatar
tbrehm committed
513
			$client_group_id = $_SESSION["s"]["user"]["default_group"];
514
			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = $client_group_id");
tbrehm's avatar
tbrehm committed
515
516
			$client_id = intval($client["client_id"]);
		} else {
517
			//$client_id = intval($this->dataRecord["client_group_id"]);
tbrehm's avatar
tbrehm committed
518
			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($this->dataRecord["client_group_id"]));
tbrehm's avatar
tbrehm committed
519
520
			$client_id = intval($client["client_id"]);
		}
521

tbrehm's avatar
tbrehm committed
522
		// Set the values for document_root, system_user and system_group
523
524
		$system_user = $app->db->quote('web'.$this->id);
		$system_group = $app->db->quote('client'.$client_id);
525
526
527
528
529
530
		$document_root = str_replace("[client_id]",$client_id,$document_root);
		$document_root = str_replace("[client_idhash_1]",$this->id_hash($client_id,1),$document_root);
		$document_root = str_replace("[client_idhash_2]",$this->id_hash($client_id,2),$document_root);
		$document_root = str_replace("[client_idhash_3]",$this->id_hash($client_id,3),$document_root);
		$document_root = str_replace("[client_idhash_4]",$this->id_hash($client_id,4),$document_root);
		$document_root = $app->db->quote($document_root);
531
532
		$php_open_basedir = str_replace("[website_path]",$document_root,$web_config["php_open_basedir"]);
		$php_open_basedir = $app->db->quote(str_replace("[website_domain]",$web_rec['domain'],$php_open_basedir));
533
		$htaccess_allow_override = $app->db->quote($web_config["htaccess_allow_override"]);
534

535
		$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root', allow_override = '$htaccess_allow_override', php_open_basedir = '$php_open_basedir'  WHERE domain_id = ".$this->id;
tbrehm's avatar
tbrehm committed
536
537
		$app->db->query($sql);
	}
538

539
540
	function onBeforeUpdate () {
		global $app, $conf;
541
542
543
544

		//* Check if the server has been changed
		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
545
			if (isset($this->dataRecord["server_id"])) {
546
547
548
549
550
551
552
				$rec = $app->db->queryOneRecord("SELECT server_id from web_domain WHERE domain_id = ".$this->id);
				if($rec['server_id'] != $this->dataRecord["server_id"]) {
					//* Add a error message and switch back to old server
					$app->tform->errorMessage .= $app->lng('The Server can not be changed.');
					$this->dataRecord["server_id"] = $rec['server_id'];
				}
				unset($rec);
553
			}
554
			//* If the user is neither admin nor reseller
555
556
557
558
559
560
561
562
563
		} else {
			//* We do not allow users to change a domain which has been created by the admin
			$rec = $app->db->queryOneRecord("SELECT domain from web_domain WHERE domain_id = ".$this->id);
			if(isset($this->dataRecord["domain"]) && $rec['domain'] != $this->dataRecord["domain"] && $app->tform->checkPerm($this->id,'u')) {
				//* Add a error message and switch back to old server
				$app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
				$this->dataRecord["domain"] = $rec['domain'];
			}
			unset($rec);
564
		}
565

566
567
568
569
570
571
572
573
		//* Check that all fields for the SSL cert creation are filled
		if(isset($this->dataRecord['ssl_action']) && $this->dataRecord['ssl_action'] == 'create') {
			if($this->dataRecord['ssl_state'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_state_empty').'<br />';
			if($this->dataRecord['ssl_locality'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_locality_empty').'<br />';
			if($this->dataRecord['ssl_organisation'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_organisation_empty').'<br />';
			if($this->dataRecord['ssl_organisation_unit'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_organisation_unit_empty').'<br />';
			if($this->dataRecord['ssl_country'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_country_empty').'<br />';
		}
574
575
576
577
		
		if(isset($this->dataRecord['ssl_action']) && $this->dataRecord['ssl_action'] == 'save') {
			if(trim($this->dataRecord['ssl_cert']) == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_cert_empty').'<br />';
		}
578

579
	}
580

tbrehm's avatar
tbrehm committed
581
582
	function onAfterUpdate() {
		global $app, $conf;
583

584
		// make sure that the record belongs to the client group and not the admin group when a admin inserts it
tbrehm's avatar
tbrehm committed
585
586
587
588
589
		// also make sure that the user can not delete domain created by a admin
		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
			$client_group_id = intval($this->dataRecord["client_group_id"]);
			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
		}
590
591
592
593
		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
			$client_group_id = intval($this->dataRecord["client_group_id"]);
			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
		}
594

tbrehm's avatar
tbrehm committed
595
596
		// Get configuration for the web system
		$app->uses("getconf");
tbrehm's avatar
tbrehm committed
597
598
		$web_rec = $app->tform->getDataRecord($this->id);
		$web_config = $app->getconf->get_server_config(intval($web_rec["server_id"]),'web');
tbrehm's avatar
tbrehm committed
599
		$document_root = str_replace("[website_id]",$this->id,$web_config["website_path"]);
600
601
602
603
		$document_root = str_replace("[website_idhash_1]",$this->id_hash($page_form->id,1),$document_root);
		$document_root = str_replace("[website_idhash_2]",$this->id_hash($page_form->id,1),$document_root);
		$document_root = str_replace("[website_idhash_3]",$this->id_hash($page_form->id,1),$document_root);
		$document_root = str_replace("[website_idhash_4]",$this->id_hash($page_form->id,1),$document_root);
604

tbrehm's avatar
tbrehm committed
605
		// get the ID of the client
606
		if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
tbrehm's avatar
tbrehm committed
607
			$client_group_id = $_SESSION["s"]["user"]["default_group"];
608
			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = $client_group_id");
tbrehm's avatar
tbrehm committed
609
610
			$client_id = intval($client["client_id"]);
		} else {
611
			//$client_id = intval(@$web_rec["client_group_id"]);
tbrehm's avatar
tbrehm committed
612
			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval(@$this->dataRecord["client_group_id"]));
tbrehm's avatar
tbrehm committed
613
614
			$client_id = intval($client["client_id"]);
		}
615

616
		if(($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) &&  isset($this->dataRecord["client_group_id"]) && $this->dataRecord["client_group_id"] != $this->oldDataRecord["sys_groupid"]) {
617
			// Set the values for document_root, system_user and system_group
618
619
			$system_user = $app->db->quote('web'.$this->id);
			$system_group = $app->db->quote('client'.$client_id);
620
621
622
623
624
625
			$document_root = str_replace("[client_id]",$client_id,$document_root);
			$document_root = str_replace("[client_idhash_1]",$this->id_hash($client_id,1),$document_root);
			$document_root = str_replace("[client_idhash_2]",$this->id_hash($client_id,2),$document_root);
			$document_root = str_replace("[client_idhash_3]",$this->id_hash($client_id,3),$document_root);
			$document_root = str_replace("[client_idhash_4]",$this->id_hash($client_id,4),$document_root);
			$document_root = $app->db->quote($document_root);
626

627
628
			$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root' WHERE domain_id = ".$this->id;
			//$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group' WHERE domain_id = ".$this->id;
629
			$app->db->query($sql);
630

631
632
633
			// Update the FTP user(s) too
			$records = $app->db->queryAllRecords("SELECT ftp_user_id FROM ftp_user WHERE parent_domain_id = ".$this->id);
			foreach($records as $rec) {
634
				$app->db->datalogUpdate('ftp_user', "sys_userid = '".$web_rec['sys_userid']."', sys_groupid = '".$web_rec['sys_groupid']."', uid = '$system_user', gid = '$system_group', dir = '$document_root'", 'ftp_user_id', $rec['ftp_user_id']);
635
636
637
			}
			unset($records);
			unset($rec);
638

639
640
641
			// Update the Shell user(s) too
			$records = $app->db->queryAllRecords("SELECT shell_user_id FROM shell_user WHERE parent_domain_id = ".$this->id);
			foreach($records as $rec) {
642
643
644
645
646
647
648
649
650
				$app->db->datalogUpdate('shell_user', "sys_userid = '".$web_rec['sys_userid']."', sys_groupid = '".$web_rec['sys_groupid']."', puser = '$system_user', pgroup = '$system_group', dir = '$document_root'", 'shell_user_id', $rec['shell_user_id']);
			}
			unset($records);
			unset($rec);
			
			//* Update all subdomains and alias domains
			$records = $app->db->queryAllRecords("SELECT domain_id FROM web_domain WHERE parent_domain_id = ".$this->id);
			foreach($records as $rec) {
				$app->db->datalogUpdate('web_domain', "sys_userid = '".$web_rec['sys_userid']."', sys_groupid = '".$web_rec['sys_groupid']."'", 'domain_id', $rec['domain_id']);
651
652
653
			}
			unset($records);
			unset($rec);
654
655
656
657
658
659
660
661
			
			//* Update all databases
			$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ".$this->id);
			foreach($records as $rec) {
				$app->db->datalogUpdate('web_database', "sys_userid = '".$web_rec['sys_userid']."', sys_groupid = '".$web_rec['sys_groupid']."'", 'database_id', $rec['database_id']);
			}
			unset($records);
			unset($rec);
662

663
		}
664

665
666
667
668
669
670
671
672
673
674
675
		//* If the domain name has been changed, we will have to change all subdomains
		if($this->dataRecord["domain"] != '' && $this->oldDataRecord["domain"] != '' && $this->dataRecord["domain"] != $this->oldDataRecord["domain"]) {
			$records = $app->db->queryAllRecords("SELECT domain_id,domain FROM web_domain WHERE type = 'subdomain' AND domain LIKE '%.".$app->db->quote($this->oldDataRecord["domain"])."'");
			foreach($records as $rec) {
				$subdomain = $app->db->quote(str_replace($this->oldDataRecord["domain"],$this->dataRecord["domain"],$rec['domain']));
				$app->db->datalogUpdate('web_domain', "domain = '".$subdomain."'", 'domain_id', $rec['domain_id']);
			}
			unset($records);
			unset($rec);
			unset($subdomain);
		}
676

677
		//* Set allow_override if empty
678
679
680
681
		if($web_rec['allow_override'] == '') {
			$sql = "UPDATE web_domain SET allow_override = '".$app->db->quote($web_config["htaccess_allow_override"])."' WHERE domain_id = ".$this->id;
			$app->db->query($sql);
		}
682
683
684
685
		
		//* Set php_open_basedir if empty or domain or client has been changed
		if($web_rec['php_open_basedir'] == '' || 
		($this->dataRecord["domain"] != '' && $this->oldDataRecord["domain"] != '' && $this->dataRecord["domain"] != $this->oldDataRecord["domain"]) ||
mcramer's avatar
mcramer committed
686
		(isset($this->dataRecord["client_group_id"]) && $this->dataRecord["client_group_id"] != $this->oldDataRecord["sys_groupid"])) {
687
			$document_root = $app->db->quote(str_replace("[client_id]",$client_id,$document_root));
688
689
			$php_open_basedir = str_replace("[website_path]",$document_root,$web_config["php_open_basedir"]);
			$php_open_basedir = $app->db->quote(str_replace("[website_domain]",$web_rec['domain'],$php_open_basedir));
690
691
692
			$sql = "UPDATE web_domain SET php_open_basedir = '$php_open_basedir' WHERE domain_id = ".$this->id;
			$app->db->query($sql);
		}
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
		
		//* Change database backup options when web backup options have been changed
		if(isset($this->dataRecord['backup_interval']) && ($this->dataRecord['backup_interval'] != $this->oldDataRecord['backup_interval'] || $this->dataRecord['backup_copies'] != $this->oldDataRecord['backup_copies'])) {
			//* Update all databases
			$backup_interval = $this->dataRecord['backup_interval'];
			$backup_copies = $this->dataRecord['backup_copies'];
			$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ".$this->id);
			foreach($records as $rec) {
				$app->db->datalogUpdate('web_database', "backup_interval = '$backup_interval', backup_copies = '$backup_copies'", 'database_id', $rec['database_id']);
			}
			unset($records);
			unset($rec);
			unset($backup_copies);
			unset($backup_interval);
		}
708

tbrehm's avatar
tbrehm committed
709
	}
710

tbrehm's avatar
tbrehm committed
711
712
	function onAfterDelete() {
		global $app, $conf;
713

tbrehm's avatar
tbrehm committed
714
715
716
717
		// Delete the sub and alias domains
		$child_domains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$this->id);
		foreach($child_domains as $d) {
			// Saving record to datalog when db_history enabled
718
			if($app->tform->formDef["db_history"] == 'yes') {
tbrehm's avatar
tbrehm committed
719
				$app->tform->datalogSave('DELETE',$d["domain_id"],$d,array());
720
			}
tbrehm's avatar
tbrehm committed
721

722
			$app->db->query("DELETE FROM web_domain WHERE domain_id = ".$d["domain_id"]." LIMIT 0,1");
tbrehm's avatar
tbrehm committed
723
724
725
		}
		unset($child_domains);
		unset($d);
726

tbrehm's avatar
tbrehm committed
727
	}
728

tbrehm's avatar
tbrehm committed
729
730
731
732
733
}

$page = new page_action;
$page->onLoad();

734
?>