web_vhost_domain_edit.php 88.7 KB
Newer Older
Falko Timme's avatar
Falko Timme committed
1
2
3
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
<?php
/*
Copyright (c) 2007 - 2009, Till Brehm, projektfarm Gmbh
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
******************************************/

35
$tform_def_file = "form/web_vhost_domain.tform.php";
Falko Timme's avatar
Falko Timme committed
36
37
38
39
40

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

41
42
require_once '../../lib/config.inc.php';
require_once '../../lib/app.inc.php';
Falko Timme's avatar
Falko Timme committed
43
44
45
46
47

//* Check permissions for module
$app->auth->check_module_permissions('sites');

// Loading classes
48
$app->uses('tpl,tform,tform_actions,tools_sites');
Falko Timme's avatar
Falko Timme committed
49
50
51
$app->load('tform_actions');

class page_action extends tform_actions {
52
	var $_vhostdomain_type = 'domain';
Falko Timme's avatar
Falko Timme committed
53
54

	//* Returna a "3/2/1" path hash from a numeric id '123'
55
	function id_hash($id, $levels) {
Falko Timme's avatar
Falko Timme committed
56
57
58
59
60
61
62
63
64
65
		$hash = "" . $id % 10 ;
		$id /= 10 ;
		$levels -- ;
		while ( $levels > 0 ) {
			$hash .= "/" . $id % 10 ;
			$id /= 10 ;
			$levels-- ;
		}
		return $hash;
	}
66

67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
	function onLoad() {
		$show_type = 'domain';
		if(isset($_GET['type']) && $_GET['type'] == 'subdomain') {
			$show_type = 'subdomain';
		} elseif(isset($_GET['type']) && $_GET['type'] == 'aliasdomain') {
			$show_type = 'aliasdomain';
		} elseif(!isset($_GET['type']) && isset($_SESSION['s']['var']['vhostdomain_type']) && $_SESSION['s']['var']['vhostdomain_type'] == 'subdomain') {
			$show_type = 'subdomain';
		} elseif(!isset($_GET['type']) && isset($_SESSION['s']['var']['vhostdomain_type']) && $_SESSION['s']['var']['vhostdomain_type'] == 'aliasdomain') {
			$show_type = 'aliasdomain';
		}

		$_SESSION['s']['var']['vhostdomain_type'] = $show_type;
		$this->_vhostdomain_type = $show_type;
		
		parent::onLoad();
	}

Falko Timme's avatar
Falko Timme committed
85
86
87
88
89
	function onShowNew() {
		global $app, $conf;

		// we will check only users, not admins
		if($_SESSION["s"]["user"]["typ"] == 'user') {
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
			if($this->_vhostdomain_type == 'domain') {
				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"]);
				}
			} elseif($this->_vhostdomain_type == 'subdomain') {
				if(!$app->tform->checkClientLimit('limit_web_subdomain', "(type = 'subdomain' OR type = 'vhostsubdomain')")) {
					$app->error($app->tform->wordbook["limit_web_subdomain_txt"]);
				}
				if(!$app->tform->checkResellerLimit('limit_web_subdomain', "(type = 'subdomain' OR type = 'vhostsubdomain')")) {
					$app->error('Reseller: '.$app->tform->wordbook["limit_web_subdomain_txt"]);
				}
			} elseif($this->_vhostdomain_type == 'aliasdomain') {
				if(!$app->tform->checkClientLimit('limit_web_aliasdomain', "(type = 'alias' OR type = 'vhostalias')")) {
					$app->error($app->tform->wordbook["limit_web_aliasdomain_txt"]);
				}
				if(!$app->tform->checkResellerLimit('limit_web_aliasdomain', "(type = 'alias' OR type = 'vhostalias')")) {
					$app->error('Reseller: '.$app->tform->wordbook["limit_web_aliasdomain_txt"]);
				}
Falko Timme's avatar
Falko Timme committed
111
112
113
			}
			// Get the limits of the client
			$client_group_id = $_SESSION["s"]["user"]["default_group"];
114
			$client = $app->db->queryOneRecord("SELECT client.web_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
115
			$web_servers = explode(',', $client['web_servers']);
116
117
			$server_id = $web_servers[0];
			$app->tpl->setVar("server_id_value", $server_id);
118
			unset($web_servers);
119
120
		} else {
			$settings = $app->getconf->get_global_config('sites');
121
122
			$server_id = intval($settings['default_webserver']);
			$app->tform->formDef['tabs']['domain']['fields']['server_id']['default'] = $server_id;
Falko Timme's avatar
Falko Timme committed
123
		}
Falko Timme's avatar
Falko Timme committed
124
125
126
127
		if(!$server_id){
			$default_web_server = $app->db->queryOneRecord("SELECT server_id FROM server WHERE web_server = ? ORDER BY server_id LIMIT 0,1", 1);
			$server_id = $default_web_server['server_id'];
		}
128
129
		$web_config = $app->getconf->get_server_config($server_id, 'web');
		$app->tform->formDef['tabs']['domain']['fields']['php']['default'] = $web_config['php_handler'];
130
		$app->tform->formDef['tabs']['domain']['readonly'] = false;
Falko Timme's avatar
Falko Timme committed
131

132
		$app->tpl->setVar('vhostdomain_type', $this->_vhostdomain_type);
Falko Timme's avatar
Falko Timme committed
133
134
135
136
137
		parent::onShowNew();
	}

