From 0e2978ef48e7877ee46aa4a9e52e86b8f76c9733 Mon Sep 17 00:00:00 2001
From: Dominik Müller <info@profi-webdesign.net>
Date: Sat, 18 Jan 2014 23:34:06 -0500
Subject: [PATCH] Mailbox quota can now be included into website quota (FS#3297) -------------------------------------------------------------- Feature can be activated over admin mailserver settings. when activated websites uid is used instead of standard vmail-uid. this only takes effect if web and mailserver are on the same server, otherwise it will be old behaviour. switching this setting when mailboxes exist doesn't matter. Mailboxfolder will be created with website uid for this. access of postfix and dovecot now works over mysql-table mail_user. virtual_uid_maps is changed from static to mysql-table. for dovecot<->postfix communication protocoll is changed vrom lda to lmtp. disablelmtp-column is added to mail_user-table. uid and gid can be overwritten by remoting. ONE OPEN ISSUE: since remoting has completly changed and mail_user_add function is missing at the moment, this function now was inclulded again. it is important to add the both new lines to the future function and then remove this new one.

---
 interface/web/sites/database_edit.php |  350 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 234 insertions(+), 116 deletions(-)

diff --git a/interface/web/sites/database_edit.php b/interface/web/sites/database_edit.php
index 485fb80..139c971 100644
--- a/interface/web/sites/database_edit.php
+++ b/interface/web/sites/database_edit.php
@@ -38,9 +38,8 @@
 * End Form configuration
 ******************************************/
 
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-require_once('tools.inc.php');
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
 
 //* Check permissions for module
 $app->auth->check_module_permissions('sites');
@@ -56,17 +55,11 @@
 
 		// we will check only users, not admins
 		if($_SESSION["s"]["user"]["typ"] == 'user') {
-
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT limit_database FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another database.
-			if($client["limit_database"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(database_id) as number FROM web_database WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_database"]) {
-					$app->error($app->tform->wordbook["limit_database_txt"]);
-				}
+			if(!$app->tform->checkClientLimit('limit_database')) {
+				$app->error($app->tform->wordbook["limit_database_txt"]);
+			}
+			if(!$app->tform->checkResellerLimit('limit_database')) {
+				$app->error('Reseller: '.$app->tform->wordbook["limit_database_txt"]);
 			}
 		}
 
@@ -80,35 +73,47 @@
 
 			// Get the limits of the client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT default_dbserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT db_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
 
 			// Set the webserver to the default server of the client
-			$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = $client[default_dbserver]");
-			$app->tpl->setVar("server_id","<option value='$client[default_dbserver]'>$tmp[server_name]</option>");
+			$tmp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE server_id IN ($client[db_servers])");
+
+			$only_one_server = count($tmp) === 1;
+			$app->tpl->setVar('only_one_server', $only_one_server);
+
+			if ($only_one_server) {
+				$app->tpl->setVar('server_id_value', $tmp[0]['server_id']);
+			}
+
+			foreach ($tmp as $db_server) {
+				$options_db_servers .= "<option value='$db_server[server_id]'>$db_server[server_name]</option>";
+			}
+
+			$app->tpl->setVar("server_id", $options_db_servers);
 			unset($tmp);
 
 		} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 
 			// Get the limits of the client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT client_id, default_dbserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT client.client_id, limit_web_domain, db_servers, contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
 
 			// Set the webserver to the default server of the client
-			$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = $client[default_dbserver]");
-			$app->tpl->setVar("server_id","<option value='$client[default_dbserver]'>$tmp[server_name]</option>");
-			unset($tmp);
+			$tmp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE server_id IN ($client[db_servers])");
 
-			// Fill the client select field
-			$sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.parent_client_id AND client.parent_client_id = ".$client['client_id'];
-			$clients = $app->db->queryAllRecords($sql);
-			$client_select = '';
-			if(is_array($clients)) {
-				foreach( $clients as $client) {
-					$selected = @($client["groupid"] == $this->dataRecord["sys_groupid"])?'SELECTED':'';
-					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
-				}
+			$only_one_server = count($tmp) === 1;
+			$app->tpl->setVar('only_one_server', $only_one_server);
+
+			if ($only_one_server) {
+				$app->tpl->setVar('server_id_value', $tmp[0]['server_id']);
 			}
-			$app->tpl->setVar("client_group_id",$client_select);
+
+			foreach ($tmp as $db_server) {
+				$options_db_servers .= "<option value='$db_server[server_id]'>$db_server[server_name]</option>";
+			}
+
+			$app->tpl->setVar("server_id", $options_db_servers);
+			unset($tmp);
 
 		} else {
 
@@ -121,57 +126,32 @@
 				$server_id = $tmp['server_id'];
 			}
 
-			$sql = "SELECT ip_address FROM server_ip WHERE 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["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);
-
-			// Fill the client select field
-			$sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0";
-			$clients = $app->db->queryAllRecords($sql);
-			$client_select = "<option value='0'></option>";
-			if(is_array($clients)) {
-				foreach( $clients as $client) {
-					$selected = @($client["groupid"] == $this->dataRecord["sys_groupid"])?'SELECTED':'';
-					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
-				}
-			}
-			$app->tpl->setVar("client_group_id",$client_select);
-
 		}
 
 		/*
 		 * If the names are restricted -> remove the restriction, so that the
 		 * data can be edited
 		 */
