diff --git a/interface/web/dashboard/ajax_get_json.php.bak b/interface/web/dashboard/ajax_get_json.php.bak
deleted file mode 100644
index 48294188deec943ed8ef344cff8321f8ee86b94d..0000000000000000000000000000000000000000
--- a/interface/web/dashboard/ajax_get_json.php.bak
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-
-/*
-Copyright (c) 2012, ISPConfig UG
-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.
-*/
-
-require_once '../../lib/config.inc.php';
-require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dashboard');
-
-$app->uses('tform');
-
-$type = $_GET["type"];
-
-//if($_SESSION["s"]["user"]["typ"] == 'admin') {
-
-
-if($type == 'globalsearch'){
-	$q = $app->db->quote(trim($_GET["q"]));
-	$authsql = " AND ".$app->tform->getAuthSQL('r');
-	$modules = explode(',', $_SESSION['s']['user']['modules']);
-
-	$result = array();
-
-	// clients
-	$result[] = _search('client', 'client', "AND limit_client = 0");
-
-	// resellers
-	$result[] = _search('client', 'reseller', "AND limit_client != 0");
-
-	// web sites
-	$result[] = _search('sites', 'web_domain', "AND type = 'vhost'");
-
-	// subdomains
-	$result[] = _search('sites', 'web_subdomain', "AND type = 'subdomain'");
-
-	// web site aliases
-	$result[] = _search('sites', 'web_aliasdomain', "AND type = 'alias'");
-
-	// vhostsubdomains
-	$result[] = _search('sites', 'web_vhost_subdomain', "AND type = 'vhostsubdomain'");
-
-	// FTP users
-	$result[] = _search('sites', 'ftp_user');
-
-	// shell users
-	$result[] = _search('sites', 'shell_user');
-
-	// databases
-	/*
-		$result_databases = array('cheader' => array(), 'cdata' => array());
-		if(in_array('sites', $modules)){
-			$sql = "SELECT * FROM web_database WHERE database_name LIKE '%".$q."%' OR database_user LIKE '%".$q."%' OR remote_ips LIKE '%".$q."%'".$authsql." ORDER BY database_name";
-			$results = $app->db->queryAllRecords($sql);
-
-			if(is_array($results) && !empty($results)){
-				$result_databases['cheader'] = array('title' => 'Databases',
-														'total' => count($results),
-														'limit' => count($results)
-													);
-				foreach($results as $result){
-					$description = 'Database User: '.$result['database_user'].' - Remote IPs: '.$result['remote_ips'];
-					$result_databases['cdata'][] = array('title' => $result['database_name'],
-												'description' => $description,
-												'onclick' => 'capp(\'sites\',\'sites/database_edit.php?id='.$result['database_id'].'\');',
-												'fill_text' => strtolower($result['database_name'])
-												);
-				}
-			}
-		}
-		*/
-	$result[] = _search('sites', 'database');
-
-	// database users
-	$result[] = _search('sites', 'database_user');
-
-	// email domains
-	$result[] = _search('mail', 'mail_domain');
-
-	// email alias domains
-	$result[] = _search('mail', 'mail_aliasdomain', "AND type = 'aliasdomain'");
-
-	// email mailboxes
-	$result[] = _search('mail', 'mail_user');
-
-	// email aliases
-	$result[] = _search('mail', 'mail_alias', "AND type = 'alias'");
-
-	// email forwards
-	$result[] = _search('mail', 'mail_forward', "AND type = 'forward'");
-
-	// email catchalls
-	$result[] = _search('mail', 'mail_domain_catchall', "AND type = 'catchall'");
-
-	// email transports
-	$result[] = _search('mail', 'mail_transport');
-
-	// mailinglists
-	$result[] = _search('mail', 'mail_mailinglist');
-
-	// getmails
-	$result[] = _search('mail', 'mail_get');
-
-	// dns zones
-	$result[] = _search('dns', 'dns_soa');
-
-	// secondary dns zones
-	$result[] = _search('dns', 'dns_slave');
-
-	// virtual machines
-	$result[] = _search('vm', 'openvz_vm');
-
-	// virtual machines os templates
-	$result[] = _search('vm', 'openvz_ostemplate');
-
-	// virtual machines vm templates
-	$result[] = _search('vm', 'openvz_template');
-
-	// virtual machines ip addresses
-	$result[] = _search('vm', 'openvz_ip');
-
-	// directive snippets
-	$result[] = _search('admin', 'directive_snippets');
-
-	$json = $app->functions->json_encode($result);
-}
-
-//}
-
-function _search($module, $section, $additional_sql = ''){
-	global $app, $q, $authsql, $modules;
-
-	$result_array = array('cheader' => array(), 'cdata' => array());
-	if(in_array($module, $modules)){
-		$search_fields = array();
-		$desc_fields = array();
-		if(is_file('../'.$module.'/form/'.$section.'.tform.php')){
-			include_once '../'.$module.'/form/'.$section.'.tform.php';
-
-			$category_title = $form["title"];
-			$form_file = $form["action"];
-			$db_table = $form["db_table"];
-			$db_table_idx = $form["db_table_idx"];
-			$order_by = $db_table_idx;
-
-			if(is_array($form["tabs"]) && !empty($form["tabs"])){
-				foreach($form["tabs"] as $tab){
-					if(is_array($tab['fields']) && !empty($tab['fields'])){
-						foreach($tab['fields'] as $key => $val){
-							if(isset($val['searchable']) && $val['searchable'] > 0){
-								$search_fields[] = $key." LIKE '%".$q."%'";
-								if($val['searchable'] == 1){
-									$order_by = $key;
-									$title_key = $key;
-								}
-								if($val['searchable'] == 2){
-									$desc_fields[] = $key;
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-		unset($form);
-
-		$where_clause = '';
-		if(!empty($search_fields)){
-			$where_clause = implode(' OR ', $search_fields);
-		} else {
-			// valid SQL query which returns an empty result set
-			$where_clause = '1 = 0';
-		}
-		if($where_clause != '') $where_clause = '('.$where_clause.')';
-		if($additional_sql != '') $where_clause .= ' '.$additional_sql.' ';
-		$order_clause = '';
-		if($order_by != '') $order_clause = ' ORDER BY '.$order_by;
-
-		$sql = "SELECT * FROM ".$db_table." WHERE ".$where_clause.$authsql.$order_clause." LIMIT 0,10";
-		$results = $app->db->queryAllRecords($sql);
-
-		if(is_array($results) && !empty($results)){
-			$lng_file = '../'.$module.'/lib/lang/'.$_SESSION['s']['language'].'_'.$section.'.lng';
-			if(is_file($lng_file)) include $lng_file;
-			$result_array['cheader'] = array('title' => $category_title,
-				'total' => count($results),
-				'limit' => count($results)
-			);
-			foreach($results as $result){
-				$description = '';
-				if(!empty($desc_fields)){
-					$desc_items = array();
-					foreach($desc_fields as $desc_field){
-						if($result[$desc_field] != '') $desc_items[] = $wb[$desc_field.'_txt'].': '.$result[$desc_field];
-					}
-					if(!empty($desc_items)) $description = implode(' - ', $desc_items);
-				}
-
-				$result_array['cdata'][] = array('title' => $wb[$title_key.'_txt'].': '.$result[$title_key],
-					'description' => $description,
-					'onclick' => "capp('".$module."','".$module."/".$form_file."?id=".$result[$db_table_idx]."');",
-					'fill_text' => strtolower($result[$title_key])
-				);
-			}
-		}
-	}
-	return $result_array;
-}
-
-header('Content-type: application/json');
-echo $json;
-?>
diff --git a/interface/web/dashboard/dashlets/limits.php.bak b/interface/web/dashboard/dashlets/limits.php.bak
deleted file mode 100644
index b361f6e9bad424612a6cb22a374b5d1281213f53..0000000000000000000000000000000000000000
--- a/interface/web/dashboard/dashlets/limits.php.bak
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-
-class dashlet_limits {
-
-	function show() {
-		global $app, $conf;
-
-		$limits = array();
-
-		/* Limits to be shown*/
-
-		$limits[] = array('field' => 'limit_maildomain',
-			'db_table' => 'mail_domain',
-			'db_where' => '');
-
-		$limits[] = array('field' => 'limit_mailmailinglist',
-			'db_table' => 'mail_mailinglist',
-			'db_where' => '');
-
-		$limits[] = array('field' => 'limit_mailbox',
-			'db_table' => 'mail_user',
-			'db_where' => '');
-
-		$limits[] = array('field' => 'limit_mailalias',
-			'db_table' => 'mail_forwarding',
-			'db_where' => "type = 'alias'");
-
-		$limits[] = array('field' => 'limit_mailaliasdomain',
-			'db_table' => 'mail_forwarding',
-			'db_where' => "type = 'aliasdomain'");
-
-		$limits[] = array('field' => 'limit_mailforward',
-			'db_table' => 'mail_forwarding',
-			'db_where' => "type = 'forward'");
-
-		$limits[] = array('field' => 'limit_mailcatchall',
-			'db_table' => 'mail_forwarding',
-			'db_where' => "type = 'catchall'");
-
-		$limits[] = array('field' => 'limit_mailrouting',
-			'db_table' => 'mail_transport',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_mailfilter',
-			'db_table' => 'mail_user_filter',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_fetchmail',
-			'db_table' => 'mail_get',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_spamfilter_wblist',
-			'db_table' => 'spamfilter_wblist',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_spamfilter_user',
-			'db_table' => 'spamfilter_users',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_spamfilter_policy',
-			'db_table' => 'spamfilter_policy',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_web_domain',
-			'db_table' => 'web_domain',
-			'db_where' => "type = 'vhost'");
-
-		$limits[] = array('field' => 'limit_web_subdomain',
-			'db_table' => 'web_domain',
-			'db_where' => "(type = 'subdomain' OR type = 'vhostsubdomain')");
-
-		$limits[] = array('field' => 'limit_web_aliasdomain',
-			'db_table' => 'web_domain',
-			'db_where' => "type = 'alias'");
-
-		$limits[] = array('field' => 'limit_ftp_user',
-			'db_table' => 'ftp_user',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_shell_user',
-			'db_table' => 'shell_user',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_dns_zone',
-			'db_table' => 'dns_soa',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_dns_slave_zone',
-			'db_table' => 'dns_slave',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_dns_record',
-			'db_table' => 'dns_rr',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_database',
-			'db_table' => 'web_database',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_cron',
-			'db_table' => 'cron',
-			'db_where' => "");
-
-		$limits[] = array('field' => 'limit_client',
-			'db_table' => 'client',
-			'db_where' => "");
-
-
-
-
-		//* Loading Template
-		$app->uses('tpl,tform');
-
-		$tpl = new tpl;
-		$tpl->newTemplate("dashlets/templates/limits.htm");
-
-		$wb = array();
-		$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_limits.lng';
-		if(is_file($lng_file)) include $lng_file;
-		$tpl->setVar($wb);
-
-		if($app->auth->is_admin()) {
-			$user_is_admin = true;
-		} else {
-			$user_is_admin = false;
-		}
-		$tpl->setVar('is_admin', $user_is_admin);
-
-		if($user_is_admin == false) {
-			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT * FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-		}
-
-		$rows = array();
-		foreach($limits as $limit) {
-			$field = $limit['field'];
-			if($user_is_admin) {
-				$value = $wb['unlimited_txt'];
-			} else {
-				$value = $client[$field];
-			}
-			if($value != 0 || $value == $wb['unlimited_txt']) {
-				$value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value;
-				$rows[] = array('field' => $field,
-					'field_txt' => $wb[$field.'_txt'],
-					'value' => $value_formatted,
-					'usage' => $this->_get_limit_usage($limit));
-			}
-		}
-		$tpl->setLoop('rows', $rows);
-
-
-		return $tpl->grab();
-
-	}
-
-	function _get_limit_usage($limit) {
-		global $app;
-
-		$sql = "SELECT count(sys_userid) as number FROM ".$app->db->quote($limit['db_table'])." WHERE ";
-		if($limit['db_where'] != '') $sql .= $limit['db_where']." AND ";
-		$sql .= $app->tform->getAuthSQL('r');
-		$rec = $app->db->queryOneRecord($sql);
-		return $rec['number'];
-
-	}
-
-}
-
-
-
-
-
-
-
-
-?>
diff --git a/interface/web/sites/aps_install_package.php.bak b/interface/web/sites/aps_install_package.php.bak
deleted file mode 100644
index 8ba04efd2103d47358df6188f0c0ccdd1e5c6287..0000000000000000000000000000000000000000
--- a/interface/web/sites/aps_install_package.php.bak
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-/*
-Copyright (c) 2012, ISPConfig UG
-Contributors: web wack creations,  http://www.web-wack.at
-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.
-*/
-
-require_once '../../lib/config.inc.php';
-require_once '../../lib/app.inc.php';
-//require_once('classes/class.guicontroller.php');
-$app->load('aps_guicontroller');
-
-// Check the module permissions
-$app->auth->check_module_permissions('sites');
-
-// Load needed classes
-$app->uses('tpl,tform');
-$app->tpl->newTemplate("form.tpl.htm");
-$app->tpl->setInclude('content_tpl', 'templates/aps_install_package.htm');
-
-// Load the language file
-$lngfile = 'lib/lang/'.$_SESSION['s']['language'].'_aps.lng';
-require_once $lngfile;
-$app->tpl->setVar($wb);
-$app->load_language_file('web/sites/'.$lngfile);
-
-// we will check only users, not admins
-if($_SESSION["s"]["user"]["typ"] == 'user') {
-	$app->tform->formDef['db_table_idx'] = 'client_id';
-	$app->tform->formDef['db_table'] = 'client';
-	if(!$app->tform->checkClientLimit('limit_aps')) {
-		$app->error($app->lng("limit_aps_txt"));
-	}
-	if(!$app->tform->checkResellerLimit('limit_aps')) {
-		$app->error('Reseller: '.$wb["limit_aps_txt"]);
-	}
-}
-
-
-$adminflag = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
-$gui = new ApsGUIController($app);
-$pkg_id = (isset($_GET['id'])) ? $app->db->quote($_GET['id']) : '';
-
-// Check if a newer version is available for the current package
-// Note: It's intended that here is no strict ID check (see below)
-if(isset($pkg_id))
-{
-	$newest_pkg_id = $gui->getNewestPackageID($pkg_id);
-	if($newest_pkg_id != 0) $pkg_id = $newest_pkg_id;
-}
-
-// Make sure an integer ID is given
-if(!isset($pkg_id) || !$gui->isValidPackageID($pkg_id, $adminflag))
-	$app->error($app->lng('Invalid ID'));
-
-// Get package details
-$details = $gui->getPackageDetails($pkg_id);
-if(isset($details['error'])) $app->error($details['error']);
-$settings = $gui->getPackageSettings($pkg_id);
-if(isset($settings['error'])) $app->error($settings['error']);
-
-// Get domain list
-$domains = array();
-$domain_for_user = '';
-if(!$adminflag) $domain_for_user = "AND (sys_userid = '".$app->db->quote($_SESSION['s']['user']['userid'])."'
-    OR sys_groupid = '".$app->db->quote($_SESSION['s']['user']['userid'])."' )";
-$domains_assoc = $app->db->queryAllRecords("SELECT domain FROM web_domain WHERE document_root != '' AND (type = 'vhost' OR type = 'vhostsubdomain') AND active = 'y' ".$domain_for_user." ORDER BY domain;");
-if(!empty($domains_assoc)) foreach($domains_assoc as $domain) $domains[] = $domain['domain'];
-
-	// If data has been submitted, validate it
-	$result['input'] = array();
-if(count($_POST) > 1)
-{
-	$result = $gui->validateInstallerInput($_POST, $details, $domains, $settings);
-	if(empty($result['error']))
-	{
-		$gui->createPackageInstance($result['input'], $pkg_id);
-		@header('Location:aps_installedpackages_list.php');
-	}
-	else
-	{
-		$app->tpl->setVar('error', implode('<br />', $result['error']));
-
-		// Set memorized values (license, db password, install location)
-		if(!empty($result['input']))
-			foreach($result['input'] as $key => $value) $app->tpl->setVar('inp_'.$key, $value);
-	}
-}
-else $app->tpl->setVar('inp_main_database_password', ucfirst(substr(md5(crypt(rand(0, 10))), 0, 16)));
-
-// Pass the package details to the template
-foreach($details as $key => $value)
-{
-	if(!is_array($value)) $app->tpl->setVar('pkg_'.str_replace(' ', '_', strtolower($key)), $value);
-	else if($key == 'Requirements PHP settings') $app->tpl->setLoop('pkg_requirements_php_settings', $details['Requirements PHP settings']);
-}
-
-// Parse the template as far as possible, then do the rest manually
-$app->tpl_defaults();
-$parsed_tpl = $app->tpl->grab();
-
-
-// ISPConfig has a very old and functionally limited template engine. We have to style parts on our own...
-
-// Print the domain list
-$domains_tpl = '';
-if(!empty($domains))
-{
-	$set = array();
-	$set[] = '<select name="main_domain" id="main_domain" class="selectInput">';
-	foreach($domains as $domain)
-	{
-		$selected = '';
-		if((count($_POST) > 1)
-			&& (isset($result['input']['main_domain']))
-			&& ($result['input']['main_domain'] == $domain))
-			$selected = ' selected ';
-		$set[] = '<option value="'.$domain.'" '.$selected.'>'.$domain.'</option>';
-	}
-	$set[] = '</select>';
-
-	$domains_tpl = implode("\n", $set);
-}
-$parsed_tpl = str_replace('DOMAIN_LIST_SPACE', $domains_tpl, $parsed_tpl);
-
-// Print the packgae settings
-$settings_tpl = '';
-if(!empty($settings))
-{
-	$set = array();
-	$set[] = '<legend>'.$app->lng('package_settings_txt').'</legend>';
-	foreach($settings as $setting)
-	{
-		$set[] = '<div class="ctrlHolder">';
-		$set[] = '<label for="'.$setting['SettingID'].'">'.$setting['SettingName'].'</label>';
-		if($setting['SettingInputType'] == 'string' || $setting['SettingInputType'] == 'password')
-		{
-			$input_type = ($setting['SettingInputType'] == 'string') ? 'text' : 'password';
-
-			$input_value = '';
-			if((count($_POST) > 1)
-				&& (isset($result['input'][$setting['SettingID']])))
-				$input_value = $result['input'][$setting['SettingID']];
-			else $input_value = @$setting['SettingDefaultValue'];
-
-			$set[] = '<input type="'.$input_type.'" class="textInput" name="'.$setting['SettingID'].'" maxlength="'.$setting['SettingMaxLength'].'" id="'.$setting['SettingID'].'" value="'.$input_value.'" />
-                <p class="formHint">'.$setting['SettingDescription'].'</p>';
-		}
-		else if($setting['SettingInputType'] == 'checkbox')
-			{
-				$checked = '';
-				if((count($_POST) > 1)
-					&& (isset($result['input'][$setting['SettingID']])
-						&& ($result['input'][$setting['SettingID']] == 'true')))
-					$checked = 'checked ';
-				else if($setting['SettingDefaultValue'] == '1') $checked = 'checked ';
-
-					$set[] = '<input type="checkbox" id="'.$setting['SettingID'].'" name="'.$setting['SettingID'].'" '.$checked.'/>
-                <p class="formHint">'.$setting['SettingDescription'].'</p>';
-			}
-		else if($setting['SettingInputType'] == 'select')
-			{
-				$set[] =  '<select size="1" class="selectInput" name="'.$setting['SettingID'].'">';
-				foreach($setting['SettingChoices'] as $choice)
-				{
-					$selected = '';
-					if((count($_POST) > 1)
-						&& (isset($result['input'][$setting['SettingID']])))
-					{
-						if($result['input'][$setting['SettingID']] == $choice['EnumID'])
-							$selected = 'selected ';
-					}
-					else if($setting['SettingDefaultValue'] == $choice['EnumID']) $selected = 'selected ';
-
-						$set[] = '<option value="'.$choice['EnumID'].'" '.$selected.'>'.$choice['EnumName'].'</option>';
-				}
-				$set[] = '</select>
-                <p class="formHint">'.$setting['SettingDescription'].'</p>';
-			}
-
-		$set[] = '</div>';
-	}
-	$settings_tpl = implode("\n", $set);
-}
-$parsed_tpl = str_replace('PKG_SETTINGS_SPACE', $settings_tpl, $parsed_tpl);
-
-echo $parsed_tpl;
-?>
diff --git a/interface/web/sites/form/web_folder.tform.php.bak b/interface/web/sites/form/web_folder.tform.php.bak
deleted file mode 100644
index ab8d4747ce15a3b1fdb3897fbdbfa2cffa38b6cf..0000000000000000000000000000000000000000
--- a/interface/web/sites/form/web_folder.tform.php.bak
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"]    = "Web Folder";
-$form["description"]  = "";
-$form["name"]    = "web_folder";
-$form["action"]   = "web_folder_edit.php";
-$form["db_table"]  = "web_folder";
-$form["db_table_idx"] = "web_folder_id";
-$form["db_history"]  = "yes";
-$form["tab_default"] = "folder";
-$form["list_default"] = "web_folder_list.php";
-$form["auth"]   = 'yes'; // yes / no
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['folder'] = array (
-	'title'  => "Folder",
-	'width'  => 100,
-	'template'  => "templates/web_folder_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id,server_name FROM server WHERE mirror_server_id = 0 AND {AUTHSQL} ORDER BY server_name',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-		'parent_domain_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => "SELECT web_domain.domain_id, CONCAT(web_domain.domain, ' :: ', server.server_name) AS parent_domain FROM web_domain, server WHERE (web_domain.type = 'vhost' OR web_domain.type = 'vhostsubdomain') AND web_domain.server_id = server.server_id AND {AUTHSQL::web_domain} ORDER BY web_domain.domain",
-				'keyfield'=> 'domain_id',
-				'valuefield'=> 'parent_domain'
-			),
-			'value'  => ''
-		),
-		'path' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\w\.\-\_\/]{0,255}$/',
-					'errmsg'=> 'path_error_regex'),
-			),
-			'default' => '/',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'active' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-
-
-?>
diff --git a/interface/web/sites/list/web_folder.list.php.bak b/interface/web/sites/list/web_folder.list.php.bak
deleted file mode 100644
index aa23fac6734749edb9b6b58376b693a3feee5bf3..0000000000000000000000000000000000000000
--- a/interface/web/sites/list/web_folder.list.php.bak
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
-	Datatypes:
-	- INTEGER
-	- DOUBLE
-	- CURRENCY
-	- VARCHAR
-	- TEXT
-	- DATE
-*/
-
-
-
-// Name of the list
-$liste["name"]     = "web_folder";
-
-// Database table
-$liste["table"]    = "web_folder";
-
-// Index index field of the database table
-$liste["table_idx"]   = "web_folder_id";
-
-// Search Field Prefix
-$liste["search_prefix"]  = "search_";
-
-// Records per page
-$liste["records_per_page"]  = "15";
-
-// Script File of the list
-$liste["file"]    = "web_folder_list.php";
-
-// Script file of the edit form
-$liste["edit_file"]   = "web_folder_edit.php";
-
-// Script File of the delete script
-$liste["delete_file"]  = "web_folder_del.php";
-
-// Paging Template
-$liste["paging_tpl"]  = "templates/paging.tpl.htm";
-
-// Enable auth
-$liste["auth"]    = "yes";
-
-
-/*****************************************************
-* Suchfelder
-*****************************************************/
-
-
-$liste["item"][] = array( 'field'  => "active",
-	'datatype' => "VARCHAR",
-	'formtype' => "SELECT",
-	'op'  => "=",
-	'prefix' => "",
-	'suffix' => "",
-	'width'  => "",
-	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
-
-
-$liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
-	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
-	'datasource' => array (  'type' => 'SQL',
-		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
-		'keyfield'=> 'server_id',
-		'valuefield'=> 'server_name'
-	),
-	'width'  => "",
-	'value'  => "");
-
-$liste["item"][] = array( 'field'  => "parent_domain_id",
-	'datatype' => "VARCHAR",
-	'filters'   => array( 0 => array( 'event' => 'SHOW',
-			'type' => 'IDNTOUTF8')
-	),
-	'formtype' => "SELECT",
-	'op'  => "=",
-	'prefix' => "",
-	'suffix' => "",
-	'datasource' => array (  'type' => 'SQL',
-		'querystring' => "SELECT domain_id,domain FROM web_domain WHERE (type = 'vhost' OR type = 'vhostsubdomain') AND {AUTHSQL} ORDER BY domain",
-		'keyfield'=> 'domain_id',
-		'valuefield'=> 'domain'
-	),
-	'width'  => "",
-	'value'  => "");
-
-$liste["item"][] = array( 'field'  => "path",
-	'datatype' => "VARCHAR",
-	'formtype' => "TEXT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
-	'width'  => "",
-	'value'  => "");
-
-
-?>
diff --git a/interface/web/sites/templates/web_sites_stats_list.htm.bak b/interface/web/sites/templates/web_sites_stats_list.htm.bak
deleted file mode 100644
index f721dfbd215cafc2ed13eadb351c1971b47930d6..0000000000000000000000000000000000000000
--- a/interface/web/sites/templates/web_sites_stats_list.htm.bak
+++ /dev/null
@@ -1,63 +0,0 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_list_web_sites_stats">
-
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
-                        <th class="tbl_col_web_traffic_this_month" scope="col"><tmpl_var name="this_month_txt"></th>
-                        <th class="tbl_col_web_traffic_last_month" scope="col"><tmpl_var name="last_month_txt"></th>
-                        <th class="tbl_col_web_traffic_this_year" scope="col"><tmpl_var name="this_year_txt"></th>
-                        <th class="tbl_col_web_traffic_last_year" scope="col"><tmpl_var name="last_year_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
-                    </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
-                        <td class="tbl_col_this_month"></td>
-                        <td class="tbl_col_last_month"></td>
-                        <td class="tbl_col_this_year"></td>
-                        <td class="tbl_col_last_year"></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/web_sites_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button>
-                        </td>
-                    </tr>
-                </thead>
-                <tbody>
-                <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_domain"><a target="_blank" href="http://{tmpl_var name="domain"}/stats">{tmpl_var name="domain"}</a></td>
-                        <td class="tbl_col_this_month"><a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="this_month"}</a></td>
-                        <td class="tbl_col_last_month"><a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_month"}</a></td>
-                        <td class="tbl_col_this_year"><a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="this_year"}</a></td>
-                        <td class="tbl_col_last_year"><a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_year"}</a></td>
-                        <td class="tbl_col_buttons"></td>
-                    </tr>
-                </tmpl_loop>
-                <tmpl_unless name="records">
-                    <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td colspan="6">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
-                    </tr>
-                </tmpl_unless>
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_domain"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_txt"}</a></td>
-                        <td class="tbl_col_this_month"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_month"} MB</a></td>
-                        <td class="tbl_col_last_month"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_month"} MB</a></td>
-                        <td class="tbl_col_this_year"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_year"} MB</a></td>
-                        <td class="tbl_col_last_year"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_year"} MB</a></td>
-                        <td class="tbl_col_buttons"></td>
-                    </tr>
-                </tbody>
-                <tfoot>
-                    <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
-                    </tr>
-                </tfoot>
-            </table>
-        </fieldset>
-    </div>
-
-</div>
diff --git a/interface/web/sites/web_aliasdomain_edit.php.bak b/interface/web/sites/web_aliasdomain_edit.php.bak
deleted file mode 100644
index b220011dd3c2e678a7661efba79886b7056c022c..0000000000000000000000000000000000000000
--- a/interface/web/sites/web_aliasdomain_edit.php.bak
+++ /dev/null
@@ -1,191 +0,0 @@
-<?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/web_aliasdomain.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once '../../lib/config.inc.php';
-require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('sites');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions,tools_sites');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	var $parent_domain_record;
-
-	function onShowNew() {
-		global $app, $conf;
-
-		// we will check only users, not admins
-		if($_SESSION["s"]["user"]["typ"] == 'user') {
-			if(!$app->tform->checkClientLimit('limit_web_aliasdomain', "type = 'alias'")) {
-				$app->error($app->tform->wordbook["limit_web_aliasdomain_txt"]);
-			}
-			if(!$app->tform->checkResellerLimit('limit_web_aliasdomain', "type = 'alias'")) {
-				$app->error('Reseller: '.$app->tform->wordbook["limit_web_aliasdomain_txt"]);
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onShowEnd() {
-		global $app, $conf;
-
-		/*
-		 * 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["domain"]) {
-						$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);
-		}
-
-		if($_SESSION["s"]["user"]["typ"] == 'admin') {
-			// Directive Snippets
-			$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y'");
-			$proxy_directive_snippets_txt = '';
-			if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
-				foreach($proxy_directive_snippets as $proxy_directive_snippet){
-					$proxy_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$proxy_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.$proxy_directive_snippet['snippet'].'</pre></a> ';
-				}
-			}
-			if($proxy_directive_snippets_txt == '') $proxy_directive_snippets_txt = '------';
-			$app->tpl->setVar("proxy_directive_snippets_txt", $proxy_directive_snippets_txt);
-		}
-
-		parent::onShowEnd();
-
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		/* 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['domain']);
-			if(!$domain_check) {
-				// invalid domain selected
-				$app->tform->errorMessage .= $app->tform->lng("domain_error_empty")."<br />";
-			} else {
-				$this->dataRecord['domain'] = $domain_check;
-			}
-		}
-
-		// nginx: if redirect type is proxy and redirect path is no URL, display error
-		if($this->dataRecord["redirect_type"] == 'proxy' && substr($this->dataRecord['redirect_path'], 0, 1) == '/'){
-			$app->tform->errorMessage .= $app->tform->lng("error_proxy_requires_url")."<br />";
-		}
-
-		// Get the record of the parent domain
-		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
-		if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
-
-		// Set a few fixed values
-		$this->dataRecord["type"] = 'alias';
-		$this->dataRecord["server_id"] = $parent_domain["server_id"];
-		//$this->dataRecord["domain"] = $this->dataRecord["domain"].'.'.$parent_domain["domain"];
-
-		$this->parent_domain_record = $parent_domain;
-
-		//* make sure that the domain is lowercase
-		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		$app->db->query('UPDATE web_domain SET sys_groupid = ? WHERE domain_id = ?', $this->parent_domain_record['sys_groupid'], $this->id);
-
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Check if parent domain has been changed
-		if($this->dataRecord['parent_domain_id'] != $this->oldDataRecord['parent_domain_id']) {
-
-			//* Update the domain owner
-			$app->db->query('UPDATE web_domain SET sys_groupid = ? WHERE domain_id = ?', $this->parent_domain_record['sys_groupid'], $this->id);
-
-			//* Update the old website, so that the vhost alias gets removed
-			//* We force the update by inserting a transaction record without changes manually.
-			$old_website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ?', $this->oldDataRecord['domain_id']);
-			$app->db->datalogSave('web_domain', 'UPDATE', 'domain_id', $this->oldDataRecord['parent_domain_id'], $old_website, $old_website, true);
-		}
-
-	}
-
-}
-
-$page = new page_action;
-$page->onLoad();
-
-?>
diff --git a/interface/web/sites/web_domain_edit.php.bak b/interface/web/sites/web_domain_edit.php.bak
deleted file mode 100644
index 2d9c774403018377d3a5de1692da6f13febdaf7a..0000000000000000000000000000000000000000
--- a/interface/web/sites/web_domain_edit.php.bak
+++ /dev/null
@@ -1,1114 +0,0 @@
-<?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
-******************************************/
-
-$tform_def_file = "form/web_domain.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once '../../lib/config.inc.php';
-require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('sites');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions,tools_sites');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	//* Returna a "3/2/1" path hash from a numeric id '123'
-	function id_hash($id, $levels) {
-		$hash = "" . $id % 10 ;
-		$id /= 10 ;
-		$levels -- ;
-		while ( $levels > 0 ) {
-			$hash .= "/" . $id % 10 ;
-			$id /= 10 ;
-			$levels-- ;
-		}
-		return $hash;
-	}
-
-	function onShowNew() {
-		global $app, $conf;
-
-		// we will check only users, not admins
-		if($_SESSION["s"]["user"]["typ"] == 'user') {
-			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"]);
-			}
-
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$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");
-			$web_servers = explode(',', $client['web_servers']);
-			$app->tpl->setVar("server_id_value", $web_servers[0]);
-			unset($web_servers);
-		}
-		$app->tform->formDef['tabs']['domain']['readonly'] = false;
-
-		parent::onShowNew();
-	}
-
-	function onShowEnd() {
-		global $app, $conf;
-
-		$app->uses('ini_parser,getconf');
-
-		$read_limits = array('limit_cgi', 'limit_ssi', 'limit_perl', 'limit_ruby', 'limit_python', 'force_suexec', 'limit_hterror', 'limit_wildcard', 'limit_ssl');
-
-		//* 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
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$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");
-
-			$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);
-
-			//* Get global web config
-			foreach ($client['web_servers_ids'] as $web_server_id) {
-				$web_config[$web_server_id] = $app->getconf->get_server_config($web_server_id, 'web');
-			}
-
-			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN (" . $client['web_servers'] . ");";
-			$web_servers = $app->db->queryAllRecords($sql);
-
-			$options_web_servers = "";
-
-			foreach ($web_servers as $web_server) {
-				$options_web_servers .= "<option value='$web_server[server_id]'>$web_server[server_name]</option>";
-			}
-
-			$app->tpl->setVar("server_id", $options_web_servers);
-			unset($options_web_servers);
-
-			if($this->id > 0) {
-				if(!isset($this->dataRecord["server_id"])){
-					$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
-					$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;
-			}
-
-			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN (" . $client['web_servers'] . ") AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
-			$ips = $app->db->queryAllRecords($sql);
-			$ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"<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 IPv6 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN (" . $client['web_servers'] . ") AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
-			$ips = $app->db->queryAllRecords($sql);
-			$ip_select = "<option value=''></option>";
-			//$ip_select = "";
-			if(is_array($ips)) {
-				foreach( $ips as $ip) {
-					$selected = ($ip["ip_address"] == $this->dataRecord["ipv6_address"])?'SELECTED':'';
-					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
-				}
-			}
-			$app->tpl->setVar("ipv6_address", $ip_select);
-			unset($tmp);
-			unset($ips);
-
-			//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';
-			if($this->dataRecord['php'] == 'php-fpm'){
-				$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 = ".($this->id > 0 ? $app->functions->intval($this->dataRecord['server_id']) : $app->functions->intval($client['default_webserver']))." AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
-			}
-			if($this->dataRecord['php'] == 'fast-cgi'){
-				$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".($this->id > 0 ? $app->functions->intval($this->dataRecord['server_id']) : $app->functions->intval($client['default_webserver']))." AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
-			}
-			$php_select = "<option value=''>Default</option>";
-			if(is_array($php_records) && !empty($php_records)) {
-				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm'){
-						$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";
-				}
-			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
-			unset($php_records);
-
-			// add limits to template to be able to hide settings
-			foreach($read_limits as $limit) $app->tpl->setVar($limit, $client[$limit]);
-
-
-			//* 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
-			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_domain, 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");
-
-			//* Get global web config
-			foreach ($client['web_servers_ids'] as $web_server_id) {
-				$web_config[$web_server_id] = $app->getconf->get_server_config($web_server_id, 'web');
-			}
-
-			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN (" . $client['web_servers'] . ");";
-			$web_servers = $app->db->queryAllRecords($sql);
-
-			$options_web_servers = "";
-
-			foreach ($web_servers as $web_server) {
-				$options_web_servers .= "<option value='$web_server[server_id]'>$web_server[server_name]</option>";
-			}
-
-			$app->tpl->setVar("server_id", $options_web_servers);
-			unset($options_web_servers);
-
-			// 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 client.parent_client_id = ".$client['client_id']." ORDER BY sys_group.name";
-			$records = $app->db->queryAllRecords($sql);
-			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($client['client_id']));
-			$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";
-				}
-			}
-			$app->tpl->setVar("client_group_id", $client_select);
-
-			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN (" . $client['web_servers'] . ") AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
-			$ips = $app->db->queryAllRecords($sql);
-			$ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"<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 IPv6 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN (" . $client['web_servers'] . ") AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
-			$ips = $app->db->queryAllRecords($sql);
-			$ip_select = "<option value=''></option>";
-			//$ip_select = "";
-			if(is_array($ips)) {
-				foreach( $ips as $ip) {
-					$selected = ($ip["ip_address"] == $this->dataRecord["ipv6_address"])?'SELECTED':'';
-					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
-				}
-			}
-			$app->tpl->setVar("ipv6_address", $ip_select);
-			unset($tmp);
-			unset($ips);
-
-			//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';
-			$selected_client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ".$app->functions->intval($selected_client_group_id));
-			//$sql_where = " AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id']." OR client_id = ".intval($selected_client['client_id']).")";
-			$sql_where = " AND (client_id = 0 OR client_id = ".intval($selected_client['client_id']).")";
-			if($this->dataRecord['php'] == 'php-fpm'){
-				$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 = ".($this->id > 0 ? $app->functions->intval($this->dataRecord['server_id']) : $app->functions->intval($client['default_webserver'])).$sql_where);
-			}
-			if($this->dataRecord['php'] == 'fast-cgi') {
-				$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".($this->id > 0 ? $app->functions->intval($this->dataRecord['server_id']) : $app->functions->intval($client['default_webserver'])).$sql_where);
-			}
-			$php_select = "<option value=''>Default</option>";
-			if(is_array($php_records) && !empty($php_records)) {
-				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm'){
-						$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";
-				}
-			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
-			unset($php_records);
-
-			// 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 = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'php' AND active = 'y'");
-				$php_directive_snippets_txt = '';
-				if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
-					foreach($php_directive_snippets as $php_directive_snippet){
-						$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> ';
-					}
-				}
-				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 = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'apache' AND active = 'y'");
-					$apache_directive_snippets_txt = '';
-					if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
-						foreach($apache_directive_snippets as $apache_directive_snippet){
-							$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> ';
-						}
-					}
-					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 = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'nginx' AND active = 'y'");
-					$nginx_directive_snippets_txt = '';
-					if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
-						foreach($nginx_directive_snippets as $nginx_directive_snippet){
-							$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> ';
-						}
-					}
-					if($nginx_directive_snippets_txt == '') $nginx_directive_snippets_txt = '------';
-					$app->tpl->setVar("nginx_directive_snippets_txt", $nginx_directive_snippets_txt);
-				}
-
-				$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y'");
-				$proxy_directive_snippets_txt = '';
-				if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
-					foreach($proxy_directive_snippets as $proxy_directive_snippet){
-						$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> ';
-					}
-				}
-				if($proxy_directive_snippets_txt == '') $proxy_directive_snippets_txt = '------';
-				$app->tpl->setVar("proxy_directive_snippets_txt", $proxy_directive_snippets_txt);
-			}
-
-			//* Admin: If the logged in user is admin
-		} else {
-
-			// The user is admin, so we fill in all IP addresses of the server
-			if($this->id > 0) {
-				if(!isset($this->dataRecord["server_id"])){
-					$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
-					$this->dataRecord["server_id"] = $tmp["server_id"];
-					unset($tmp);
-				}
-				$server_id = intval(@$this->dataRecord["server_id"]);
-			} else {
-				// Get the first server ID
-				$tmp = $app->db->queryOneRecord("SELECT server_id FROM server WHERE web_server = 1 ORDER BY server_name LIMIT 0,1");
-				$server_id = intval($tmp['server_id']);
-			}
-
-			//* get global web config
-			$web_config = $app->getconf->get_server_config($server_id, 'web');
-
-			//* Fill the IPv4 select field
-			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND server_id = ".$app->functions->intval($server_id);
-			$ips = $app->db->queryAllRecords($sql);
-			$ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"<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 IPv6 select field
-			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND server_id = ".$app->functions->intval($server_id);
-			$ips = $app->db->queryAllRecords($sql);
-			$ip_select = "<option value=''></option>";
-			//$ip_select = "";
-			if(is_array($ips)) {
-				foreach( $ips as $ip) {
-					$selected = ($ip["ip_address"] == $this->dataRecord["ipv6_address"])?'SELECTED':'';
-					$ip_select .= "<option value='$ip[ip_address]' $selected>$ip[ip_address]</option>\r\n";
-				}
-			}
-			$app->tpl->setVar("ipv6_address", $ip_select);
-			unset($tmp);
-			unset($ips);
-
-			// 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 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";
-				}
-			}
-			$app->tpl->setVar("client_group_id", $client_select);
-
-			//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';
-			$selected_client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ".$app->functions->intval($selected_client_group_id));
-			//$sql_where = " AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id']." OR client_id = ".intval($selected_client['client_id']).")";
-			$sql_where = " AND (client_id = 0 OR client_id = ".$app->functions->intval($selected_client['client_id']).")";
-			if($this->dataRecord['php'] == 'php-fpm'){
-				$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 = $server_id".$sql_where);
-			}
-			if($this->dataRecord['php'] == 'fast-cgi') {
-				$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".$app->functions->intval($server_id).$sql_where);
-			}
-			$php_select = "<option value=''>Default</option>";
-			if(is_array($php_records) && !empty($php_records)) {
-				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm'){
-						$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";
-				}
-			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
-			unset($php_records);
-
-			foreach($read_limits as $limit) $app->tpl->setVar($limit, ($limit == 'force_suexec' ? 'n' : 'y'));
-
-			// Directive Snippets
-			$php_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'php' AND active = 'y'");
-			$php_directive_snippets_txt = '';
-			if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
-				foreach($php_directive_snippets as $php_directive_snippet){
-					$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> ';
-				}
-			}
-			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 = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'apache' AND active = 'y'");
-				$apache_directive_snippets_txt = '';
-				if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
-					foreach($apache_directive_snippets as $apache_directive_snippet){
-						$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> ';
-					}
-				}
-				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 = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'nginx' AND active = 'y'");
-				$nginx_directive_snippets_txt = '';
-				if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
-					foreach($nginx_directive_snippets as $nginx_directive_snippet){
-						$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> ';
-					}
-				}
-				if($nginx_directive_snippets_txt == '') $nginx_directive_snippets_txt = '------';
-				$app->tpl->setVar("nginx_directive_snippets_txt", $nginx_directive_snippets_txt);
-			}
-
-			$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y'");
-			$proxy_directive_snippets_txt = '';
-			if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
-				foreach($proxy_directive_snippets as $proxy_directive_snippet){
-					$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> ';
-				}
-			}
-			if($proxy_directive_snippets_txt == '') $proxy_directive_snippets_txt = '------';
-			$app->tpl->setVar("proxy_directive_snippets_txt", $proxy_directive_snippets_txt);
-		}
-
-		$ssl_domain_select = '';
-		$tmp = $app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id = ".$this->id);
-		$ssl_domains = array($tmp["domain"], 'www.'.$tmp["domain"], '*.'.$tmp["domain"]);
-		if(is_array($ssl_domains)) {
-			foreach( $ssl_domains as $ssl_domain) {
-				$selected = ($ssl_domain == $this->dataRecord['ssl_domain'])?'SELECTED':'';
-				$ssl_domain_select .= "<option value='$ssl_domain' $selected>$ssl_domain</option>\r\n";
-			}
-		}
-		$app->tpl->setVar("ssl_domain", $ssl_domain_select);
-		unset($ssl_domain_select);
-		unset($ssl_domains);
-		unset($ssl_domain);
-
-		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);
-		}
-
-		$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
-		 */
-		$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["domain"]) {
-						$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);
-		}
-
-		// check for configuration errors in sys_datalog
-		if($this->id > 0) {
-			$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 = 'domain_id:".$app->functions->intval($this->id)."' 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");
-			if(is_array($datalog) && !empty($datalog)){
-				if(trim($datalog['error']) != ''){
-					$app->tpl->setVar("config_error_msg", nl2br(htmlentities($datalog['error'])));
-					$app->tpl->setVar("config_error_tstamp", date($app->lng('conf_format_datetime'), $datalog['tstamp']));
-				}
-			}
-		}
-
-		parent::onShowEnd();
-	}
-
-	function onShowEdit() {
-		global $app;
-		if($app->tform->checkPerm($this->id, 'riud')) $app->tform->formDef['tabs']['domain']['readonly'] = false;
-		parent::onShowEdit();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		/* check if the domain module is used - and check if the selected domain can be used! */
-		if($app->tform->getCurrentTab() == 'domain') {
-			$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['domain']);
-				if(!$domain_check) {
-					// invalid domain selected
-					$app->tform->errorMessage .= $app->tform->lng("domain_error_empty")."<br />";
-				} else {
-					$this->dataRecord['domain'] = $domain_check;
-				}
-			}
-		}
-
-		// nginx: if redirect type is proxy and redirect path is no URL, display error
-		//if($this->dataRecord["redirect_type"] == 'proxy' && substr($this->dataRecord['redirect_path'],0,1) == '/'){
-		// $app->tform->errorMessage .= $app->tform->lng("error_proxy_requires_url")."<br />";
-		//}
-
-		// Set a few fixed values
-		$this->dataRecord["parent_domain_id"] = 0;
-		$this->dataRecord["type"] = 'vhost';
-		$this->dataRecord["vhost_type"] = 'name';
-
-		$read_limits = array('limit_cgi', 'limit_ssi', 'limit_perl', 'limit_ruby', 'limit_python', 'force_suexec', 'limit_hterror', 'limit_wildcard', 'limit_ssl');
-
-
-		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 limit_traffic_quota, limit_web_domain, web_servers, parent_client_id, limit_web_quota, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			$client['web_servers_ids'] = explode(',', $client['web_servers']);
-
-			if($client['limit_cgi'] != 'y') $this->dataRecord['cgi'] = '-';
-			if($client['limit_ssi'] != 'y') $this->dataRecord['ssi'] = '-';
-			if($client['limit_perl'] != 'y') $this->dataRecord['perl'] = '-';
-			if($client['limit_ruby'] != 'y') $this->dataRecord['ruby'] = '-';
-			if($client['limit_python'] != 'y') $this->dataRecord['python'] = '-';
-			if($client['force_suexec'] == 'y') $this->dataRecord['suexec'] = 'y';
-			if($client['limit_hterror'] != 'y') $this->dataRecord['errordocs'] = '-';
-			if($client['limit_wildcard'] != 'y' && $this->dataRecord['subdomain'] == '*') $this->dataRecord['subdomain'] = '-';
-			if($client['limit_ssl'] != 'y') $this->dataRecord['ssl'] = '-';
-
-			// only generate quota and traffic warnings if value has changed
-			if($this->id > 0) {
-				$old_web_values = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
-			}  else {
-				$old_web_values = array();
-			}
-
-			//* Check the website quota of the client
-			if(isset($_POST["hd_quota"]) && $client["limit_web_quota"] >= 0 && $_POST["hd_quota"] != $old_web_values["hd_quota"]) {
-				$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ".$app->functions->intval($this->id)." AND type = 'vhost' AND ".$app->tform->getAuthSQL('u'));
-				$webquota = $tmp["webquota"];
-				$new_web_quota = $app->functions->intval($this->dataRecord["hd_quota"]);
-				if(($webquota + $new_web_quota > $client["limit_web_quota"]) || ($new_web_quota < 0 && $client["limit_web_quota"] >= 0)) {
-					$max_free_quota = floor($client["limit_web_quota"] - $webquota);
-					if($max_free_quota < 0) $max_free_quota = 0;
-					$app->tform->errorMessage .= $app->tform->lng("limit_web_quota_free_txt").": ".$max_free_quota." MB<br>";
-					// Set the quota field to the max free space
-					$this->dataRecord["hd_quota"] = $max_free_quota;
-				}
-				unset($tmp);
-				unset($tmp_quota);
-			}
-
-			//* Check the traffic quota of the client
-			if(isset($_POST["traffic_quota"]) && $client["limit_traffic_quota"] > 0 && $_POST["traffic_quota"] != $old_web_values["traffic_quota"]) {
-				$tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain WHERE domain_id != ".$app->functions->intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
-				$trafficquota = $tmp["trafficquota"];
-				$new_traffic_quota = $app->functions->intval($this->dataRecord["traffic_quota"]);
-				if(($trafficquota + $new_traffic_quota > $client["limit_traffic_quota"]) || ($new_traffic_quota < 0 && $client["limit_traffic_quota"] >= 0)) {
-					$max_free_quota = floor($client["limit_traffic_quota"] - $trafficquota);
-					if($max_free_quota < 0) $max_free_quota = 0;
-					$app->tform->errorMessage .= $app->tform->lng("limit_traffic_quota_free_txt").": ".$max_free_quota." MB<br>";
-					// Set the quota field to the max free space
-					$this->dataRecord["traffic_quota"] = $max_free_quota;
-				}
-				unset($tmp);
-				unset($tmp_quota);
-			}
-
-			if($client['parent_client_id'] > 0) {
-				// Get the limits of the reseller
-				$reseller = $app->db->queryOneRecord("SELECT limit_traffic_quota, limit_web_domain, web_servers, limit_web_quota FROM client WHERE client_id = ".$client['parent_client_id']);
-
-				//* Check the website quota of the client
-				if(isset($_POST["hd_quota"]) && $reseller["limit_web_quota"] >= 0 && $_POST["hd_quota"] != $old_web_values["hd_quota"]) {
-					$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ".$app->functions->intval($this->id)." AND type = 'vhost' AND ".$app->tform->getAuthSQL('u'));
-					$webquota = $tmp["webquota"];
-					$new_web_quota = $app->functions->intval($this->dataRecord["hd_quota"]);
-					if(($webquota + $new_web_quota > $reseller["limit_web_quota"]) || ($new_web_quota < 0 && $reseller["limit_web_quota"] >= 0)) {
-						$max_free_quota = floor($reseller["limit_web_quota"] - $webquota);
-						if($max_free_quota < 0) $max_free_quota = 0;
-						$app->tform->errorMessage .= $app->tform->lng("limit_web_quota_free_txt").": ".$max_free_quota." MB<br>";
-						// Set the quota field to the max free space
-						$this->dataRecord["hd_quota"] = $max_free_quota;
-					}
-					unset($tmp);
-					unset($tmp_quota);
-				}
-
-				//* Check the traffic quota of the client
-				if(isset($_POST["traffic_quota"]) && $reseller["limit_traffic_quota"] > 0 && $_POST["traffic_quota"] != $old_web_values["traffic_quota"]) {
-					$tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain WHERE domain_id != ".$app->functions->intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
-					$trafficquota = $tmp["trafficquota"];
-					$new_traffic_quota = $app->functions->intval($this->dataRecord["traffic_quota"]);
-					if(($trafficquota + $new_traffic_quota > $reseller["limit_traffic_quota"]) || ($new_traffic_quota < 0 && $reseller["limit_traffic_quota"] >= 0)) {
-						$max_free_quota = floor($reseller["limit_traffic_quota"] - $trafficquota);
-						if($max_free_quota < 0) $max_free_quota = 0;
-						$app->tform->errorMessage .= $app->tform->lng("limit_traffic_quota_free_txt").": ".$max_free_quota." MB<br>";
-						// Set the quota field to the max free space
-						$this->dataRecord["traffic_quota"] = $max_free_quota;
-					}
-					unset($tmp);
-					unset($tmp_quota);
-				}
-			}
-
-			// 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, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
-				$this->dataRecord["server_id"] = $tmp["server_id"];
-
-				// set the settings to current if not provided (or cleared due to limits)
-				if($this->dataRecord['cgi'] == '-') $this->dataRecord['cgi'] = $tmp['cgi'];
-				if($this->dataRecord['ssi'] == '-') $this->dataRecord['ssi'] = $tmp['ssi'];
-				if($this->dataRecord['perl'] == '-') $this->dataRecord['perl'] = $tmp['perl'];
-				if($this->dataRecord['ruby'] == '-') $this->dataRecord['ruby'] = $tmp['ruby'];
-				if($this->dataRecord['python'] == '-') $this->dataRecord['python'] = $tmp['python'];
-				if($this->dataRecord['suexec'] == '-') $this->dataRecord['suexec'] = $tmp['suexec'];
-				if($this->dataRecord['errordocs'] == '-') $this->dataRecord['errordocs'] = $tmp['errordocs'];
-				if($this->dataRecord['subdomain'] == '-') $this->dataRecord['subdomain'] = $tmp['subdomain'];
-				if($this->dataRecord['ssl'] == '-') $this->dataRecord['ssl'] = $tmp['ssl'];
-
-				unset($tmp);
-				// When the record is inserted
-			} else {
-				//* display an error if chosen server is not allowed for this client
-				if (!is_array($client['web_servers_ids']) || !in_array($this->dataRecord['server_id'], $client['web_servers_ids'])) {
-					$app->error($app->tform->wordbook['server_chosen_not_ok']);
-				}
-
-				// Check if the user may add another web_domain
-				if($client["limit_web_domain"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = $client_group_id and type = 'vhost'");
-					if($tmp["number"] >= $client["limit_web_domain"]) {
-						$app->error($app->tform->wordbook["limit_web_domain_txt"]);
-					}
-				}
-
-			}
-
-			// 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"]);
-		}
-
-		//* make sure that the email domain is lowercase
-		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
-
-		//* get the server config for this server
-		$app->uses("getconf");
-		if($this->id > 0){
-			$web_rec = $app->tform->getDataRecord($this->id);
-			$server_id = $web_rec["server_id"];
-		} else {
-			// Get the first server ID
-			$tmp = $app->db->queryOneRecord("SELECT server_id FROM server WHERE web_server = 1 ORDER BY server_name LIMIT 0,1");
-			$server_id = intval($tmp['server_id']);
-		}
-		$web_config = $app->getconf->get_server_config($app->functions->intval(isset($this->dataRecord["server_id"]) ? $this->dataRecord["server_id"] : $server_id), 'web');
-		//* Check for duplicate ssl certs per IP if SNI is disabled
-		if(isset($this->dataRecord['ssl']) && $this->dataRecord['ssl'] == 'y' && $web_config['enable_sni'] != 'y') {
-			$sql = "SELECT count(domain_id) as number FROM web_domain WHERE `ssl` = 'y' AND ip_address = '".$app->db->quote($this->dataRecord['ip_address'])."' and domain_id != ".$this->id;
-			$tmp = $app->db->queryOneRecord($sql);
-			if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("error_no_sni_txt");
-		}
-
-		// Check if pm.max_children >= pm.max_spare_servers >= pm.start_servers >= pm.min_spare_servers > 0
-		if(isset($this->dataRecord['pm_max_children']) && $this->dataRecord['pm'] == 'dynamic') {
-			if($app->functions->intval($this->dataRecord['pm_max_children'], true) >= $app->functions->intval($this->dataRecord['pm_max_spare_servers'], true) && $app->functions->intval($this->dataRecord['pm_max_spare_servers'], true) >= $app->functions->intval($this->dataRecord['pm_start_servers'], true) && $app->functions->intval($this->dataRecord['pm_start_servers'], true) >= $app->functions->intval($this->dataRecord['pm_min_spare_servers'], true) && $app->functions->intval($this->dataRecord['pm_min_spare_servers'], true) > 0){
-
-			} else {
-				$app->tform->errorMessage .= $app->tform->lng("error_php_fpm_pm_settings_txt").'<br>';
-			}
-		}
-
-		// Check rewrite rules
-		$server_type = $web_config['server_type'];
-
-		if($server_type == 'nginx' && isset($this->dataRecord['rewrite_rules']) && trim($this->dataRecord['rewrite_rules']) != '') {
-			$rewrite_rules = trim($this->dataRecord['rewrite_rules']);
-			$rewrites_are_valid = true;
-			// use this counter to make sure all curly brackets are properly closed
-			$if_level = 0;
-			// Make sure we only have Unix linebreaks
-			$rewrite_rules = str_replace("\r\n", "\n", $rewrite_rules);
-			$rewrite_rules = str_replace("\r", "\n", $rewrite_rules);
-			$rewrite_rule_lines = explode("\n", $rewrite_rules);
-			if(is_array($rewrite_rule_lines) && !empty($rewrite_rule_lines)){
-				foreach($rewrite_rule_lines as $rewrite_rule_line){
-					// ignore comments
-					if(substr(ltrim($rewrite_rule_line), 0, 1) == '#') continue;
-					// empty lines
-					if(trim($rewrite_rule_line) == '') continue;
-					// rewrite
-					if(preg_match('@^\s*rewrite\s+(^/)?\S+(\$)?\s+\S+(\s+(last|break|redirect|permanent|))?\s*;\s*$@', $rewrite_rule_line)) continue;
-					// if
-					if(preg_match('@^\s*if\s+\(\s*\$\S+(\s+(\!?(=|~|~\*))\s+(\S+|\".+\"))?\s*\)\s*\{\s*$@', $rewrite_rule_line)){
-						$if_level += 1;
-						continue;
-					}
-					// if - check for files, directories, etc.
-					if(preg_match('@^\s*if\s+\(\s*\!?-(f|d|e|x)\s+\S+\s*\)\s*\{\s*$@', $rewrite_rule_line)){
-						$if_level += 1;
-						continue;
-					}
-					// break
-					if(preg_match('@^\s*break\s*;\s*$@', $rewrite_rule_line)){
-						continue;
-					}
-					// return code [ text ]
-					if(preg_match('@^\s*return\s+\d\d\d.*;\s*$@', $rewrite_rule_line)) continue;
-					// return code URL
-					// return URL
-					if(preg_match('@^\s*return(\s+\d\d\d)?\s+(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*\@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*\s*;\s*$@', $rewrite_rule_line)) continue;
-					// set
-					if(preg_match('@^\s*set\s+\$\S+\s+\S+\s*;\s*$@', $rewrite_rule_line)) continue;
-					// closing curly bracket
-					if(trim($rewrite_rule_line) == '}'){
-						$if_level -= 1;
-						continue;
-					}
-					$rewrites_are_valid = false;
-					break;
-				}
-			}
-
-			if(!$rewrites_are_valid || $if_level != 0){
-				$app->tform->errorMessage .= $app->tform->lng("invalid_rewrite_rules_txt").'<br>';
-			}
-		}
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		// make sure that the record belongs to the clinet group and not the admin group when 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 = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
-		}
-		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
-		}
-
-		// Get configuration for the web system
-		$app->uses("getconf");
-		$web_rec = $app->tform->getDataRecord($this->id);
-		$web_config = $app->getconf->get_server_config($app->functions->intval($web_rec["server_id"]), 'web');
-		$document_root = str_replace("[website_id]", $this->id, $web_config["website_path"]);
-		$document_root = str_replace("[website_idhash_1]", $this->id_hash($page_form->id, 1), $document_root);
-		$document_root = str_replace("[website_idhash_2]", $this->id_hash($page_form->id, 1), $document_root);
-		$document_root = str_replace("[website_idhash_3]", $this->id_hash($page_form->id, 1), $document_root);
-		$document_root = str_replace("[website_idhash_4]", $this->id_hash($page_form->id, 1), $document_root);
-
-		// get the ID of the client
-		if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = $client_group_id");
-			$client_id = $app->functions->intval($client["client_id"]);
-		} else {
-			//$client_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".$app->functions->intval($this->dataRecord["client_group_id"]));
-			$client_id = $app->functions->intval($client["client_id"]);
-		}
-
-		// Set the values for document_root, system_user and system_group
-		$system_user = $app->db->quote('web'.$this->id);
-		$system_group = $app->db->quote('client'.$client_id);
-		$document_root = str_replace("[client_id]", $client_id, $document_root);
-		$document_root = str_replace("[client_idhash_1]", $this->id_hash($client_id, 1), $document_root);
-		$document_root = str_replace("[client_idhash_2]", $this->id_hash($client_id, 2), $document_root);
-		$document_root = str_replace("[client_idhash_3]", $this->id_hash($client_id, 3), $document_root);
-		$document_root = str_replace("[client_idhash_4]", $this->id_hash($client_id, 4), $document_root);
-		$document_root = $app->db->quote($document_root);
-		$php_open_basedir = str_replace("[website_path]", $document_root, $web_config["php_open_basedir"]);
-		$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir));
-		$htaccess_allow_override = $app->db->quote($web_config["htaccess_allow_override"]);
-		$added_date = date($app->lng('conf_format_dateshort'));
-		$added_by = $app->db->quote($_SESSION['s']['user']['username']);
-
-		$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root', allow_override = '$htaccess_allow_override', php_open_basedir = '$php_open_basedir', added_date = '$added_date', added_by = '$added_by'  WHERE domain_id = ".$this->id;
-		$app->db->query($sql);
-	}
-
-	function onBeforeUpdate () {
-		global $app, $conf;
-
-		//* Check if the server has been changed
-		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
-		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-			if (isset($this->dataRecord["server_id"])) {
-				$rec = $app->db->queryOneRecord("SELECT server_id from web_domain WHERE domain_id = ".$this->id);
-				if($rec['server_id'] != $this->dataRecord["server_id"]) {
-					//* Add a error message and switch back to old server
-					$app->tform->errorMessage .= $app->lng('The Server can not be changed.');
-					$this->dataRecord["server_id"] = $rec['server_id'];
-				}
-				unset($rec);
-			}
-			//* If the user is neither admin nor reseller
-		} else {
-			//* We do not allow users to change a domain which has been created by the admin
-			$rec = $app->db->queryOneRecord("SELECT sys_perm_group, domain, ip_address, ipv6_address from web_domain WHERE domain_id = ".$this->id);
-			if(isset($this->dataRecord["domain"]) && $rec['domain'] != $this->dataRecord["domain"] && $app->tform->checkPerm($this->id, 'u')) {
-				//* Add a error message and switch back to old server
-				$app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
-				$this->dataRecord["domain"] = $rec['domain'];
-			}
-			if(isset($this->dataRecord["ip_address"]) && $rec['ip_address'] != $this->dataRecord["ip_address"] && $rec['sys_perm_group'] != 'riud') {
-				$this->dataRecord["ip_address"] = $rec['ip_address'];
-			}
-			if(isset($this->dataRecord["ipv6_address"]) && $rec['ipv6_address'] != $this->dataRecord["ipv6_address"] && $rec['sys_perm_group'] != 'riud') {
-				$this->dataRecord["ipv6_address"] = $rec['ipv6_address'];
-			}
-			unset($rec);
-		}
-
-		//* Check that all fields for the SSL cert creation are filled
-		if(isset($this->dataRecord['ssl_action']) && $this->dataRecord['ssl_action'] == 'create') {
-			if($this->dataRecord['ssl_state'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_state_empty').'<br />';
-			if($this->dataRecord['ssl_locality'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_locality_empty').'<br />';
-			if($this->dataRecord['ssl_organisation'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_organisation_empty').'<br />';
-			if($this->dataRecord['ssl_organisation_unit'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_organisation_unit_empty').'<br />';
-			if($this->dataRecord['ssl_country'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_country_empty').'<br />';
-		}
-
-		if(isset($this->dataRecord['ssl_action']) && $this->dataRecord['ssl_action'] == 'save') {
-			if(trim($this->dataRecord['ssl_cert']) == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_cert_empty').'<br />';
-		}
-
-	}
-
-	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 = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
-		}
-		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
-		}
-
-		// Get configuration for the web system
-		$app->uses("getconf");
-		$web_rec = $app->tform->getDataRecord($this->id);
-		$web_config = $app->getconf->get_server_config($app->functions->intval($web_rec["server_id"]), 'web');
-		$document_root = str_replace("[website_id]", $this->id, $web_config["website_path"]);
-		$page_formid = isset($page_form->id) ? $page_form->id : '';
-		$document_root = str_replace("[website_idhash_1]", $this->id_hash($page_formid, 1), $document_root);
-		$document_root = str_replace("[website_idhash_2]", $this->id_hash($page_formid, 1), $document_root);
-		$document_root = str_replace("[website_idhash_3]", $this->id_hash($page_formid, 1), $document_root);
-		$document_root = str_replace("[website_idhash_4]", $this->id_hash($page_formid, 1), $document_root);
-
-		// get the ID of the client
-		if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = $client_group_id");
-			$client_id = $app->functions->intval($client["client_id"]);
-		} elseif (isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = $this->dataRecord["client_group_id"];
-			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".$app->functions->intval(@$this->dataRecord["client_group_id"]));
-			$client_id = $app->functions->intval($client["client_id"]);
-		} else {
-			$client_group_id = $web_rec['sys_groupid'];
-			$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".$app->functions->intval($client_group_id));
-			$client_id = $app->functions->intval($client["client_id"]);
-		}
-
-		if(($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) &&  isset($this->dataRecord["client_group_id"]) && $this->dataRecord["client_group_id"] != $this->oldDataRecord["sys_groupid"]) {
-			// Set the values for document_root, system_user and system_group
-			$system_user = $app->db->quote('web'.$this->id);
-			$system_group = $app->db->quote('client'.$client_id);
-			$document_root = str_replace("[client_id]", $client_id, $document_root);
-			$document_root = str_replace("[client_idhash_1]", $this->id_hash($client_id, 1), $document_root);
-			$document_root = str_replace("[client_idhash_2]", $this->id_hash($client_id, 2), $document_root);
-			$document_root = str_replace("[client_idhash_3]", $this->id_hash($client_id, 3), $document_root);
-			$document_root = str_replace("[client_idhash_4]", $this->id_hash($client_id, 4), $document_root);
-			$document_root = $app->db->quote($document_root);
-
-			$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root' WHERE domain_id = ".$this->id;
-			//$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group' WHERE domain_id = ".$this->id;
-			$app->db->query($sql);
-
-			// Update the FTP user(s) too
-			$records = $app->db->queryAllRecords("SELECT ftp_user_id FROM ftp_user WHERE parent_domain_id = ".$this->id);
-			foreach($records as $rec) {
-				$app->db->datalogUpdate('ftp_user', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."', uid = '$system_user', gid = '$system_group', dir = '$document_root'", 'ftp_user_id', $app->functions->intval($rec['ftp_user_id']));
-			}
-			unset($records);
-			unset($rec);
-
-			// Update the Shell user(s) too
-			$records = $app->db->queryAllRecords("SELECT shell_user_id FROM shell_user WHERE parent_domain_id = ".$this->id);
-			foreach($records as $rec) {
-				$app->db->datalogUpdate('shell_user', "sys_userid = '".$web_rec['sys_userid']."', sys_groupid = '".$web_rec['sys_groupid']."', puser = '$system_user', pgroup = '$system_group', dir = '$document_root'", 'shell_user_id', $app->functions->intval($rec['shell_user_id']));
-			}
-			unset($records);
-			unset($rec);
-
-			//* Update all subdomains and alias domains
-			$records = $app->db->queryAllRecords("SELECT domain_id, `domain`, `type`, `web_folder` FROM web_domain WHERE parent_domain_id = ".$this->id);
-			foreach($records as $rec) {
-				$update_columns = "sys_userid = '".$web_rec['sys_userid']."', sys_groupid = '".$web_rec['sys_groupid']."'";
-				if($rec['type'] == 'vhostsubdomain') {
-					$php_open_basedir = str_replace("[website_path]/web", $document_root.'/'.$rec['web_folder'], $web_config["php_open_basedir"]);
-					$php_open_basedir = str_replace("[website_domain]/web", $rec['domain'].'/'.$rec['web_folder'], $php_open_basedir);
-					$php_open_basedir = str_replace("[website_path]", $document_root, $php_open_basedir);
-					$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $rec['domain'], $php_open_basedir));
-
-					$update_columns .= ", document_root = '".$document_root."', `php_open_basedir` = '".$php_open_basedir."'";
-				}
-				$app->db->datalogUpdate('web_domain', $update_columns, 'domain_id', $rec['domain_id']);
-			}
-			unset($records);
-			unset($rec);
-
-			//* Update all databases
-			$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ".$this->id);
-			foreach($records as $rec) {
-				$app->db->datalogUpdate('web_database', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."'", 'database_id', $app->functions->intval($rec['database_id']));
-			}
-			unset($records);
-			unset($rec);
-
-		}
-
-		//* If the domain name has been changed, we will have to change all subdomains + APS instances
-		if(!empty($this->dataRecord["domain"]) && !empty($this->oldDataRecord["domain"]) && $this->dataRecord["domain"] != $this->oldDataRecord["domain"]) {
-			$records = $app->db->queryAllRecords("SELECT domain_id,domain FROM web_domain WHERE (type = 'subdomain' OR type = 'vhostsubdomain') AND domain LIKE '%.".$app->db->quote($this->oldDataRecord["domain"])."'");
-			foreach($records as $rec) {
-				$subdomain = $app->db->quote(str_replace($this->oldDataRecord["domain"], $this->dataRecord["domain"], $rec['domain']));
-				$app->db->datalogUpdate('web_domain', "domain = '".$subdomain."'", 'domain_id', $rec['domain_id']);
-			}
-			unset($records);
-			unset($rec);
-			unset($subdomain);
-
-			// Update APS instances
-			$records = $app->db->queryAllRecords("SELECT id, instance_id FROM aps_instances_settings WHERE name = 'main_domain' AND value = '".$app->db->quote($this->oldDataRecord["domain"])."'");
-			if(is_array($records) && !empty($records)){
-				foreach($records as $rec){
-					$app->db->datalogUpdate('aps_instances_settings', "value = '".$app->db->quote($this->dataRecord["domain"])."'", 'id', $rec['id']);
-					// Reinstall of package needed?
-					//$app->db->datalogUpdate('aps_instances', "instance_status = '1'", 'id', $rec['instance_id']);
-				}
-			}
-			unset($records);
-			unset($rec);
-		}
-
-		//* Set allow_override if empty
-		if($web_rec['allow_override'] == '') {
-			$sql = "UPDATE web_domain SET allow_override = '".$app->db->quote($web_config["htaccess_allow_override"])."' WHERE domain_id = ".$this->id;
-			$app->db->query($sql);
-		}
-
-		//* Set php_open_basedir if empty or domain or client has been changed
-		if(empty($web_rec['php_open_basedir']) ||
-			(!empty($this->dataRecord["domain"]) && !empty($this->oldDataRecord["domain"]) && $this->dataRecord["domain"] != $this->oldDataRecord["domain"])) {
-			$php_open_basedir = $web_rec['php_open_basedir'];
-			$php_open_basedir = $app->db->quote(str_replace($this->oldDataRecord['domain'], $web_rec['domain'], $php_open_basedir));
-			$sql = "UPDATE web_domain SET php_open_basedir = '$php_open_basedir' WHERE domain_id = ".$this->id;
-			$app->db->query($sql);
-		}
-		if(empty($web_rec['php_open_basedir']) ||
-			(isset($this->dataRecord["client_group_id"]) && $this->dataRecord["client_group_id"] != $this->oldDataRecord["sys_groupid"])) {
-			$document_root = $app->db->quote(str_replace("[client_id]", $client_id, $document_root));
-			$php_open_basedir = str_replace("[website_path]", $document_root, $web_config["php_open_basedir"]);
-			$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir));
-			$sql = "UPDATE web_domain SET php_open_basedir = '$php_open_basedir' WHERE domain_id = ".$this->id;
-			$app->db->query($sql);
-		}
-
-		//* Change database backup options when web backup options have been changed
-		if(isset($this->dataRecord['backup_interval']) && ($this->dataRecord['backup_interval'] != $this->oldDataRecord['backup_interval'] || $this->dataRecord['backup_copies'] != $this->oldDataRecord['backup_copies'])) {
-			//* Update all databases
-			$backup_interval = $app->functions->intval($this->dataRecord['backup_interval']);
-			$backup_copies = $app->functions->intval($this->dataRecord['backup_copies']);
-			$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ".$this->id);
-			foreach($records as $rec) {
-				$app->db->datalogUpdate('web_database', "backup_interval = '$backup_interval', backup_copies = '$backup_copies'", 'database_id', $rec['database_id']);
-			}
-			unset($records);
-			unset($rec);
-			unset($backup_copies);
-			unset($backup_interval);
-		}
-
-		//* Change vhost subdomain ip/ipv6 if domain ip/ipv6 has changed
-		if(isset($this->dataRecord['ip_address']) && ($this->dataRecord['ip_address'] != $this->oldDataRecord['ip_address'] || $this->dataRecord['ipv6_address'] != $this->oldDataRecord['ipv6_address'])) {
-			$records = $app->db->queryAllRecords("SELECT domain_id FROM web_domain WHERE type = 'vhostsubdomain' AND parent_domain_id = ".$this->id);
-			foreach($records as $rec) {
-				$app->db->datalogUpdate('web_domain', "ip_address = '".$app->db->quote($web_rec['ip_address'])."', ipv6_address = '".$app->db->quote($web_rec['ipv6_address'])."'", 'domain_id', $rec['domain_id']);
-			}
-			unset($records);
-			unset($rec);
-		}
-	}
-
-	function onAfterDelete() {
-		global $app, $conf;
-
-		// Delete the sub and alias domains
-		$child_domains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$this->id);
-		foreach($child_domains as $d) {
-			// Saving record to datalog when db_history enabled
-			if($app->tform->formDef["db_history"] == 'yes') {
-				$app->tform->datalogSave('DELETE', $d["domain_id"], $d, array());
-			}
-
-			$app->db->query("DELETE FROM web_domain WHERE domain_id = ".$app->functions->intval($d["domain_id"])." LIMIT 0,1");
-		}
-		unset($child_domains);
-		unset($d);
-
-	}
-
-}
-
-$page = new page_action;
-$page->onLoad();
-
-?>
diff --git a/interface/web/sites/web_sites_stats.php.bak b/interface/web/sites/web_sites_stats.php.bak
deleted file mode 100644
index 9bf96cb6a7e973e20e9ab6be9f0aab073605c1f1..0000000000000000000000000000000000000000
--- a/interface/web/sites/web_sites_stats.php.bak
+++ /dev/null
@@ -1,188 +0,0 @@
-<?php
-require_once '../../lib/config.inc.php';
-require_once '../../lib/app.inc.php';
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/web_sites_stats.list.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-//* Check permissions for module
-$app->auth->check_module_permissions('sites');
-
-$app->uses('functions');
-
-$app->load('listform_actions');
-
-class list_action extends listform_actions {
-
-	private $sum_this_month = 0;
-	private $sum_this_year = 0;
-	private $sum_last_month = 0;
-	private $sum_last_year = 0;
-
-	function prepareDataRow($rec)
-	{
-		global $app;
-
-		$rec = $app->listform->decode($rec);
-
-		//* Alternating datarow colors
-		$this->DataRowColor = ($this->DataRowColor == '#FFFFFF') ? '#EEEEEE' : '#FFFFFF';
-		$rec['bgcolor'] = $this->DataRowColor;
-
-		//* Set the statistics colums
-		//** Traffic of the current month
-		$tmp_year = date('Y');
-		$tmp_month = date('m');
-		$tmp_rec = $app->db->queryOneRecord("SELECT SUM(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."' AND YEAR(traffic_date) = '$tmp_year' AND MONTH(traffic_date) = '$tmp_month'");
-//		$rec['this_month'] = number_format($tmp_rec['t']/1024/1024, 0, '.', ' ');
-//		$this->sum_this_month += ($tmp_rec['t']/1024/1024);
-		$rec['this_month'] = $app->functions->formatBytes($tmp_rec['t']);
-		$this->sum_this_month += $app->functions->formatBytes($tmp_rec['t']);
-
-
-		//** Traffic of the current year
-		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."' AND YEAR(traffic_date) = '$tmp_year'");
-//		$rec['this_year'] = number_format($tmp_rec['t']/1024/1024, 0, '.', ' ');
-//		$this->sum_this_year += ($tmp_rec['t']/1024/1024);
-		$rec['this_year'] = $app->functions->formatBytes($tmp_rec['t']);
-		$this->sum_this_year += $app->functions->formatBytes($tmp_rec['t']);
-
-		//** Traffic of the last month
-		$tmp_year = date('Y', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
-		$tmp_month = date('m', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
-		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."' AND YEAR(traffic_date) = '$tmp_year' AND MONTH(traffic_date) = '$tmp_month'");
-//		$rec['last_month'] = number_format($tmp_rec['t']/1024/1024, 0, '.', ' ');
-//		$this->sum_last_month += ($tmp_rec['t']/1024/1024);
-		$rec['last_month'] = $app->functions->formatBytes($tmp_rec['t']);
-		$this->sum_last_month += $app->functions->formatBytes($tmp_rec['t']);
-
-		//** Traffic of the last year
-		$tmp_year = date('Y', mktime(0, 0, 0, date("m"), date("d"), date("Y")-1));
-		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."' AND YEAR(traffic_date) = '$tmp_year'");
-//		$rec['last_year'] = number_format($tmp_rec['t']/1024/1024, 0, '.', ' ');
-//		$this->sum_last_year += ($tmp_rec['t']/1024/1024);
-		$rec['last_year'] = $app->functions->formatBytes($tmp_rec['t']);
-		$this->sum_last_year += $app->functions->formatBytes($tmp_rec['t']);
-
-		//* The variable "id" contains always the index variable
-		$rec['id'] = $rec[$this->idx_key];
-
-		return $rec;
-	}
-
-	function onShowEnd()
-	{
-		global $app;
-
-		$app->tpl->setVar('sum_this_month', number_format($app->functions->intval($this->sum_this_month), 0, '.', ' '));
-		$app->tpl->setVar('sum_this_year', number_format($app->functions->intval($this->sum_this_year), 0, '.', ' '));
-		$app->tpl->setVar('sum_last_month', number_format($app->functions->intval($this->sum_last_month), 0, '.', ' '));
-		$app->tpl->setVar('sum_last_year', number_format($app->functions->intval($this->sum_last_year), 0, '.', ' '));
-		$app->tpl->setVar('sum_txt', $app->listform->lng('sum_txt'));
-
-		$app->tpl_defaults();
-		$app->tpl->pparse();
-	}
-
-	function getQueryString() {
-		global $app;
-		$sql_where = '';
-
-		//* Generate the search sql
-		if($app->listform->listDef['auth'] != 'no') {
-			if($_SESSION['s']['user']['typ'] == "admin") {
-				$sql_where = '';
-			} else {
-				$sql_where = $app->tform->getAuthSQL('r', $app->listform->listDef['table']).' and';
-				//$sql_where = $app->tform->getAuthSQL('r').' and';
-			}
-		}
-		if($this->SQLExtWhere != '') {
-			$sql_where .= ' '.$this->SQLExtWhere.' and';
-		}
-
-		$sql_where = $app->listform->getSearchSQL($sql_where);
-		if($app->listform->listDef['join_sql']) $sql_where .= ' AND '.$app->listform->listDef['join_sql'];
-		$app->tpl->setVar($app->listform->searchValues);
-
-		$order_by_sql = $this->SQLOrderBy;
-
-		//* Generate SQL for paging
-		$limit_sql = $app->listform->getPagingSQL($sql_where);
-		$app->tpl->setVar('paging', $app->listform->pagingHTML);
-
-		$extselect = '';
-		$join = '';
-
-		if(!empty($_SESSION['search'][$_SESSION['s']['module']['name'].$app->listform->listDef["name"].$app->listform->listDef['table']]['order'])){
-			$order = str_replace(' DESC', '', $_SESSION['search'][$_SESSION['s']['module']['name'].$app->listform->listDef["name"].$app->listform->listDef['table']]['order']);
-			list($tmp_table, $order) = explode('.', $order);
-			if($order == 'web_traffic_last_month'){
-				$tmp_year = date('Y', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
-				$tmp_month = date('m', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
-				$extselect .= ', SUM(wt.traffic_bytes) as calctraffic';
-				$join .= ' INNER JOIN web_traffic as wt ON '.$app->listform->listDef['table'].'.domain = wt.hostname ';
-				$sql_where .= " AND YEAR(wt.traffic_date) = '$tmp_year' AND MONTH(wt.traffic_date) = '$tmp_month'";
-				$order_by_sql = str_replace($app->listform->listDef['table'].'.web_traffic_last_month', 'calctraffic', $order_by_sql);
-				$order_by_sql = "GROUP BY domain ".$order_by_sql;
-			} elseif($order == 'web_traffic_this_month'){
-				$tmp_year = date('Y');
-				$tmp_month = date('m');
-				$extselect .= ', SUM(wt.traffic_bytes) as calctraffic';
-				$join .= ' INNER JOIN web_traffic as wt ON '.$app->listform->listDef['table'].'.domain = wt.hostname ';
-				$sql_where .= " AND YEAR(wt.traffic_date) = '$tmp_year' AND MONTH(wt.traffic_date) = '$tmp_month'";
-				$order_by_sql = str_replace($app->listform->listDef['table'].'.web_traffic_this_month', 'calctraffic', $order_by_sql);
-				$order_by_sql = "GROUP BY domain ".$order_by_sql;
-			} elseif($order == 'web_traffic_last_year'){
-				$tmp_year = date('Y', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
-				$extselect .= ', SUM(wt.traffic_bytes) as calctraffic';
-				$join .= ' INNER JOIN web_traffic as wt ON '.$app->listform->listDef['table'].'.domain = wt.hostname ';
-				$sql_where .= " AND YEAR(wt.traffic_date) = '$tmp_year'";
-				$order_by_sql = str_replace($app->listform->listDef['table'].'.web_traffic_last_year', 'calctraffic', $order_by_sql);
-				$order_by_sql = "GROUP BY domain ".$order_by_sql;
-			} elseif($order == 'web_traffic_this_year'){
-				$tmp_year = date('Y');
-				$extselect .= ', SUM(wt.traffic_bytes) as calctraffic';
-				$join .= ' INNER JOIN web_traffic as wt ON '.$app->listform->listDef['table'].'.domain = wt.hostname ';
-				$sql_where .= " AND YEAR(wt.traffic_date) = '$tmp_year'";
-				$order_by_sql = str_replace($app->listform->listDef['table'].'.web_traffic_this_year', 'calctraffic', $order_by_sql);
-				$order_by_sql = "GROUP BY domain ".$order_by_sql;
-			}
-		}
-
-		if($this->SQLExtSelect != '') {
-			if(substr($this->SQLExtSelect, 0, 1) != ',') $this->SQLExtSelect = ','.$this->SQLExtSelect;
-			$extselect .= $this->SQLExtSelect;
-		}
-
-		$table_selects = array();
-		$table_selects[] = trim($app->listform->listDef['table']).'.*';
-		$app->listform->listDef['additional_tables'] = trim($app->listform->listDef['additional_tables']);
-		if($app->listform->listDef['additional_tables'] != ''){
-			$additional_tables = explode(',', $app->listform->listDef['additional_tables']);
-			foreach($additional_tables as $additional_table){
-				$table_selects[] = trim($additional_table).'.*';
-			}
-		}
-		$select = implode(', ', $table_selects);
-
-		$sql = 'SELECT '.$select.$extselect.' FROM '.$app->listform->listDef['table'].($app->listform->listDef['additional_tables'] != ''? ','.$app->listform->listDef['additional_tables'] : '')."$join WHERE $sql_where $order_by_sql $limit_sql";
-		return $sql;
-	}
-
-}
-
-$list = new list_action;
-$list->SQLExtWhere = "(web_domain.type = 'vhost' or web_domain.type = 'vhostsubdomain')";
-$list->SQLOrderBy = 'ORDER BY web_domain.domain';
-$list->onLoad();
-
-
-?>
diff --git a/interface/web/sites/web_vhost_aliasdomain_edit.php b/interface/web/sites/web_vhost_aliasdomain_edit.php
index 2c63881c4face6e629411e968975d26602b601bb..e8d5d546e3a8e4b5d16203fc2f48e7185f7b86b3 100644
--- a/interface/web/sites/web_vhost_aliasdomain_edit.php
+++ b/interface/web/sites/web_vhost_aliasdomain_edit.php
@@ -389,18 +389,15 @@ class page_action extends tform_actions {
 			$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['sel_domain']);
+				$domain_check = $app->tools_sites->checkDomainModuleDomain($this->dataRecord['domain']);
 				if(!$domain_check) {
 					// invalid domain selected
 					$app->tform->errorMessage .= $app->tform->lng("domain_error_empty")."<br />";
 				} else {
-					$this->dataRecord['domain'] = $this->dataRecord['domain'] . '.' . $domain_check;
+					$this->dataRecord['domain'] = $domain_check;
 				}
-			} else {
-				$this->dataRecord["domain"] = $this->dataRecord["domain"].'.'.$parent_domain["domain"];
 			}
 
-
 			$this->dataRecord['web_folder'] = strtolower($this->dataRecord['web_folder']);
 			if(substr($this->dataRecord['web_folder'], 0, 1) === '/') $this->dataRecord['web_folder'] = substr($this->dataRecord['web_folder'], 1);
 			if(substr($this->dataRecord['web_folder'], -1) === '/') $this->dataRecord['web_folder'] = substr($this->dataRecord['web_folder'], 0, -1);
diff --git a/server/lib/classes/aps_installer.inc.php.bak b/server/lib/classes/aps_installer.inc.php.bak
deleted file mode 100644
index 2925c7a5418bc06b22e0f60cdaf697390313ba56..0000000000000000000000000000000000000000
--- a/server/lib/classes/aps_installer.inc.php.bak
+++ /dev/null
@@ -1,749 +0,0 @@
-<?php
-/*
-Copyright (c) 2012, ISPConfig UG
-Contributors: web wack creations,  http://www.web-wack.at
-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.
-*/
-require_once 'aps_base.inc.php';
-
-@set_time_limit(0);
-@ignore_user_abort(1);
-
-class ApsInstaller extends ApsBase
-{
-	private $handle_type = '';
-	private $domain = '';
-	private $document_root = '';
-	private $sublocation = '';
-	private $local_installpath = '';
-	private $dbhost = '';
-	private $newdb_name = '';
-	private $newdb_user = '';
-	private $file_owner_user = '';
-	private $file_owner_group = '';
-	private $putenv = array();
-
-	/**
-	 * Constructor
-	 *
-	 * @param $app the application instance (db handle + log method)
-	 * @param $interface_mode act in interface (true) or server mode (false)
-	 */
-
-
-	public function __construct($app, $interface_mode = false)
-	{
-		parent::__construct($app, 'APS installer: ', $interface_mode);
-	}
-
-
-
-	/**
-	 * Before the cron is executed, make sure all necessary options are set
-	 * and all functions are available
-	 */
-	private function checkRequirements()
-	{
-		global $app;
-		try
-		{
-			// Check if exec() is not disabled
-			$disabled_func = explode(',', @ini_get('disable_functions'));
-			if(in_array('exec', $disabled_func)) throw new Exception('the call of exec() is disabled');
-
-			// Check if safe_mode is disabled (needed for correct putenv, chmod, chown handling)
-			if(@ini_get('safe_mode')) throw new Exception('the safe_mode restriction is on');
-
-			return true;
-		}
-
-		catch(Exception $e)
-		{
-			$app->log('Aborting execution because '.$e->getMessage(), 1);
-			return false;
-		}
-	}
-
-
-
-	/**
-	 * Get a file from a ZIP archive and either return it's content or
-	 * extract it to a given destination
-	 *
-	 * @param $zipfile the ZIP file to work with
-	 * @param $subfile the file from which to get the content
-	 * @param $destfolder the optional extraction destination
-	 * @param $destname the optional target file name when extracting
-	 * @return string or boolean
-	 */
-	private function getContentFromZIP($zipfile, $subfile, $destfolder = '', $destname = '')
-	{
-		try
-		{
-			$zip = new ZipArchive;
-			$res = $zip->open(realpath($zipfile));
-			if(!$res) throw new Exception('Cannot open ZIP file '.$zipfile);
-
-			// If no destination is given, the content is returned, otherwise
-			// the $subfile is extracted to $destination
-			if($destfolder == '')
-			{
-				$fh = $zip->getStream($subfile);
-				if(!$fh) throw new Exception('Cannot read '.$subfile.' from '.$zipfile);
-
-				$subfile_content = '';
-				while(!feof($fh)) $subfile_content .= fread($fh, 8192);
-
-				fclose($fh);
-
-				return $subfile_content;
-			}
-			else
-			{
-				// extractTo would be suitable but has no target name parameter
-				//$ind = $zip->locateName($subfile);
-				//$ex = $zip->extractTo($destination, array($zip->getNameIndex($ind)));
-				if($destname == '') $destname = basename($subfile);
-				$ex = @copy('zip://'.$zipfile.'#'.$subfile, $destfolder.$destname);
-				if(!$ex) throw new Exception('Cannot extract '.$subfile.' to '.$destfolder);
-			}
-
-			$zip->close();
-
-		}
-
-		catch(Exception $e)
-		{
-			// The exception message is only interesting for debugging reasons
-			// echo $e->getMessage();
-			return false;
-		}
-	}
-
-
-
-	/**
-	 * Extract the complete directory of a ZIP file
-	 *
-	 * @param $filename the file to unzip
-	 * @param $directory the ZIP inside directory to unzip
-	 * @param $destination the place where to extract the data
-	 * @return boolean
-	 */
-	private function extractZip($filename, $directory, $destination)
-	{
-		if(!file_exists($filename)) return false;
-
-		// Fix the paths
-		if(substr($directory, -1) == '/') $directory = substr($directory, 0, strlen($directory) - 1);
-		if(substr($destination, -1) != '/') $destination .= '/';
-
-		// Read and extract the ZIP file
-		$ziphandle = zip_open(realpath($filename));
-		if(is_resource($ziphandle))
-		{
-			while($entry = zip_read($ziphandle))
-			{
-				if(substr(zip_entry_name($entry), 0, strlen($directory)) == $directory)
-				{
-					// Modify the relative ZIP file path
-					$new_path = substr(zip_entry_name($entry), strlen($directory));
-
-					if(substr($new_path, -1) == '/') // Identifier for directories
-						{
-						if(!file_exists($destination.$new_path)) mkdir($destination.$new_path, 0777, true);
-					}
-					else // Handle files
-						{
-						if(zip_entry_open($ziphandle, $entry))
-						{
-							$new_dir = dirname($destination.$new_path);
-							if(!file_exists($new_dir)) mkdir($new_dir, 0777, true);
-
-							$file = fopen($destination.$new_path, 'wb');
-							if($file)
-							{
-								while($line = zip_entry_read($entry)) fwrite($file, $line);
-								fclose($file);
-							}
-							else return false;
-						}
-					}
-				}
-			}
-
-			zip_close($ziphandle);
-			return true;
-		}
-
-		return false;
-	}
-
-	/**
-	 * Setup the path environment variables for the install script
-	 *
-	 * @param $parent_mapping the SimpleXML instance with the current mapping position
-	 * @param $url the relative path within the mapping tree
-	 * @param $path the absolute path within the mapping tree
-	 */
-	private function processMappings($parent_mapping, $url, $path)
-	{
-		if($parent_mapping && $parent_mapping != null)
-		{
-			$writable = parent::getXPathValue($parent_mapping, 'php:permissions/@writable');
-			$readable = parent::getXPathValue($parent_mapping, 'php:permissions/@readable');
-
-			// set the write permission
-			if($writable == 'true')
-			{
-				if(is_dir($path)) chmod($path, 0775);
-				else chmod($path, 0664);
-			}
-
-			// set non-readable permission
-			if($readable == 'false')
-			{
-				if(is_dir($path)) chmod($path, 0333);
-				else chmod($path, 0222);
-			}
-		}
-
-		// Set the environment variables
-		$env = str_replace('/', '_', $url);
-		$this->putenv[] = 'WEB_'.$env.'_DIR='.$path;
-
-		// Step recursively into further mappings
-		if($parent_mapping && $parent_mapping != null)
-		{
-			foreach($parent_mapping->mapping as $mapping)
-			{
-				if($url == '/') $this->processMappings($mapping, $url.$mapping['url'], $path.$mapping['url']);
-				else $this->processMappings($mapping, $url.'/'.$mapping['url'], $path.'/'.$mapping['url']);
-			}
-		}
-	}
-
-
-
-	/**
-	 * Setup the environment with data for the install location
-	 *
-	 * @param $task an array containing all install related data
-	 */
-	private function prepareLocation($task)
-	{
-		global $app;
-
-		// Get the domain name to use for the installation
-		// Would be possible in one query too, but we use 2 for easier debugging
-		$main_domain = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings
-            WHERE name = 'main_domain' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
-		$this->domain = $main_domain['value'];
-
-		// Get the document root
-		$domain_res = $app->db->queryOneRecord("SELECT document_root, web_folder, type FROM web_domain
-            WHERE domain = '".$app->db->quote($this->domain)."';");
-		$this->document_root = $domain_res['document_root'];
-
-		// Get the sub location
-		$location_res = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings
-            WHERE name = 'main_location' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
-		$this->sublocation = $location_res['value'];
-
-		// Make sure the document_root ends with /
-		if(substr($this->document_root, -1) != '/') $this->document_root .= '/';
-
-		// Attention: ISPConfig Special: web files are in subfolder 'web' -> append it:
-		if($domain_res['type'] == 'vhostsubdomain') $this->document_root .= $domain_res['web_folder'] . '/';
-		else $this->document_root .= 'web/';
-
-		// If a subfolder is given, make sure it's path doesn't begin with / i.e. /phpbb
-		if(substr($this->sublocation, 0, 1) == '/') $this->sublocation = substr($this->sublocation, 1);
-
-		// If the package isn't installed to a subfolder, remove the / at the end of the document root
-		if(empty($this->sublocation)) $this->document_root = substr($this->document_root, 0, strlen($this->document_root) - 1);
-
-		// Set environment variables, later processed by the package install script
-		$this->putenv[] = 'BASE_URL_SCHEME=http';
-		// putenv('BASE_URL_PORT') -> omitted as it's 80 by default
-		$this->putenv[] = 'BASE_URL_HOST='.$this->domain;
-		$this->putenv[] = 'BASE_URL_PATH='.$this->sublocation.'/';
-	}
-
-
-
-	/**
-	 * Setup a database (if needed) and the appropriate environment variables
-	 *
-	 * @param $task an array containing all install related data
-	 * @param $sxe a SimpleXMLElement handle, holding APP-META.xml
-	 */
-	private function prepareDatabase($task, $sxe)
-	{
-		global $app;
-
-		$db_id = parent::getXPathValue($sxe, '//db:id');
-		if(empty($db_id)) return; // No database needed
-
-		/* WARNING: if this will ever be uncommented please check the updated prefix handling for user and db names!!!
-         *
-        // Set the database owner to the domain owner
-        // ISPConfig identifies the owner by the sys_groupid (not sys_userid!)
-        // so sys_userid can be set to any value
-        $perm = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM web_domain
-            WHERE domain = '".$this->domain."';");
-        $task['sys_groupid'] = $perm['sys_groupid'];
-        $serverid = $perm['server_id'];
-
-        // Get the database prefix and db user prefix
-        $app->uses('getconf');
-        $global_config = $app->getconf->get_global_config('sites');
-        $dbname_prefix = str_replace('[CLIENTID]', '', $global_config['dbname_prefix']);
-        $dbuser_prefix = str_replace('[CLIENTID]', '', $global_config['dbuser_prefix']);
-        $this->dbhost = DB_HOST; // Taken from config.inc.php
-        if(empty($this->dbhost)) $this->dbhost = 'localhost'; // Just to ensure any hostname... ;)
-
-        $this->newdb_name = $dbname_prefix.$task['CustomerID'].'aps'.$task['InstanceID'];
-        $this->newdb_user = $dbuser_prefix.$task['CustomerID'].'aps'.$task['InstanceID'];
-        $dbpw_res = $app->db->queryOneRecord("SELECT Value FROM aps_instances_settings
-            WHERE Name = 'main_database_password' AND InstanceID = '".$app->db->quote($task['InstanceID'])."';");
-        $newdb_pw = $dbpw_res['Value'];
-
-        // In any case delete an existing database (install and removal procedure)
-        $app->db->query('DROP DATABASE IF EXISTS `'.$app->db->quote($this->newdb_name).'`;');
-        // Delete an already existing database with this name
-        $app->db->query("DELETE FROM web_database WHERE database_name = '".$app->db->quote($this->newdb_name)."';");
-
-
-        // Create the new database and assign it to a user
-        if($this->handle_type == 'install')
-        {
-            $app->db->query('CREATE DATABASE IF NOT EXISTS `'.$app->db->quote($this->newdb_name).'`;');
-            $app->db->query('GRANT ALL PRIVILEGES ON '.$app->db->quote($this->newdb_name).'.* TO '.$app->db->quote($this->newdb_user).'@'.$app->db->quote($this->dbhost).' IDENTIFIED BY \'password\';');
-            $app->db->query('SET PASSWORD FOR '.$app->db->quote($this->newdb_user).'@'.$app->db->quote($this->dbhost).' = PASSWORD(\''.$newdb_pw.'\');');
-            $app->db->query('FLUSH PRIVILEGES;');
-
-            // Add the new database to the customer databases
-            // Assumes: charset = utf8
-            $app->db->query('INSERT INTO web_database (sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id,
-                type, database_name, database_user, database_password, database_charset, remote_access, remote_ips, active)
-                VALUES ('.$task['sys_userid'].', '.$task['sys_groupid'].', "'.$task['sys_perm_user'].'", "'.$task['sys_perm_group'].'",
-                "'.$task['sys_perm_other'].'", '.$app->db->quote($serverid).', "mysql", "'.$app->db->quote($this->newdb_name).'",
-                "'.$app->db->quote($this->newdb_user).'", "'.$app->db->quote($newdb_pw).'", "utf8", "n", "", "y");');
-        }
-		*/
-
-		$mysqlver_res = $app->db->queryOneRecord('SELECT VERSION() as ver;');
-		$mysqlver = $mysqlver_res['ver'];
-
-		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_password' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
-		$newdb_pw = $tmp['value'];
-
-		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_host' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
-		$newdb_host = $tmp['value'];
-
-		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_name' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
-		$newdb_name = $tmp['value'];
-
-		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_login' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
-		$newdb_login = $tmp['value'];
-
-		$this->putenv[] = 'DB_'.$db_id.'_TYPE=mysql';
-		$this->putenv[] = 'DB_'.$db_id.'_NAME='.$newdb_name;
-		$this->putenv[] = 'DB_'.$db_id.'_LOGIN='.$newdb_login;
-		$this->putenv[] = 'DB_'.$db_id.'_PASSWORD='.$newdb_pw;
-		$this->putenv[] = 'DB_'.$db_id.'_HOST='.$newdb_host;
-		$this->putenv[] = 'DB_'.$db_id.'_PORT=3306';
-		$this->putenv[] = 'DB_'.$db_id.'_VERSION='.$mysqlver;
-	}
-
-
-
-	/**
-	 * Extract all needed files from the package
-	 *
-	 * @param $task an array containing all install related data
-	 * @param $sxe a SimpleXMLElement handle, holding APP-META.xml
-	 * @return boolean
-	 */
-	private function prepareFiles($task, $sxe)
-	{
-		global $app;
-
-		// Basically set the mapping for APS version 1.0, if not available -> newer way
-		$mapping = $sxe->mapping;
-		$mapping_path = $sxe->mapping['path'];
-		$mapping_url = $sxe->mapping['url'];
-		if(empty($mapping))
-		{
-			$mapping = $sxe->service->provision->{'url-mapping'}->mapping;
-			$mapping_path = $sxe->service->provision->{'url-mapping'}->mapping['path'];
-			$mapping_url = $sxe->service->provision->{'url-mapping'}->mapping['url'];
-		}
-
-		try
-		{
-			// Make sure we have a valid mapping path (at least /)
-			if(empty($mapping_path)) throw new Exception('Unable to determine a mapping path');
-
-			$this->local_installpath = $this->document_root.$this->sublocation.'/';
-
-			// Now delete an existing folder (affects install and removal in the same way)
-			@chdir($this->local_installpath);
-			if(file_exists($this->local_installpath)){
-				// make sure we don't delete error and stats folders
-				if($this->local_installpath == $this->document_root.'/'){
-					if(is_dir($this->document_root)){
-						$files = array_diff(scandir($this->document_root), array('.', '..', 'error', 'stats'));
-						foreach($files as $file){
-							if(is_dir($this->document_root.'/'.$file)){
-								$app->file->removeDirectory($this->document_root.'/'.$file);
-							} else {
-								@unlink($this->document_root.'/'.$file);
-							}
-						}
-					} else {
-						@unlink($this->document_root);
-						mkdir($this->document_root, 0777, true);
-					}
-				} else {
-					exec("rm -Rf ".escapeshellarg($this->local_installpath).'*');
-				}
-			} else {
-				mkdir($this->local_installpath, 0777, true);
-			}
-
-			if($this->handle_type == 'install')
-			{
-				// Now check if the needed folder is there
-				if(!file_exists($this->local_installpath))
-					throw new Exception('Unable to create a new folder for the package '.$task['path']);
-
-				// Extract all files and assign them a new owner
-				if( ($this->extractZip($this->packages_dir.'/'.$task['path'], $mapping_path, $this->local_installpath) === false)
-					|| ($this->extractZip($this->packages_dir.'/'.$task['path'], 'scripts', $this->local_installpath.'install_scripts/') === false) )
-				{
-					// Clean already extracted data
-					exec("rm -Rf ".escapeshellarg($this->local_installpath).'*');
-					throw new Exception('Unable to extract the package '.$task['path']);
-				}
-
-				$this->processMappings($mapping, $mapping_url, $this->local_installpath);
-
-				// Set the appropriate file owner
-				$main_domain = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings
-                    WHERE name = 'main_domain' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
-				$owner_res = $app->db->queryOneRecord("SELECT system_user, system_group FROM web_domain
-                        WHERE domain = '".$app->db->quote($main_domain['value'])."';");
-				$this->file_owner_user = $owner_res['system_user'];
-				$this->file_owner_group = $owner_res['system_group'];
-				exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
-
-				//* Chown stats directory back
-				if(is_dir($this->local_installpath.'stats')) {
-					exec('chown -R root:root '.escapeshellarg($this->local_installpath.'stats'));
-				}
-			}
-		}
-		catch(Exception $e)
-		{
-			$app->dbmaster->query('UPDATE aps_instances SET instance_status = "'.INSTANCE_ERROR.'"
-                WHERE id = "'.$app->db->quote($task['instance_id']).'";');
-			$app->log($e->getMessage(), 1);
-			return false;
-		}
-
-		return true;
-	}
-
-
-
-	/**
-	 * Get all user config variables and set them to environment variables
-	 *
-	 * @param $task an array containing all install related data
-	 */
-	private function prepareUserInputData($task)
-	{
-		global $app;
-
-		$userdata = $app->db->queryAllRecords("SELECT name, value FROM aps_instances_settings
-            WHERE instance_id = '".$app->db->quote($task['instance_id'])."';");
-		if(empty($userdata)) return false;
-
-		foreach($userdata as $data)
-		{
-			// Skip unnecessary data
-			if($data['name'] == 'main_location'
-				|| $data['name'] == 'main_domain'
-				|| $data['name'] == 'main_database_password'
-				|| $data['name'] == 'main_database_name'
-				|| $data['name'] == 'main_database_host'
-				|| $data['name'] == 'main_database_login'
-				|| $data['name'] == 'license') continue;
-
-			$this->putenv[] = 'SETTINGS_'.$data['name'].'='.$data['value'];
-		}
-	}
-
-
-
-	/**
-	 * Fetch binary data from a given array
-	 * The data is retrieved in binary mode and
-	 * then directly written to an output file
-	 *
-	 * @param $input a specially structed array
-	 * @see $this->startUpdate()
-	 */
-	private function fetchFiles($input)
-	{
-		$fh = array();
-		$url = array();
-		$conn = array();
-
-		// Build the single cURL handles and add them to a multi handle
-		$mh = curl_multi_init();
-
-		// Process each app
-		for($i = 0; $i < count($input); $i++)
-		{
-			$conn[$i] = curl_init($input[$i]['url']);
-			$fh[$i] = fopen($input[$i]['localtarget'], 'wb');
-
-			curl_setopt($conn[$i], CURLOPT_BINARYTRANSFER, true);
-			curl_setopt($conn[$i], CURLOPT_FILE, $fh[$i]);
-			curl_setopt($conn[$i], CURLOPT_TIMEOUT, 0);
-			curl_setopt($conn[$i], CURLOPT_FAILONERROR, 1);
-			curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, 1);
-
-			curl_multi_add_handle($mh, $conn[$i]);
-		}
-
-		$active = 0;
-		do curl_multi_exec($mh, $active);
-		while($active > 0);
-
-		// Close the handles
-		for($i = 0; $i < count($input); $i++)
-		{
-			fclose($fh[$i]);
-			curl_multi_remove_handle($mh, $conn[$i]);
-			curl_close($conn[$i]);
-		}
-		curl_multi_close($mh);
-	}
-
-
-
-	/**
-	 * The installation script should be executed
-	 *
-	 * @param $task an array containing all install related data
-	 * @param $sxe a SimpleXMLElement handle, holding APP-META.xml
-	 * @return boolean
-	 */
-	private function doInstallation($task, $sxe)
-	{
-		global $app;
-
-		try
-		{
-			// Check if the install directory exists
-			if(!is_dir($this->local_installpath.'install_scripts/'))
-				throw new Exception('The install directory '.$this->local_installpath.' is not existing');
-
-			// Set the executable bit to the configure script
-			$cfgscript = @(string)$sxe->service->provision->{'configuration-script'}['name'];
-			if(!$cfgscript) $cfgscript = 'configure';
-			chmod($this->local_installpath.'install_scripts/'.$cfgscript, 0755);
-
-			// Change to the install folder (import for the exec() below!)
-			//exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
-			chdir($this->local_installpath.'install_scripts/');
-
-			// Set the enviroment variables
-			foreach($this->putenv as $var) {
-				putenv($var);
-			}
-
-			$shell_retcode = true;
-			$shell_ret = array();
-			exec('php '.escapeshellarg($this->local_installpath.'install_scripts/'.$cfgscript).' install 2>&1', $shell_ret, $shell_retcode);
-			$shell_ret = array_filter($shell_ret);
-			$shell_ret_str = implode("\n", $shell_ret);
-
-			// Although $shell_retcode might be 0, there can be PHP errors. Filter them:
-			if(substr_count($shell_ret_str, 'Warning: ') > 0) $shell_retcode = 1;
-
-			// If an error has occurred, the return code is != 0
-			if($shell_retcode != 0) throw new Exception($shell_ret_str);
-			else
-			{
-				// The install succeeded, chown newly created files too
-				exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
-
-				//* Chown stats directory back
-				if(is_dir($this->local_installpath.'stats')) {
-					exec('chown -R root:root '.escapeshellarg($this->local_installpath.'stats'));
-				}
-
-				$app->dbmaster->query('UPDATE aps_instances SET instance_status = "'.INSTANCE_SUCCESS.'"
-                    WHERE id = "'.$app->db->quote($task['instance_id']).'";');
-			}
-		}
-
-		catch(Exception $e)
-		{
-			$app->dbmaster->query('UPDATE aps_instances SET instance_status = "'.INSTANCE_ERROR.'"
-                WHERE id = "'.$app->db->quote($task['instance_id']).'";');
-			$app->log($e->getMessage(), 1);
-			return false;
-		}
-
-		return true;
-	}
-
-
-
-	/**
-	 * Cleanup: Remove install scripts, remove tasks and update the database
-	 *
-	 * @param $task an array containing all install related data
-	 * @param $sxe a SimpleXMLElement handle, holding APP-META.xml
-	 */
-	private function cleanup($task, $sxe)
-	{
-		chdir($this->local_installpath);
-		exec("rm -Rf ".escapeshellarg($this->local_installpath).'install_scripts');
-	}
-
-
-
-	/**
-	 * The main method which performs the actual package installation
-	 *
-	 * @param $instanceid the instanceID to install
-	 * @param $type the type of task to perform (installation, removal)
-	 */
-	public function installHandler($instanceid, $type)
-	{
-		global $app;
-
-		// Set the given handle type, currently supported: install, delete
-		if($type == 'install' || $type == 'delete') $this->handle_type = $type;
-		else return false;
-
-		// Get all instance metadata
-		/*
-        $task = $app->db->queryOneRecord("SELECT * FROM aps_instances AS i
-            INNER JOIN aps_packages AS p ON i.package_id = p.id
-            INNER JOIN client AS c ON i.customer_id = c.client_id
-            WHERE i.id = ".$instanceid.";");
-		*/
-		$task = $app->db->queryOneRecord("SELECT * FROM aps_instances AS i
-            INNER JOIN aps_packages AS p ON i.package_id = p.id
-            WHERE i.id = ".$instanceid.";");
-		if(!$task) return false;  // formerly: throw new Exception('The InstanceID doesn\'t exist.');
-		if(!isset($task['instance_id'])) $task['instance_id'] = $instanceid;
-
-		// Download aps package
-		if(!file_exists($this->packages_dir.'/'.$task['path']) || filesize($this->packages_dir.'/'.$task['path']) == 0) {
-			$ch = curl_init();
-			$fh = fopen($this->packages_dir.'/'.$task['path'], 'wb');
-			curl_setopt($ch, CURLOPT_FILE, $fh);
-			//curl_setopt($ch, CURLOPT_HEADER, 0);
-			curl_setopt($ch, CURLOPT_URL, $task['package_url']);
-			curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
-			curl_setopt($ch, CURLOPT_TIMEOUT, 0);
-			curl_setopt($ch, CURLOPT_FAILONERROR, 1);
-			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-			if(curl_exec($ch) === false) $app->log(curl_error($ch), 1);
-			fclose($fh);
-			curl_close($ch);
-		}
-
-		/*
-		$app_to_dl[] = array('name' => $task['path'],
-                            'url' => $task['package_url'],
-                            'filesize' => 0,
-                            'localtarget' => $this->packages_dir.'/'.$task['path']);
-
-        $this->fetchFiles($app_to_dl);
-		*/
-
-		// Make sure the requirements are given so that this script can execute
-		$req_ret = $this->checkRequirements();
-		if(!$req_ret) return false;
-
-		$metafile = $this->getContentFromZIP($this->packages_dir.'/'.$task['path'], 'APP-META.xml');
-		// Check if the meta file is existing
-		if(!$metafile)
-		{
-			$app->dbmaster->query('UPDATE aps_instances SET instance_status = "'.INSTANCE_ERROR.'"
-                WHERE id = "'.$app->db->quote($task['instance_id']).'";');
-			$app->log('Unable to find the meta data file of package '.$task['path'], 1);
-			return false;
-		}
-
-		// Rename namespaces and register them
-		$metadata = str_replace("xmlns=", "ns=", $metafile);
-		$sxe = new SimpleXMLElement($metadata);
-		$namespaces = $sxe->getDocNamespaces(true);
-		foreach($namespaces as $ns => $url) $sxe->registerXPathNamespace($ns, $url);
-
-		// Setup the environment with data for the install location
-		$this->prepareLocation($task);
-
-		// Create the database if necessary
-		$this->prepareDatabase($task, $sxe);
-
-		// Unpack the install scripts from the packages
-		if($this->prepareFiles($task, $sxe) && $this->handle_type == 'install')
-		{
-			// Setup the variables from the install script
-			$this->prepareUserInputData($task);
-
-			// Do the actual installation
-			$this->doInstallation($task, $sxe);
-
-			// Remove temporary files
-			$this->cleanup($task, $sxe);
-		}
-
-		// Finally delete the instance entry + settings
-		if($this->handle_type == 'delete')
-		{
-			$app->db->query('DELETE FROM aps_instances WHERE id = "'.$app->db->quote($task['instance_id']).'";');
-			$app->db->query('DELETE FROM aps_instances_settings WHERE instance_id = "'.$app->db->quote($task['instance_id']).'";');
-		}
-
-		unset($sxe);
-	}
-
-}
-
-?>