	function onShowEnd() {
		global $app, $conf;
138

Falko Timme's avatar
Falko Timme committed
139
		$app->uses('ini_parser,getconf');
140
		$settings = $app->getconf->get_global_config('domains');
Falko Timme's avatar
Falko Timme committed
141

Marius Burkard's avatar
Marius Burkard committed
142
		$read_limits = array('limit_cgi', 'limit_ssi', 'limit_perl', 'limit_ruby', 'limit_python', 'force_suexec', 'limit_hterror', 'limit_wildcard', 'limit_ssl', 'limit_ssl_letsencrypt', 'limit_directive_snippets');
143

144
		if($this->_vhostdomain_type != 'domain') $parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ?", @$this->dataRecord["parent_domain_id"]);
145
146
		
		$is_admin = false;
147

Falko Timme's avatar
Falko Timme committed
148
149
150
151
		//* Client: If the logged in user is not admin and has no sub clients (no reseller)
		if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {

			// Get the limits of the client
152
153
			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
			if($this->_vhostdomain_type == 'domain') {
154
				$client = $app->db->queryOneRecord("SELECT client.limit_web_domain, client.web_servers, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
155
			} elseif($this->_vhostdomain_type == 'subdomain') {
156
				$client = $app->db->queryOneRecord("SELECT client.limit_web_subdomain, client.web_servers, client.default_webserver, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
157
			} elseif($this->_vhostdomain_type == 'aliasdomain') {
158
				$client = $app->db->queryOneRecord("SELECT client.limit_web_aliasdomain, client.web_servers, client.default_webserver, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
159
			}
160

161
162
163
			$client['web_servers_ids'] = explode(',', $client['web_servers']);
			$only_one_server = count($client['web_servers_ids']) === 1;
			$app->tpl->setVar('only_one_server', $only_one_server);
164

165
			//* Get global web config
166
167
168
			foreach ($client['web_servers_ids'] as $web_server_id) {
				$web_config[$web_server_id] = $app->getconf->get_server_config($web_server_id, 'web');
			}
169

170
171
			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
			$web_servers = $app->db->queryAllRecords($sql, $client['web_servers_ids']);
172
173
174
175

			$options_web_servers = "";

			foreach ($web_servers as $web_server) {
Marius Cramer's avatar
Marius Cramer committed
176
				$options_web_servers .= '<option value="'.$web_server['server_id'].'"'.($this->id > 0 && $this->dataRecord["server_id"] == $web_server['server_id'] ? ' selected="selected"' : '').'>'.$web_server['server_name'].'</option>';
177
178
179
180
181
182
183
			}

			$app->tpl->setVar("server_id", $options_web_servers);
			unset($options_web_servers);

			if($this->id > 0) {
				if(!isset($this->dataRecord["server_id"])){
184
					$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->id);
185
186
187
188
189
190
191
					$this->dataRecord["server_id"] = $tmp["server_id"];
					unset($tmp);
				}
				$server_id = intval(@$this->dataRecord["server_id"]);
			} else {
				$server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 0;
			}
192
193
194
195
			
			if($app->functions->intval($this->dataRecord["server_id"]) > 0) {
				// check if server is in client's servers or add it.
				$chk_sid = explode(',', $client['web_servers']);
196
				if(in_array($this->dataRecord["server_id"], explode(',', $client['web_servers'])) == false) {
197
198
199
200
201
					if($client['web_servers'] != '') $client['web_servers'] .= ',';
					$client['web_servers'] .= $app->functions->intval($this->dataRecord["server_id"]);
				}
			}
			
Falko Timme's avatar
Falko Timme committed
202
			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
203
204
			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
			$ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']));
205
			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
206
			//if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
Falko Timme's avatar
Falko Timme committed
207
208
209
210
211
212
213
			//$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";
				}
			}
214
			$app->tpl->setVar("ip_address", $ip_select);
Falko Timme's avatar
Falko Timme committed
215
216
			unset($tmp);
			unset($ips);
217

Falko Timme's avatar
Falko Timme committed
218
			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
219
220
			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
			$ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']), $_SESSION['s']['user']['client_id']);
221
			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
Falko Timme's avatar
Falko Timme committed
222
223
224
225
226
227
228
			//$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";
				}
			}
229
			$app->tpl->setVar("ipv6_address", $ip_select);
Falko Timme's avatar
Falko Timme committed
230
231
			unset($tmp);
			unset($ips);
232

Falko Timme's avatar
Falko Timme committed
233
234
			//PHP Version Selection (FastCGI)
			$server_type = 'apache';
235
			if(!empty($web_config[$server_id]['server_type'])) $server_type = $web_config[$server_id]['server_type'];
Falko Timme's avatar
Falko Timme committed
236
			if($server_type == 'nginx' && $this->dataRecord['php'] == 'fast-cgi') $this->dataRecord['php'] = 'php-fpm';
237
238

			if($this->_vhostdomain_type == 'domain') {
239
				if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
240
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", ($this->id > 0 ? $this->dataRecord['server_id'] : $client['default_webserver']), $_SESSION['s']['user']['client_id']);
241
242
				}
				if($this->dataRecord['php'] == 'fast-cgi'){
243
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", ($this->id > 0 ? $this->dataRecord['server_id'] : $client['default_webserver']), $_SESSION['s']['user']['client_id']);
244
245
				}
			} else {
246
				if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
247
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
248
249
				}
				if($this->dataRecord['php'] == 'fast-cgi'){
250
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
251
				}
Falko Timme's avatar
Falko Timme committed
252
253
254
255
			}
			$php_select = "<option value=''>Default</option>";
			if(is_array($php_records) && !empty($php_records)) {
				foreach( $php_records as $php_record) {
256
					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
Falko Timme's avatar
Falko Timme committed
257
258
259
260
261
262
263
264
						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
					} else {
						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
					}
					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
					$php_select .= "<option value='$php_version' $selected>".$php_record['name']."</option>\r\n";
				}
			}
265
			$app->tpl->setVar("fastcgi_php_version", $php_select);
Falko Timme's avatar
Falko Timme committed
266
267
			unset($php_records);

268
269
270
271
			// add limits to template to be able to hide settings
			foreach($read_limits as $limit) $app->tpl->setVar($limit, $client[$limit]);