-		
+
 		//* Get the database name and database user prefix
-		$app->uses('getconf');
+		$app->uses('getconf,tools_sites');
 		$global_config = $app->getconf->get_global_config('sites');
-		$dbname_prefix = replacePrefix($global_config['dbname_prefix'], $this->dataRecord);
-		$dbuser_prefix = replacePrefix($global_config['dbuser_prefix'], $this->dataRecord);
-		
+		$dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $this->dataRecord);
+
 		if ($this->dataRecord['database_name'] != ""){
 			/* REMOVE the restriction */
-			$app->tpl->setVar("database_name", str_replace($dbname_prefix , '', $this->dataRecord['database_name']));
-			$app->tpl->setVar("database_user", str_replace($dbuser_prefix , '', $this->dataRecord['database_user']));
+			$app->tpl->setVar("database_name", $app->tools_sites->removePrefix($this->dataRecord['database_name'], $this->dataRecord['database_name_prefix'], $dbname_prefix));
 		}
-		
-		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-			$app->tpl->setVar("database_name_prefix", $global_config['dbname_prefix']);
-			$app->tpl->setVar("database_user_prefix", $global_config['dbuser_prefix']);
+
+		$app->tpl->setVar("database_name_prefix", $app->tools_sites->getPrefix($this->dataRecord['database_name_prefix'], $dbname_prefix, $global_config['dbname_prefix']));
+
+		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"]);
+			$app->tpl->setVar("database_charset_value", $this->dataRecord["database_charset"]);
 		} else {
-			$app->tpl->setVar("database_name_prefix", $dbname_prefix);
-			$app->tpl->setVar("database_user_prefix", $dbuser_prefix);
+			$app->tpl->setVar("edit_disabled", 0);
 		}
 
 		parent::onShowEnd();
@@ -180,22 +160,28 @@
 	function onSubmit() {
 		global $app, $conf;
 
+		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+		if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
+
 		if($_SESSION["s"]["user"]["typ"] != 'admin') {
 			// Get the limits of the client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT default_dbserver, limit_database FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT db_servers, limit_database FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
 
 			// 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_database WHERE database_id = ".intval($this->id));
+				$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_database WHERE database_id = ".$app->functions->intval($this->id));
 				$this->dataRecord["server_id"] = $tmp["server_id"];
 				unset($tmp);
 				// When the record is inserted
 			} else {
-				// set the server ID to the default dbserver of the client
-				$this->dataRecord["server_id"] = $client["default_dbserver"];
+				$client['db_servers_ids'] = explode(',', $client['db_servers']);
 
+				// Check if chosen server is in authorized servers for this client
+				if (!(is_array($client['db_servers_ids']) && in_array($this->dataRecord["server_id"], $client['db_servers_ids'])) && $_SESSION["s"]["user"]["typ"] != 'admin') {
+					$app->error($app->tform->wordbook['error_not_allowed_server_id']);
+				}
 
 				// Check if the user may add another database
 				if($client["limit_database"] >= 0) {
@@ -206,9 +192,21 @@
 				}
 
 			}
-
-			// 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"]);
+		} else {
+			// check if client of database parent domain is client of db user!
+			$web_group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = '".$app->functions->intval($this->dataRecord['parent_domain_id'])."'");
+			if($this->dataRecord['database_user_id']) {
+				$group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_database_user WHERE database_user_id = '".$app->functions->intval($this->dataRecord['database_user_id'])."'");
+				if($group['sys_groupid'] != $web_group['sys_groupid']) {
+					$app->error($app->tform->wordbook['database_client_differs_txt']);
+				}
+			}
+			if($this->dataRecord['database_ro_user_id']) {
+				$group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_database_user WHERE database_user_id = '".$app->functions->intval($this->dataRecord['database_ro_user_id'])."'");
+				if($group['sys_groupid'] != $web_group['sys_groupid']) {
+					$app->error($app->tform->wordbook['database_client_differs_txt']);
+				}
+			}
 		}
 
 
