dns_slave_edit.php 12 KB
Newer Older
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
35
36
37
38
39
40
<?php

/*
Copyright (c) 2007, 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
******************************************/

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

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

41
42
require_once '../../lib/config.inc.php';
require_once '../../lib/app.inc.php';
43
44
45
46
47
48
49
50
51

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

// Loading classes
$app->uses('tpl,tform,tform_actions,validate_dns');
$app->load('tform_actions');

class page_action extends tform_actions {
52

53
54
	function onShowNew() {
		global $app, $conf;
55

56
57
58
59
60
61
62
63
64
		// we will check only users, not admins
		if($_SESSION["s"]["user"]["typ"] == 'user') {
			if(!$app->tform->checkClientLimit('limit_dns_slave_zone')) {
				$app->error($app->tform->wordbook["limit_dns_slave_zone_txt"]);
			}
			if(!$app->tform->checkResellerLimit('limit_dns_slave_zone')) {
				$app->error('Reseller: '.$app->tform->wordbook["limit_dns_slave_zone_txt"]);
			}
		}
65

66
67
		parent::onShowNew();
	}
68

69
70
	function onShowEnd() {
		global $app, $conf;
71

72
73
74
		// If user is admin, we will allow him to select to whom this record belongs
		if($_SESSION["s"]["user"]["typ"] == 'admin') {
			// Getting Domains of the user
75
			$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";
76
77
78
			$clients = $app->db->queryAllRecords($sql);
			$client_select = '';
			if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= "<option value='0'></option>";
79
			//$tmp_data_record = $app->tform->getDataRecord($this->id);
80
81
			if(is_array($clients)) {
				foreach( $clients as $client) {
82
					$selected = @(is_array($this->dataRecord) && ($client["groupid"] == $this->dataRecord['client_group_id'] || $client["groupid"] == $this->dataRecord['sys_groupid']))?'SELECTED':'';
83
					$client_select .= "<option value='$client[groupid]' $selected>$client[contactname]</option>\r\n";
84
85
				}
			}
86
			$app->tpl->setVar("client_group_id", $client_select);
87
		} else if($app->auth->has_clients($_SESSION['s']['user']['userid'])) {
88
89

				// Get the limits of the client
90
				$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
91
92
93
				$client = $app->db->queryOneRecord("SELECT client.client_id, sys_group.name, 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 FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");

				// Fill the client select field
94
				$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 = ".$client['client_id']." ORDER BY client.company_name, client.contact_name, sys_group.name";
95
96
97
98
99
100
101
102
103
				$clients = $app->db->queryAllRecords($sql);
				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
				$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
				//$tmp_data_record = $app->tform->getDataRecord($this->id);
				if(is_array($clients)) {
					foreach( $clients as $client) {
						$selected = @(is_array($this->dataRecord) && ($client["groupid"] == $this->dataRecord['client_group_id'] || $client["groupid"] == $this->dataRecord['sys_groupid']))?'SELECTED':'';
						$client_select .= "<option value='$client[groupid]' $selected>$client[contactname]</option>\r\n";
					}
104
				}
105
106
				$app->tpl->setVar("client_group_id", $client_select);

107
			}
108

109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
		/*
		 * 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');
		if ($settings['use_domain_module'] == 'y') {
			/*
			 * The domain-module is in use.
			*/
			$domains = $app->tools_sites->getDomainModuleDomains();
			$domain_select = '';
			if(is_array($domains) && sizeof($domains) > 0) {
				/* We have domains in the list, so create the drop-down-list */
				foreach( $domains as $domain) {
					$domain_select .= "<option value=" . $domain['domain_id'] ;
					if ($domain['domain'].'.' == $this->dataRecord["origin"]) {
						$domain_select .= " selected";
					}
					$domain_select .= ">" . $app->functions->idn_decode($domain['domain']) . ".</option>\r\n";
				}
			}
			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";
			}
			$app->tpl->setVar("domain_option", $domain_select);
		}

142
143
144
145
146
147
148
		if($this->id > 0) {
			//* we are editing a existing record
			$app->tpl->setVar("edit_disabled", 1);
			$app->tpl->setVar("server_id_value", $this->dataRecord["server_id"]);
		} else {
			$app->tpl->setVar("edit_disabled", 0);
		}
149

150
151
		parent::onShowEnd();
	}
152