Falko Timme's avatar
Falko Timme committed
272
273
274
275
			//* Reseller: If the logged in user is not admin and has sub clients (is a reseller)
		} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {

			// Get the limits of the client
Till Brehm's avatar
Till Brehm committed
276
			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
277
278

			if($this->_vhostdomain_type == 'domain') {
279
				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_domain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
280
281
				$app->tpl->setVar('only_one_server', $only_one_server);
			} elseif($this->_vhostdomain_type == 'subdomain') {
282
				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_subdomain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
283
			} elseif($this->_vhostdomain_type == 'aliasdomain') {
284
				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_aliasdomain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
285
286
287
288
			}

			$client['web_servers_ids'] = explode(',', $client['web_servers']);
			$only_one_server = count($client['web_servers_ids']) === 1;
289

290
			//* Get global web config
291
292
293
			foreach ($client['web_servers_ids'] as $web_server_id) {
				$web_config[$web_server_id] = $app->getconf->get_server_config($web_server_id, 'web');
			}
294

295
296
			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
			$web_servers = $app->db->queryAllRecords($sql, $client['web_servers_ids']);
297
298
299
300

			$options_web_servers = "";

			foreach ($web_servers as $web_server) {
Marius Cramer's avatar
Marius Cramer committed
301
				$options_web_servers .= '<option value="'.$web_server['server_id'].'"'.($this->id > 0 && $this->dataRecord["server_id"] == $web_server['server_id'] ? ' selected="selected"' : '').'>'.$web_server['server_name'].'</option>';
302
303
304
305
			}

			$app->tpl->setVar("server_id", $options_web_servers);
			unset($options_web_servers);
Falko Timme's avatar
Falko Timme committed
306

307
308
			if ($settings['use_domain_module'] != 'y') {
				// Fill the client select field
309
310
311
				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
				$records = $app->db->queryAllRecords($sql, $client['client_id']);
				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
312
313
314
315
316
317
318
319
320
321
				$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
				//$tmp_data_record = $app->tform->getDataRecord($this->id);
				if(is_array($records)) {
					$selected_client_group_id = 0; // needed to get list of PHP versions
					foreach( $records as $rec) {
						if(is_array($this->dataRecord) && ($rec["groupid"] == $this->dataRecord['client_group_id'] || $rec["groupid"] == $this->dataRecord['sys_groupid']) && !$selected_client_group_id) $selected_client_group_id = $rec["groupid"];
						$selected = @(is_array($this->dataRecord) && ($rec["groupid"] == $this->dataRecord['client_group_id'] || $rec["groupid"] == $this->dataRecord['sys_groupid']))?'SELECTED':'';
						if($selected == 'SELECTED') $selected_client_group_id = $rec["groupid"];
						$client_select .= "<option value='$rec[groupid]' $selected>$rec[contactname]</option>\r\n";
					}
Falko Timme's avatar
Falko Timme committed
322
				}
323
				$app->tpl->setVar("client_group_id", $client_select);
Falko Timme's avatar
Falko Timme committed
324
325
			}

326
327
328
329
330
331
332
333
334
			if($app->functions->intval($this->dataRecord["server_id"]) > 0) {
				// check if server is in client's servers or add it.
				$chk_sid = explode(',', $client['web_servers']);
				if(in_array($this->dataRecord["server_id"], $client['web_servers']) == false) {
					if($client['web_servers'] != '') $client['web_servers'] .= ',';
					$client['web_servers'] .= $app->functions->intval($this->dataRecord["server_id"]);
				}
			}
			
Falko Timme's avatar
Falko Timme committed
335
			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
336
337
			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=?)";
			$ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']), $_SESSION['s']['user']['client_id']);
338
			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
339
			//if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
Falko Timme's avatar
Falko Timme committed
340
341
342
343
344
345
346
			//$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";
				}
			}
347
			$app->tpl->setVar("ip_address", $ip_select);
Falko Timme's avatar
Falko Timme committed
348
349
			unset($tmp);
			unset($ips);
350

Falko Timme's avatar
Falko Timme committed
351
			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
352
353
			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
			$ips = $app->db->queryAllRecords($sql, $client['web_servers'], $_SESSION['s']['user']['client_id']);
Falko Timme's avatar
Falko Timme committed
354
355
356
357
358
359
360
361
			$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";
				}
			}
362
			$app->tpl->setVar("ipv6_address", $ip_select);
Falko Timme's avatar
Falko Timme committed
363
364
			unset($tmp);
			unset($ips);
365

Falko Timme's avatar
Falko Timme committed
366
367
			//PHP Version Selection (FastCGI)
			$server_type = 'apache';
368
			if(!empty($web_config[$server_id]['server_type'])) $server_type = $web_config[$server_id]['server_type'];
Falko Timme's avatar
Falko Timme committed
369
			if($server_type == 'nginx' && $this->dataRecord['php'] == 'fast-cgi') $this->dataRecord['php'] = 'php-fpm';
370
371
			$selected_client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $selected_client_group_id);
			$sql_where = " AND (client_id = 0 OR client_id = ?)";
372
			if($this->_vhostdomain_type == 'domain') {
373
				if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
374
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?".$sql_where, ($this->id > 0 ? $this->dataRecord['server_id'] : $client['default_webserver']), $selected_client['client_id']);
375
376
				}
				if($this->dataRecord['php'] == 'fast-cgi') {
377
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ?".$sql_where, ($this->id > 0 ? $this->dataRecord['server_id'] : $client['default_webserver']), $selected_client['client_id']);
378
379
				}
			} else {
380
				if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
381
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
382
383
				}
				if($this->dataRecord['php'] == 'fast-cgi') {
384
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
385
				}
Falko Timme's avatar
Falko Timme committed
386
387
388
389
			}
			$php_select = "<option value=''>Default</option>";
			if(is_array($php_records) && !empty($php_records)) {
				foreach( $php_records as $php_record) {
390
					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
Falko Timme's avatar
Falko Timme committed
391
392
393
394
395
396
397
398
						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
					} else {
						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
					}
					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
					$php_select .= "<option value='$php_version' $selected>".$php_record['name']."</option>\r\n";
				}
			}
399
			$app->tpl->setVar("fastcgi_php_version", $php_select);
Falko Timme's avatar
Falko Timme committed
400
			unset($php_records);