@@ -218,29 +216,32 @@
 	function onBeforeUpdate() {
 		global $app, $conf, $interfaceConf;
 
-		/*
-		* If the names should be restricted -> do it!
-		*/
-		
-		
+		//* Site shall not be empty
+		if($this->dataRecord['parent_domain_id'] == 0) $app->tform->errorMessage .= $app->tform->lng("database_site_error_empty").'<br />';
+
 		//* Get the database name and database user prefix
-		$app->uses('getconf');
+		$app->uses('getconf,tools_sites');
 		$global_config = $app->getconf->get_global_config('sites');
-		$dbname_prefix = replacePrefix($global_config['dbname_prefix'], $this->dataRecord);
-		$dbuser_prefix = replacePrefix($global_config['dbuser_prefix'], $this->dataRecord);
+		$dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $this->dataRecord);
 
 		//* Prevent that the database name and charset is changed
 		$old_record = $app->tform->getDataRecord($this->id);
+		$dbname_prefix = $app->tools_sites->getPrefix($old_record['database_name_prefix'], $dbname_prefix);
+		$this->dataRecord['database_name_prefix'] = $dbname_prefix;
+
 		if($old_record["database_name"] != $dbname_prefix . $this->dataRecord["database_name"]) {
 			$app->tform->errorMessage .= $app->tform->wordbook["database_name_change_txt"].'<br />';
 		}
 		if($old_record["database_charset"] != $this->dataRecord["database_charset"]) {
 			$app->tform->errorMessage .= $app->tform->wordbook["database_charset_change_txt"].'<br />';
 		}