153
154
	function onSubmit() {
		global $app, $conf;
155

156
157
158
159
160
161
162
163
164
165
166
167
168
		/* check if the domain module is used - and check if the selected domain can be used! */
		$app->uses('ini_parser,getconf');
		$settings = $app->getconf->get_global_config('domains');
		if ($settings['use_domain_module'] == 'y') {
			$domain_check = $app->tools_sites->checkDomainModuleDomain($this->dataRecord['origin']);
			if(!$domain_check) {
				// invalid domain selected
				$app->tform->errorMessage .= $app->tform->lng("origin_error_empty")."<br />";
			} else {
				$this->dataRecord['origin'] = $domain_check.'.';
			}
		}

169
170
		if($_SESSION["s"]["user"]["typ"] != 'admin') {
			// Get the limits of the client
171
			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
172
			$client = $app->db->queryOneRecord("SELECT limit_dns_slave_zone, default_slave_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
173

174
175
176
			// When the record is updated
			if($this->id > 0) {
				// restore the server ID if the user is not admin and record is edited
177
				$tmp = $app->db->queryOneRecord("SELECT server_id FROM dns_slave WHERE id = ".$app->functions->intval($this->id));
178
179
				$this->dataRecord["server_id"] = $tmp["server_id"];
				unset($tmp);
180
				// When the record is inserted
181
182
			} else {
				// set the server ID to the default dnsserver of the client
183
				$this->dataRecord["server_id"] = $client["default_slave_dnsserver"];
184

185
				// Check if the user may add anoter secondary domain.
186
187
188
189
190
				if(!$app->tform->checkClientLimit('limit_dns_slave_zone')) {
					$app->error($app->tform->wordbook["limit_dns_slave_zone_txt"]);
				}
				if(!$app->tform->checkResellerLimit('limit_dns_slave_zone')) {
					$app->error('Reseller: '.$app->tform->wordbook["limit_dns_slave_zone_txt"]);
191
192
193
				}
			}
		}
194

195
		//* Check if the zone name has a dot at the end
196
197
198
		if(strlen($this->dataRecord["origin"]) > 0 && substr($this->dataRecord["origin"], -1, 1) != '.') $this->dataRecord["origin"] .= '.';

		//* Check if a primary zone with the same name already exists
199
		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_soa WHERE origin = \"".$app->db->quote($this->dataRecord["origin"])."\" AND server_id= \"".$app->db->quote($this->dataRecord["server_id"])."\"");
200
		if($tmp["number"] > 0) {
201
			$app->error($app->tform->wordbook["origin_error_unique"]);
202
203
204
205
		}

		parent::onSubmit();
	}
206

207
208
	function onInsert() {
		global $app, $conf;
209

210
		// Check if record is existing already
211
		$duplicate_slave = $app->db->queryOneRecord("SELECT * FROM dns_slave WHERE origin = '".$app->db->quote($this->dataRecord["origin"])."' AND server_id = ".$app->functions->intval($this->dataRecord["server_id"])." AND ".$app->tform->getAuthSQL('r'));
212

213
		if(is_array($duplicate_slave) && !empty($duplicate_slave)) $app->error($app->tform->wordbook["origin_error_unique"]);
214

215
216
		parent::onInsert();
	}
217

218
219
	function onAfterInsert() {
		global $app, $conf;
220

221
222
		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
223
			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
224
225
226
			$app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$this->id);
		}
		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
227
			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
228
229
230
231
			$app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$this->id);
		}

	}
232

233
234
	function onAfterUpdate() {
		global $app, $conf;
235
236

		$tmp = $app->db->diffrec($this->oldDataRecord, $app->tform->getDataRecord($this->id));
237
238
239

		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
240
			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
241
242
243
			$app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$this->id);
		}
		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
244
			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
245
246
			$app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$this->id);
		}
247

248
249
		//** When the client group has changed, change also the owner of the record if the owner is not the admin user
		if($this->oldDataRecord["client_group_id"] != $this->dataRecord["client_group_id"] && $this->dataRecord["sys_userid"] != 1) {
250
			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
251
252
253
254
255
			$tmp = $app->db->queryOneREcord("SELECT userid FROM sys_user WHERE default_group = ".$client_group_id);
			if($tmp["userid"] > 0) {
				$app->db->query("UPDATE dns_slave SET sys_userid = ".$tmp["userid"]." WHERE id = ".$this->id);
			}
		}
256

257
	}
258

259
260
261
262
263
264
}

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

?>