401
402
403
404
405
406
407
408

			// add limits to template to be able to hide settings
			foreach($read_limits as $limit) $app->tpl->setVar($limit, $client[$limit]);

			$sites_config = $app->getconf->get_global_config('sites');
			if($sites_config['reseller_can_use_options']) {
				// Directive Snippets
				$php_directive_snippets_txt = '';
409
				$php_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'php' AND active = 'y' AND master_directive_snippets_id > 0 ORDER BY name");
410
				if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
411
					$php_directive_snippets_txt .= $app->tform->wordbook["select_master_directive_snippet_txt"].'<br>';
412
					foreach($php_directive_snippets as $php_directive_snippet){
Marius Cramer's avatar
Marius Cramer committed
413
						$php_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $php_directive_snippet['snippet'] . PHP_EOL;
414
415
416
417
418
419
420
421
422
423
424
						$php_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$php_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($php_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
					}
					$php_directive_snippets_txt .= '<br><br>';
				}
				
				$php_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'php' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
				if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
					$php_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
					foreach($php_directive_snippets as $php_directive_snippet){
						$php_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $php_directive_snippet['snippet'] . PHP_EOL;
						$php_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$php_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($php_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
425
426
427
428
429
430
431
					}
				}
				if($php_directive_snippets_txt == '') $php_directive_snippets_txt = '------';
				$app->tpl->setVar("php_directive_snippets_txt", $php_directive_snippets_txt);

				if($server_type == 'apache'){
					$apache_directive_snippets_txt = '';
432
					$apache_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'apache' AND active = 'y' AND master_directive_snippets_id > 0 ORDER BY name");
433
					if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
434
						$apache_directive_snippets_txt .= $app->tform->wordbook["select_master_directive_snippet_txt"].'<br>';
435
						foreach($apache_directive_snippets as $apache_directive_snippet){
Marius Cramer's avatar
Marius Cramer committed
436
							$apache_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $apache_directive_snippet['snippet'] . PHP_EOL;
437
438
439
440
441
442
443
444
445
446
447
							$apache_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$apache_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($apache_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
						}
						$apache_directive_snippets_txt .= '<br><br>';
					}
					
					$apache_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'apache' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
					if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
						$apache_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
						foreach($apache_directive_snippets as $apache_directive_snippet){
							$apache_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $apache_directive_snippet['snippet'] . PHP_EOL;
							$apache_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$apache_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($apache_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
448
449
450
451
452
453
454
455
						}
					}
					if($apache_directive_snippets_txt == '') $apache_directive_snippets_txt = '------';
					$app->tpl->setVar("apache_directive_snippets_txt", $apache_directive_snippets_txt);
				}

				if($server_type == 'nginx'){
					$nginx_directive_snippets_txt = '';
456
					$nginx_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'nginx' AND active = 'y' AND master_directive_snippets_id > 0 ORDER BY name");
457
					if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
458
						$nginx_directive_snippets_txt .= $app->tform->wordbook["select_master_directive_snippet_txt"].'<br>';
459
						foreach($nginx_directive_snippets as $nginx_directive_snippet){
Marius Cramer's avatar
Marius Cramer committed
460
							$nginx_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $nginx_directive_snippet['snippet'] . PHP_EOL;
461
462
463
464
465
466
467
468
469
470
471
							$nginx_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$nginx_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($nginx_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
						}
						$nginx_directive_snippets_txt .= '<br><br>';
					}
					
					$nginx_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'nginx' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
					if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
						$nginx_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
						foreach($nginx_directive_snippets as $nginx_directive_snippet){
							$nginx_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $nginx_directive_snippet['snippet'] . PHP_EOL;
							$nginx_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$nginx_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($nginx_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
472
473
474
475
476
477
478
						}
					}
					if($nginx_directive_snippets_txt == '') $nginx_directive_snippets_txt = '------';
					$app->tpl->setVar("nginx_directive_snippets_txt", $nginx_directive_snippets_txt);
				}

				$proxy_directive_snippets_txt = '';
479
480
481
482
483
484
485
486
487
488
489
				$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y' AND master_directive_snippets_id > 0 ORDER BY name");
				if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
					$proxy_directive_snippets_txt .= $app->tform->wordbook["select_master_directive_snippet_txt"].'<br>';
					foreach($proxy_directive_snippets as $proxy_directive_snippet){
						$proxy_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $proxy_directive_snippet['snippet'] . PHP_EOL;
						$proxy_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$proxy_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($proxy_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
					}
					$proxy_directive_snippets_txt .= '<br><br>';
				}
				
				$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
490
				if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
491
					$proxy_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
492
					foreach($proxy_directive_snippets as $proxy_directive_snippet){
Marius Cramer's avatar
Marius Cramer committed
493
						$proxy_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $proxy_directive_snippet['snippet'] . PHP_EOL;
494
						$proxy_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$proxy_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($proxy_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
495
496
497
498
499
500
					}
				}
				if($proxy_directive_snippets_txt == '') $proxy_directive_snippets_txt = '------';
				$app->tpl->setVar("proxy_directive_snippets_txt", $proxy_directive_snippets_txt);
			}

Falko Timme's avatar
Falko Timme committed
501
502
			//* Admin: If the logged in user is admin
		} else {
503
504
		
			$is_admin = true;
Falko Timme's avatar
Falko Timme committed
505

506
507
508
509
			if($this->_vhostdomain_type == 'domain') {
				// The user is admin, so we fill in all IP addresses of the server
				if($this->id > 0) {
					if(!isset($this->dataRecord["server_id"])){
510
						$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->id);
511
512
513
514
515
						$this->dataRecord["server_id"] = $tmp["server_id"];
						unset($tmp);
					}
					$server_id = intval(@$this->dataRecord["server_id"]);
				} else {
Sergio's avatar
Sergio committed
516
517
518
519
520
521
522
					$settings = $app->getconf->get_global_config('sites');
					$server_id = intval($settings['default_webserver']);
					if (!$server_id) {
						// 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 = intval($tmp['server_id']);
					}
Falko Timme's avatar
Falko Timme committed
523
				}
524
525
526

				//* get global web config
				$web_config = $app->getconf->get_server_config($server_id, 'web');
Falko Timme's avatar
Falko Timme committed
527
			} else {
528
529
				//* get global web config
				$web_config = $app->getconf->get_server_config($parent_domain['server_id'], 'web');
Falko Timme's avatar
Falko Timme committed
530
			}
531

Falko Timme's avatar
Falko Timme committed
532
			//* Fill the IPv4 select field
533
534
			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND server_id = ?";
			$ips = $app->db->queryAllRecords($sql, $server_id);
535
			$ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
Falko Timme's avatar
Falko Timme committed
536
537
538
539
540
541
542
			//$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";
				}
			}
543
			$app->tpl->setVar("ip_address", $ip_select);
Falko Timme's avatar
Falko Timme committed
544
545
			unset($tmp);
			unset($ips);
546

Falko Timme's avatar
Falko Timme committed
547
			//* Fill the IPv6 select field
548
549
			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND server_id = ?";
			$ips = $app->db->queryAllRecords($sql, $server_id);
Falko Timme's avatar
Falko Timme committed
550
551
552
553
554
555
556
557
			$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";
				}
			}
558
			$app->tpl->setVar("ipv6_address", $ip_select);
Falko Timme's avatar
Falko Timme committed
559
560
			unset($tmp);
			unset($ips);