-		
+
+		if(!$this->dataRecord['database_user_id']) {
+			$app->tform->errorMessage .= $app->tform->wordbook["database_user_missing_txt"].'<br />';
+		}
+
 		//* Database username and database name shall not be empty
 		if($this->dataRecord['database_name'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_name_error_empty"].'<br />';
-		if($this->dataRecord['database_user'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_user_error_empty"].'<br />';
 
 		//* 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
@@ -253,64 +254,181 @@
 		}
 		unset($old_record);
 
+		if(strlen($dbname_prefix . $this->dataRecord['database_name']) > 64) $app->tform->errorMessage .= str_replace('{db}', $dbname_prefix . $this->dataRecord['database_name'], $app->tform->wordbook["database_name_error_len"]).'<br />';
+
+		//* Check database name and user against blacklist
+		$dbname_blacklist = array($conf['db_database'], 'mysql');
+		if(in_array($dbname_prefix . $this->dataRecord['database_name'], $dbname_blacklist)) {
+			$app->tform->errorMessage .= $app->lng('Database name not allowed.').'<br />';
+		}
+
 		if ($app->tform->errorMessage == ''){
 			/* restrict the names if there is no error */
-            /* crop user and db names if they are too long -> mysql: user: 16 chars / db: 64 chars */
+			/* crop user and db names if they are too long -> mysql: user: 16 chars / db: 64 chars */
 			$this->dataRecord['database_name'] = substr($dbname_prefix . $this->dataRecord['database_name'], 0, 64);
-			$this->dataRecord['database_user'] = substr($dbuser_prefix . $this->dataRecord['database_user'], 0, 16);
 		}
+
+		//* Check for duplicates
+		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as dbnum FROM web_database WHERE database_name = '".$app->db->quote($this->dataRecord['database_name'])."' AND server_id = '".$app->functions->intval($this->dataRecord["server_id"])."' AND database_id != '".$this->id."'");
+		if($tmp['dbnum'] > 0) $app->tform->errorMessage .= $app->lng('database_name_error_unique').'<br />';
+
+		// get the web server ip (parent domain)
+		$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = '".$app->functions->intval($this->dataRecord['parent_domain_id'])."'");
+		if($tmp['server_id'] && $tmp['server_id'] != $this->dataRecord['server_id']) {
+			// we need remote access rights for this server, so get it's ip address
+			$server_config = $app->getconf->get_server_config($tmp['server_id'], 'server');
+			if($server_config['ip_address']!='') {
+				/*
+                if($this->dataRecord['remote_access'] != 'y') $this->dataRecord['remote_ips'] = '';
+                $this->dataRecord['remote_access'] = 'y';
+                if(preg_match('/(^|,)' . preg_quote($server_config['ip_address'], '/') . '(,|$)/', $this->dataRecord['remote_ips']) == false) {
+                    $this->dataRecord['remote_ips'] .= ($this->dataRecord['remote_ips'] != '' ? ',' : '') . $server_config['ip_address'];
+                }
+				*/
+
+				if($this->dataRecord['remote_access'] != 'y'){
+					$this->dataRecord['remote_ips'] = $server_config['ip_address'];
+					$this->dataRecord['remote_access'] = 'y';
+				} else {
+					if($this->dataRecord['remote_ips'] != ''){
+						if(preg_match('/(^|,)' . preg_quote($server_config['ip_address'], '/') . '(,|$)/', $this->dataRecord['remote_ips']) == false) {
+							$this->dataRecord['remote_ips'] .= ',' . $server_config['ip_address'];
+						}
+						$tmp = preg_split('/\s*,\s*/', $this->dataRecord['remote_ips']);
+						$tmp = array_unique($tmp);
+						$this->dataRecord['remote_ips'] = implode(',', $tmp);
+						unset($tmp);
+					}
+				}
+			}
+		}
+
 
 		parent::onBeforeUpdate();
 	}
 
 	function onBeforeInsert() {
 		global $app, $conf, $interfaceConf;
-		
+
+		//* Site shell not be empty
+		if($this->dataRecord['parent_domain_id'] == 0) $app->tform->errorMessage .= $app->tform->lng("database_site_error_empty").'<br />';
+
 		//* Database username and database name shall not be empty
 		if($this->dataRecord['database_name'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_name_error_empty"].'<br />';
-		if($this->dataRecord['database_user'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_user_error_empty"].'<br />';
 
 		//* Get the database name and database user prefix
-		$app->uses('getconf');
+		$app->uses('getconf,tools_sites');
 		$global_config = $app->getconf->get_global_config('sites');
-		$dbname_prefix = replacePrefix($global_config['dbname_prefix'], $this->dataRecord);
-		$dbuser_prefix = replacePrefix($global_config['dbuser_prefix'], $this->dataRecord);
+		$dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $this->dataRecord);
+		$this->dataRecord['database_name_prefix'] = $dbname_prefix;
+
+		if(strlen($dbname_prefix . $this->dataRecord['database_name']) > 64) $app->tform->errorMessage .= str_replace('{db}', $dbname_prefix . $this->dataRecord['database_name'], $app->tform->wordbook["database_name_error_len"]).'<br />';
+
+		//* Check database name and user against blacklist
+		$dbname_blacklist = array($conf['db_database'], 'mysql');
+		if(in_array($dbname_prefix . $this->dataRecord['database_name'], $dbname_blacklist)) {
+			$app->tform->errorMessage .= $app->lng('Database name not allowed.').'<br />';
+		}
 
 		/* restrict the names */
-        /* crop user and db names if they are too long -> mysql: user: 16 chars / db: 64 chars */
-		$this->dataRecord['database_name'] = substr($dbname_prefix . $this->dataRecord['database_name'], 0, 64);
-		$this->dataRecord['database_user'] = substr($dbuser_prefix . $this->dataRecord['database_user'], 0, 16);
+		/* crop user and db names if they are too long -> mysql: user: 16 chars / db: 64 chars */
+		if ($app->tform->errorMessage == ''){
+			$this->dataRecord['database_name'] = substr($dbname_prefix . $this->dataRecord['database_name'], 0, 64);
+		}
+
+		//* Check for duplicates
+		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as dbnum FROM web_database WHERE database_name = '".$app->db->quote($this->dataRecord['database_name'])."' AND server_id = '".$app->functions->intval($this->dataRecord["server_id"])."'");
+		if($tmp['dbnum'] > 0) $app->tform->errorMessage .= $app->tform->lng('database_name_error_unique').'<br />';
+
+		// get the web server ip (parent domain)
+		$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = '".$app->functions->intval($this->dataRecord['parent_domain_id'])."'");
+		if($tmp['server_id'] && $tmp['server_id'] != $this->dataRecord['server_id']) {
+			// we need remote access rights for this server, so get it's ip address
+			$server_config = $app->getconf->get_server_config($tmp['server_id'], 'server');
+			if($server_config['ip_address']!='') {
+				/*
+                if($this->dataRecord['remote_access'] != 'y') $this->dataRecord['remote_ips'] = '';
+                $this->dataRecord['remote_access'] = 'y';
+                if(preg_match('/(^|,)' . preg_quote($server_config['ip_address'], '/') . '(,|$)/', $this->dataRecord['remote_ips']) == false) {
+                    $this->dataRecord['remote_ips'] .= ($this->dataRecord['remote_ips'] != '' ? ',' : '') . $server_config['ip_address'];
+                }
+				*/
+
+				if($this->dataRecord['remote_access'] != 'y'){
+					$this->dataRecord['remote_ips'] = $server_config['ip_address'];
+					$this->dataRecord['remote_access'] = 'y';
+				} else {
+					if($this->dataRecord['remote_ips'] != ''){
+						if(preg_match('/(^|,)' . preg_quote($server_config['ip_address'], '/') . '(,|$)/', $this->dataRecord['remote_ips']) == false) {
+							$this->dataRecord['remote_ips'] .= ',' . $server_config['ip_address'];
+						}
+						$tmp = preg_split('/\s*,\s*/', $this->dataRecord['remote_ips']);
+						$tmp = array_unique($tmp);
+						$this->dataRecord['remote_ips'] = implode(',', $tmp);
+						unset($tmp);
+					}
+				}
+			}
+		}
 
 		parent::onBeforeInsert();
+	}
+
+	function onInsertSave($sql) {
+		global $app, $conf;
+
+		$app->uses('sites_database_plugin');
+
+		//$app->sites_database_plugin->processDatabaseInsert($this);
+
+		$app->db->query($sql);
+		if($app->db->errorMessage != '') die($app->db->errorMessage);
+		$new_id = $app->db->insertID();
+
+		return $new_id;
+	}
+
+	function onUpdateSave($sql) {
+		global $app;
+		if(!empty($sql) && !$app->tform->isReadonlyTab($app->tform->getCurrentTab(), $this->id)) {
+
+			$app->uses('sites_database_plugin');
+			//$app->sites_database_plugin->processDatabaseUpdate($this);
+
+			$app->db->query($sql);
+			if($app->db->errorMessage != '') die($app->db->errorMessage);
+		}
 	}
 
 	function onAfterInsert() {
 		global $app, $conf;
 
-		// make sure that the record belongs to the clinet group and not the admin group when a dmin inserts it
-		// 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_database SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE database_id = ".$this->id);
-		}
-		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_database SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE database_id = ".$this->id);
+		if($this->dataRecord["parent_domain_id"] > 0) {
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+
+			//* The Database user shall be owned by the same group then the website
+			$sys_groupid = $app->functions->intval($web['sys_groupid']);
+			$backup_interval = $app->functions->intval($web['backup_interval']);
+			$backup_copies = $app->functions->intval($web['backup_copies']);
+
+			$sql = "UPDATE web_database SET sys_groupid = '$sys_groupid', backup_interval = '$backup_interval', backup_copies = '$backup_copies' WHERE database_id = ".$this->id;
+			$app->db->query($sql);
 		}
 	}
 
 	function onAfterUpdate() {
 		global $app, $conf;
 
-		// make sure that the record belongs to the client group and not the admin group when a admin inserts it
-		// 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_database SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE database_id = ".$this->id);
-		}
-		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_database SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE database_id = ".$this->id);
+		if($this->dataRecord["parent_domain_id"] > 0) {
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+
+			//* The Database user shall be owned by the same group then the website
+			$sys_groupid = $app->functions->intval($web['sys_groupid']);
+			$backup_interval = $app->functions->intval($web['backup_interval']);
+			$backup_copies = $app->functions->intval($web['backup_copies']);
+
+			$sql = "UPDATE web_database SET sys_groupid = '$sys_groupid', backup_interval = '$backup_interval', backup_copies = '$backup_copies' WHERE database_id = ".$this->id;
+			$app->db->query($sql);
 		}
 
 	}
@@ -320,4 +438,4 @@
 $page = new page_action;
 $page->onLoad();
 
-?>
\ No newline at end of file
+?>

--
Gitblit v1.9.1