561

562
			if ($settings['use_domain_module'] != 'y') {
563
564
565
566
				if(!isset($this->dataRecord["sys_groupid"])){
					$tmp = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
					$this->dataRecord["sys_groupid"] = $tmp["sys_groupid"];
				}
567
568
569
570
571
572
573
574
575
576
577
578
579
580
				// Fill the client select field
				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id > 0 ORDER BY client.company_name, client.contact_name, sys_group.name";
				$clients = $app->db->queryAllRecords($sql);
				$client_select = "<option value='0'></option>";
				//$tmp_data_record = $app->tform->getDataRecord($this->id);
				if(is_array($clients)) {
					$selected_client_group_id = 0; // needed to get list of PHP versions
					foreach($clients as $client) {
						if(is_array($this->dataRecord) && ($client["groupid"] == $this->dataRecord['client_group_id'] || $client["groupid"] == $this->dataRecord['sys_groupid']) && !$selected_client_group_id) $selected_client_group_id = $client["groupid"];
						//$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':'';
						if($selected == 'SELECTED') $selected_client_group_id = $client["groupid"];
						$client_select .= "<option value='$client[groupid]' $selected>$client[contactname]</option>\r\n";
					}
581
				}
582
				$app->tpl->setVar("client_group_id", $client_select);
583
			}
584

Falko Timme's avatar
Falko Timme committed
585
586
587
588
			//PHP Version Selection (FastCGI)
			$server_type = 'apache';
			if(!empty($web_config['server_type'])) $server_type = $web_config['server_type'];
			if($server_type == 'nginx' && $this->dataRecord['php'] == 'fast-cgi') $this->dataRecord['php'] = 'php-fpm';
589
590
			$selected_client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $selected_client_group_id);
			$sql_where = " AND (client_id = 0 OR client_id = ?)";
591
			if($this->_vhostdomain_type == 'domain') {
592
				if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
593
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?".$sql_where, $server_id, $selected_client['client_id']);
594
595
				}
				if($this->dataRecord['php'] == 'fast-cgi') {
596
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ?".$sql_where, $server_id, $selected_client['client_id']);
597
598
				}
			} else {
599
				if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
600
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $parent_domain['server_id']);
601
602
				}
				if($this->dataRecord['php'] == 'fast-cgi') {
603
					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ?", $parent_domain['server_id']);
604
				}
Falko Timme's avatar
Falko Timme committed
605
606
607
608
			}
			$php_select = "<option value=''>Default</option>";
			if(is_array($php_records) && !empty($php_records)) {
				foreach( $php_records as $php_record) {
609
					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
Falko Timme's avatar
Falko Timme committed
610
611
612
613
614
615
616
617
						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
					} else {
						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
					}
					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
					$php_select .= "<option value='$php_version' $selected>".$php_record['name']."</option>\r\n";
				}
			}
618
			$app->tpl->setVar("fastcgi_php_version", $php_select);
Falko Timme's avatar
Falko Timme committed
619
			unset($php_records);
620
621
622

			foreach($read_limits as $limit) $app->tpl->setVar($limit, ($limit == 'force_suexec' ? 'n' : 'y'));

623
624
			// Directive Snippets
			$php_directive_snippets_txt = '';
625
			$php_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'php' AND active = 'y' AND master_directive_snippets_id > 0 ORDER BY name");
626
			if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
627
				$php_directive_snippets_txt .= $app->tform->wordbook["select_master_directive_snippet_txt"].'<br>';
628
				foreach($php_directive_snippets as $php_directive_snippet){
Marius Cramer's avatar
Marius Cramer committed
629
					$php_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $php_directive_snippet['snippet'] . PHP_EOL;
630
631
632
633
634
635
636
637
638
639
640
					$php_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$php_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($php_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
				}
				$php_directive_snippets_txt .= '<br><br>';
			}
			
			$php_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'php' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
			if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
				$php_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
				foreach($php_directive_snippets as $php_directive_snippet){
					$php_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $php_directive_snippet['snippet'] . PHP_EOL;
					$php_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$php_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($php_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
641
				}
642
643
			}
			if($php_directive_snippets_txt == '') $php_directive_snippets_txt = '------';
644
645
			$app->tpl->setVar("php_directive_snippets_txt", $php_directive_snippets_txt);

646
647
			if($server_type == 'apache'){
				$apache_directive_snippets_txt = '';
648
649
650
651
652
653
654
655
656
657
658
				$apache_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'apache' AND active = 'y' AND master_directive_snippets_id > 0 ORDER BY name");
				if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
					$apache_directive_snippets_txt .= $app->tform->wordbook["select_master_directive_snippet_txt"].'<br>';
					foreach($apache_directive_snippets as $apache_directive_snippet){
						$apache_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $apache_directive_snippet['snippet'] . PHP_EOL;
						$apache_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$apache_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($apache_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
					}
					$apache_directive_snippets_txt .= '<br><br>';
				}
				
				$apache_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'apache' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
659
				if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
660
					$apache_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
661
					foreach($apache_directive_snippets as $apache_directive_snippet){
Marius Cramer's avatar
Marius Cramer committed
662
						$apache_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $apache_directive_snippet['snippet'] . PHP_EOL;
663
						$apache_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$apache_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($apache_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
664
					}
665
666
				}
				if($apache_directive_snippets_txt == '') $apache_directive_snippets_txt = '------';
667
				$app->tpl->setVar("apache_directive_snippets_txt", $apache_directive_snippets_txt);
668
			}
669

670
			if($server_type == 'nginx'){
671
				$nginx_directive_snippets_txt = '';
672
673
674
675
676
677
678
679
680
681
682
				$nginx_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'nginx' AND active = 'y' AND master_directive_snippets_id > 0 ORDER BY name");
				if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
					$nginx_directive_snippets_txt .= $app->tform->wordbook["select_master_directive_snippet_txt"].'<br>';
					foreach($nginx_directive_snippets as $nginx_directive_snippet){
						$nginx_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $nginx_directive_snippet['snippet'] . PHP_EOL;
						$nginx_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$nginx_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($nginx_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
					}
					$nginx_directive_snippets_txt .= '<br><br>';
				}
				
				$nginx_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'nginx' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
683
				if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
684
					$nginx_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
685
					foreach($nginx_directive_snippets as $nginx_directive_snippet){
Marius Cramer's avatar
Marius Cramer committed
686
						$nginx_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $nginx_directive_snippet['snippet'] . PHP_EOL;
687
						$nginx_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$nginx_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($nginx_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
688
					}
689
690
				}
				if($nginx_directive_snippets_txt == '') $nginx_directive_snippets_txt = '------';
691
				$app->tpl->setVar("nginx_directive_snippets_txt", $nginx_directive_snippets_txt);
692
			}
693

694
			$proxy_directive_snippets_txt = '';
695
696
697
698
699
700
701
702
703
704
705
			$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y' AND master_directive_snippets_id > 0 ORDER BY name");
			if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
				$proxy_directive_snippets_txt .= $app->tform->wordbook["select_master_directive_snippet_txt"].'<br>';
				foreach($proxy_directive_snippets as $proxy_directive_snippet){
					$proxy_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $proxy_directive_snippet['snippet'] . PHP_EOL;
					$proxy_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$proxy_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($proxy_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
				}
				$proxy_directive_snippets_txt .= '<br><br>';
			}
			
			$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
706
			if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
707
				$proxy_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
708
				foreach($proxy_directive_snippets as $proxy_directive_snippet){
Marius Cramer's avatar
Marius Cramer committed
709
					$proxy_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $proxy_directive_snippet['snippet'] . PHP_EOL;
710
					$proxy_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$proxy_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($proxy_directive_snippet['snippet']).'</pre></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
711
				}
712
713
			}
			if($proxy_directive_snippets_txt == '') $proxy_directive_snippets_txt = '------';
714
			$app->tpl->setVar("proxy_directive_snippets_txt", $proxy_directive_snippets_txt);
Falko Timme's avatar
Falko Timme committed
715
716
717
		}

		$ssl_domain_select = '';
Marius Cramer's avatar
Marius Cramer committed
718
		$ssl_domains = array();
719
		$tmpd = $app->db->queryAllRecords("SELECT domain, type FROM web_domain WHERE domain_id = ? OR parent_domain_id = ?", $this->id, $this->id);
Marius Cramer's avatar
Marius Cramer committed
720
721
722
723
724
725
726
		foreach($tmpd as $tmp) {
			if($tmp['type'] == 'subdomain' || $tmp['type'] == 'vhostsubdomain') {
				$ssl_domains[] = $tmp["domain"];
			} else {
				$ssl_domains = array_merge($ssl_domains, array($tmp["domain"],'www.'.$tmp["domain"],'*.'.$tmp["domain"]));
			}
		}
Falko Timme's avatar
Falko Timme committed
727
728
729
		if(is_array($ssl_domains)) {
			foreach( $ssl_domains as $ssl_domain) {
				$selected = ($ssl_domain == $this->dataRecord['ssl_domain'])?'SELECTED':'';
Marius Cramer's avatar
Marius Cramer committed
730
				$ssl_domain_select .= "<option value='$ssl_domain' $selected>".$app->functions->idn_decode($ssl_domain)."</option>\r\n";
Falko Timme's avatar
Falko Timme committed
731
732
			}
		}
733
		$app->tpl->setVar("ssl_domain", $ssl_domain_select);
Falko Timme's avatar
Falko Timme committed
734
735
736
737
738
739
740
		unset($ssl_domain_select);
		unset($ssl_domains);
		unset($ssl_domain);

		if($this->id > 0) {
			//* we are editing a existing record
			$app->tpl->setVar("edit_disabled", 1);
741
			$app->tpl->setVar('fixed_folder', 'y');
742
743
744
745
			if($this->_vhostdomain_type == 'domain') {
				$app->tpl->setVar("server_id_value", $this->dataRecord["server_id"]);
				$app->tpl->setVar("document_root", $this->dataRecord["document_root"]);
			}
746
			else $app->tpl->setVar('server_id_value', $parent_domain['server_id']);
Falko Timme's avatar
Falko Timme committed
747
748
		} else {
			$app->tpl->setVar("edit_disabled", 0);
749
750
			$app->tpl->setVar('fixed_folder', 'n');
			if($this->_vhostdomain_type != 'domain') $app->tpl->setVar('server_id_value', $parent_domain['server_id']);
Falko Timme's avatar
Falko Timme committed
751
752
753
754
755
756
757
758
759
760
761
762
763
		}

		$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);

		/*
		 * Now we have to check, if we should use the domain-module to select the domain
		 * or not
		 */
		if ($settings['use_domain_module'] == 'y') {
			/*
			 * The domain-module is in use.
			*/
764
			$domains = $app->tools_sites->getDomainModuleDomains($this->_vhostdomain_type == 'subdomain' ? null : "web_domain", $this->dataRecord["domain"]);
Falko Timme's avatar
Falko Timme committed
765
			$domain_select = '';
766
			$selected_domain = '';
Falko Timme's avatar
Falko Timme committed
767
768
769
			if(is_array($domains) && sizeof($domains) > 0) {
				/* We have domains in the list, so create the drop-down-list */
				foreach( $domains as $domain) {
770
					$domain_select .= "<option value=" . $domain['domain_id'] ;
771
772
773
774
775
776
					if ($this->_vhostdomain_type == 'subdomain' && '.' . $domain['domain'] == substr($this->dataRecord["domain"], -strlen($domain['domain']) - 1)) {
						$domain_select .= " selected";
						$selected_domain = $domain['domain'];
					} elseif($this->_vhostdomain_type == 'aliasdomain' && $domain['domain'] == $this->dataRecord["domain"]) {
						$domain_select .= " selected";
					} elseif($this->_vhostdomain_type == 'domain' && $domain['domain'] == $this->dataRecord["domain"]) {
Falko Timme's avatar
Falko Timme committed
777
778
						$domain_select .= " selected";
					}
779
					$domain_select .= ">" . $app->functions->idn_decode($domain['domain']) . "</option>\r\n";
Falko Timme's avatar
Falko Timme committed
780
781
782
783
784
785
786
787
788
789
				}
			}
			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!
				*/
				$domain_select .= "<option value=''></option>\r\n";
			}
790
			$app->tpl->setVar("domain_option", $domain_select);
Marius Cramer's avatar
Marius Cramer committed
791
792
793
794
		} else {

			// remove the parent domain part of the domain name before we show it in the text field.
			if($this->dataRecord["type"] == 'vhostsubdomain') $this->dataRecord["domain"] = str_replace('.'.$parent_domain["domain"], '', $this->dataRecord["domain"]);
Falko Timme's avatar
Falko Timme committed
795
		}
796
		if($this->_vhostdomain_type != 'domain') $app->tpl->setVar("domain", $this->dataRecord["domain"]);
797

798
799
		// check for configuration errors in sys_datalog
		if($this->id > 0) {
800
			$datalog = $app->db->queryOneRecord("SELECT sys_datalog.error, sys_log.tstamp FROM sys_datalog, sys_log WHERE sys_datalog.dbtable = 'web_domain' AND sys_datalog.dbidx = ? AND sys_datalog.datalog_id = sys_log.datalog_id AND sys_log.message = CONCAT('Processed datalog_id ',sys_log.datalog_id) ORDER BY sys_datalog.tstamp DESC", 'domain_id:' . $this->id);
801
802
			if(is_array($datalog) && !empty($datalog)){
				if(trim($datalog['error']) != ''){
803
804
					$app->tpl->setVar("config_error_msg", nl2br(htmlentities($datalog['error'])));
					$app->tpl->setVar("config_error_tstamp", date($app->lng('conf_format_datetime'), $datalog['tstamp']));
805
806
807
				}
			}
		}
808
809
		
		$app->tpl->setVar('vhostdomain_type', $this->_vhostdomain_type);
Falko Timme's avatar
Falko Timme committed
810

811
		$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
812
813
814
815
816
817
818
819
		$app->tpl->setVar("is_admin", $is_admin);
		
		if($this->id > 0) {
			$tmp_web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", intval($this->id));
			$tmp_sys_group = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE groupid = ?", intval($tmp_web['sys_groupid']));
			if(intval($tmp_sys_group['client_id']) > 0) $tmp_client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", intval($tmp_sys_group['client_id']));
			if(is_array($tmp_client) && !empty($tmp_client) && trim($this->dataRecord['ssl_organisation']) == '' && trim($this->dataRecord['ssl_locality']) == '' && trim($this->dataRecord['ssl_state']) == '' && trim($this->dataRecord['ssl_organisation_unit']) == '') $app->tpl->setVar("show_helper_links", true);
		}
820

Marius Cramer's avatar
Marius Cramer committed
821
822
823
824
		$sys_config = $app->getconf->get_global_config('misc');
		if($sys_config['use_combobox'] == 'y') {
			$app->tpl->setVar('use_combobox', 'y');
		}
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
		
		$directive_snippets_id_select = '<option value="0"'.($this->dataRecord['directive_snippets_id'] == 0? ' selected="selected"' : '').'>-</option>';
		$server_type = $app->getconf->get_server_config($server_id, 'web');
		$server_type = $server_type['server_type'];
		
		$m_directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND master_directive_snippets_id > 0 AND type = ? ORDER BY name ASC", $server_type);
		if(is_array($m_directive_snippets) && !empty($m_directive_snippets)){
			$directive_snippets_id_select .= '<optgroup label="'.$app->tform->wordbook["select_master_directive_snippet_txt"].'">';
			foreach($m_directive_snippets as $m_directive_snippet){
				$directive_snippets_id_select .= '<option value="'.$m_directive_snippet['directive_snippets_id'].'"'.($this->dataRecord['directive_snippets_id'] == $m_directive_snippet['directive_snippets_id']? ' selected="selected"' : '').'>'.$m_directive_snippet['name'].'</option>';
			}
			$directive_snippets_id_select .= '</optgroup>';
		}
		
		$directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
		if(is_array($directive_snippets) && !empty($directive_snippets)){
			$directive_snippets_id_select .= '<optgroup label="'.$app->tform->wordbook["select_directive_snippet_txt"].'">';
			foreach($directive_snippets as $directive_snippet){
				$directive_snippets_id_select .= '<option value="'.$directive_snippet['directive_snippets_id'].'"'.($this->dataRecord['directive_snippets_id'] == $directive_snippet['directive_snippets_id']? ' selected="selected"' : '').'>'.$directive_snippet['name'].'</option>';
			}
			$directive_snippets_id_select .= '</optgroup>';
		}
		$app->tpl->setVar("directive_snippets_id", $directive_snippets_id_select);
		
		// folder_directive_snippets
		if(isset($_POST['folder_directive_snippets']) && !isset($this->dataRecord['folder_directive_snippets'])){
			$this->dataRecord['folder_directive_snippets'] = '';
			if(is_array($_POST['folder_directive_snippets']) && !empty($_POST['folder_directive_snippets'])){
				foreach($_POST['folder_directive_snippets'] as $folder_directive_snippet){
					if(trim($folder_directive_snippet['folder']) != '' && intval($folder_directive_snippet['snippets_id']) > 0) $this->dataRecord['folder_directive_snippets'] .= trim($folder_directive_snippet['folder']).':'.intval($folder_directive_snippet['snippets_id'])."\n";
				}
			}
			$this->dataRecord['folder_directive_snippets'] = trim($this->dataRecord['folder_directive_snippets']);
		}
		
		$master_directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND snippet LIKE '%{FOLDER}%' AND master_directive_snippets_id > 0 AND type = ? ORDER BY name ASC", $server_type);
		$c_directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND snippet LIKE '%{FOLDER}%' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
		
		$folder_directive_snippets = array();
		$this->dataRecord['folder_directive_snippets'] = str_replace("\r\n", "\n", $this->dataRecord['folder_directive_snippets']);
		$this->dataRecord['folder_directive_snippets'] = str_replace("\r", "\n", $this->dataRecord['folder_directive_snippets']);
		$folder_directive_snippets_lines = explode("\n", trim($this->dataRecord['folder_directive_snippets']));
		for($i=0;$i<sizeof($folder_directive_snippets_lines)+50;$i++){
			$folder_directive_snippets[$i]['folder_directive_snippets_index'] = $i;
			$folder_directive_snippets[$i]['folder_directive_snippets_index_plus_1'] = $i + 1;
			if($i > sizeof($folder_directive_snippets_lines)){
				$folder_directive_snippets[$i]['folder_directive_snippets_css'] = 'hidden';
			} else {
				$folder_directive_snippets[$i]['folder_directive_snippets_css'] = '';
			}
			if(trim($folder_directive_snippets_lines[$i]) != ''){
				list($folder_directive_snippets[$i]['folder_directive_snippets_folder'], $selected_snippet) = explode(':', trim($folder_directive_snippets_lines[$i]));
				$folder_directive_snippets[$i]['folder_directive_snippets_id'] = '<option value="0">-</option>';
				if(is_array($master_directive_snippets) && !empty($master_directive_snippets)){
					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<optgroup label="'.$app->tform->wordbook["select_master_directive_snippet_txt"].'">';
					foreach($master_directive_snippets as $master_directive_snippet){
						$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<option value="'.$master_directive_snippet['directive_snippets_id'].'"'.($master_directive_snippet['directive_snippets_id'] == $selected_snippet ? ' selected="selected"' : '').'>'.$master_directive_snippet['name'].'</option>';
					}
					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '</optgroup>';
				}
				
				if(is_array($c_directive_snippets) && !empty($c_directive_snippets)){
					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<optgroup label="'.$app->tform->wordbook["select_directive_snippet_txt"].'">';
					foreach($c_directive_snippets as $c_directive_snippet){
						$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<option value="'.$c_directive_snippet['directive_snippets_id'].'"'.($c_directive_snippet['directive_snippets_id'] == $selected_snippet? ' selected="selected"' : '').'>'.$c_directive_snippet['name'].'</option>';
					}
					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '</optgroup>';
				}
			} else {
				$folder_directive_snippets[$i]['folder_directive_snippets_folder'] = '';
				$folder_directive_snippets[$i]['folder_directive_snippets_id'] = '<option value="0">-</option>';
				if(is_array($master_directive_snippets) && !empty($master_directive_snippets)){
					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<optgroup label="'.$app->tform->wordbook["select_master_directive_snippet_txt"].'">';
					foreach($master_directive_snippets as $master_directive_snippet){
						$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<option value="'.$master_directive_snippet['directive_snippets_id'].'">'.$master_directive_snippet['name'].'</option>';
					}
					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '</optgroup>';
				}
				
				if(is_array($c_directive_snippets) && !empty($c_directive_snippets)){
					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<optgroup label="'.$app->tform->wordbook["select_directive_snippet_txt"].'">';
					foreach($c_directive_snippets as $c_directive_snippet){
						$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<option value="'.$c_directive_snippet['directive_snippets_id'].'">'.$c_directive_snippet['name'].'</option>';
					}
					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '</optgroup>';
				}
			}
		}
		$app->tpl->setLoop('folder_directive_snippets', $folder_directive_snippets);

Falko Timme's avatar
Falko Timme committed
915
916
		parent::onShowEnd();
	}
917
918
919
920
921
922

	function onShowEdit() {
		global $app;
		if($app->tform->checkPerm($this->id, 'riud')) $app->tform->formDef['tabs']['domain']['readonly'] = false;
		parent::onShowEdit();
	}
Falko Timme's avatar
Falko Timme committed
923
924
925
926

	function onSubmit() {
		global $app, $conf;

927
928
929
930
931
932
933
934
		// Set a few fixed values
		$this->dataRecord["vhost_type"] = 'name';
		if($this->_vhostdomain_type == 'domain') {
			$this->dataRecord["parent_domain_id"] = 0;
			$this->dataRecord["type"] = 'vhost';
		} else {
			// Get the record of the parent domain
			if(!@$this->dataRecord["parent_domain_id"] && $this->id) {
935
				$tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ?", $this->id);
936
937
938
939
				if($tmp) $this->dataRecord["parent_domain_id"] = $tmp['parent_domain_id'];
				unset($tmp);
			}

940
			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
			if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");

			if($this->_vhostdomain_type == 'subdomain') {
				$this->dataRecord["type"] = 'vhostsubdomain';
			} else {
				$this->dataRecord["type"] = 'vhostalias';
			}
			$this->dataRecord["server_id"] = $parent_domain["server_id"];
			$this->dataRecord["ip_address"] = $parent_domain["ip_address"];
			$this->dataRecord["ipv6_address"] = $parent_domain["ipv6_address"];
			$this->dataRecord["client_group_id"] = $parent_domain["client_group_id"];

			$this->parent_domain_record = $parent_domain;
		}

Marius Burkard's avatar
Marius Burkard committed
956
		$read_limits = array('limit_cgi', 'limit_ssi', 'limit_perl', 'limit_ruby', 'limit_python', 'force_suexec', 'limit_hterror', 'limit_wildcard', 'limit_ssl', 'limit_ssl_letsencrypt', 'limit_directive_snippets');
957

958
		/* check if the domain module is used - and check if the selected domain can be used! */
959
		if($app->tform->getCurrentTab() == 'domain') {
960
961
962
963
964
965
966
967
			if($this->_vhostdomain_type == 'subdomain') {
				// Check that domain (the subdomain part) is not empty
				if(!preg_match('/^[a-zA-Z0-9].*/',$this->dataRecord['domain'])) {
					$app->tform->errorMessage .= $app->tform->lng("subdomain_error_empty")."<br />";
				}
			}
			
			/* check if the domain module is used - and check if the selected domain can be used! */
968
969
970
			$app->uses('ini_parser,getconf');
			$settings = $app->getconf->get_global_config('domains');
			if ($settings['use_domain_module'] == 'y') {
971
972
				if($this->_vhostdomain_type == 'subdomain') $domain_check = $app->tools_sites->checkDomainModuleDomain($this->dataRecord['sel_domain']);
				else $domain_check = $app->tools_sites->checkDomainModuleDomain($this->dataRecord['domain']);
973
974
975
976
				if(!$domain_check) {
					// invalid domain selected
					$app->tform->errorMessage .= $app->tform->lng("domain_error_empty")."<br />";
				} else {
977
978
979
980
					if ($this->_vhostdomain_type == 'domain' &&
							($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid']))) {
						$this->dataRecord['client_group_id'] = $app->tools_sites->getClientIdForDomain($this->dataRecord['domain']);
					}
981
982
					if($this->_vhostdomain_type == 'subdomain') $this->dataRecord['domain'] = $this->dataRecord['domain'] . '.' . $domain_check;
					else $this->dataRecord['domain'] = $domain_check;
983
				}
984
985
			} else {
				if($this->_vhostdomain_type == 'subdomain') $this->dataRecord["domain"] = $this->dataRecord["domain"].'.'.$parent_domain["domain"];