Falko Timme
2013-10-22 391e05cbee6ff84bce60b665be60b4e5f049ee7f
interface/web/sites/web_domain_edit.php
@@ -188,8 +188,11 @@
         $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";
            }
         }
@@ -229,11 +232,14 @@
         $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 = $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 ? $this->dataRecord['server_id'] : intval($client['default_webserver']))." AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")");
            $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 ? $this->dataRecord['server_id'] : 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 ? $this->dataRecord['server_id'] : intval($client['default_webserver']))." AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")");
            $php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".($this->id > 0 ? $this->dataRecord['server_id'] : intval($client['default_webserver'])).$sql_where);
         }
         $php_select = "<option value=''>Default</option>";
         if(is_array($php_records) && !empty($php_records)) {
@@ -253,53 +259,6 @@
            // 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 {
@@ -350,16 +309,36 @@
         $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 = $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 = $server_id");
            $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 = $server_id");
            $php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = $server_id".$sql_where);
         }
         $php_select = "<option value=''>Default</option>";
         if(is_array($php_records) && !empty($php_records)) {
@@ -375,20 +354,6 @@
         }
         $app->tpl->setVar("fastcgi_php_version",$php_select);
         unset($php_records);
         // 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)) {
            foreach( $clients as $client) {
               //$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':'';
               $client_select .= "<option value='$client[groupid]' $selected>$client[contactname]</option>\r\n";
            }
         }
         $app->tpl->setVar("client_group_id",$client_select);
            
            foreach($read_limits as $limit) $app->tpl->setVar($limit, ($limit == 'force_suexec' ? 'n' : 'y'));
         
@@ -494,6 +459,17 @@
         }
         $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:".$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();
   }
@@ -549,9 +525,16 @@
            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 = $_POST;
         }
            
         //* Check the website quota of the client
         if(isset($_POST["hd_quota"]) && $client["limit_web_quota"] >= 0) {
         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"]);
@@ -567,7 +550,7 @@
         }
         //* Check the traffic quota of the client
         if(isset($_POST["traffic_quota"]) && $client["limit_traffic_quota"] > 0) {
         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"]);
@@ -587,7 +570,7 @@
            $reseller = $app->db->queryOneRecord("SELECT limit_traffic_quota, limit_web_domain, default_webserver, limit_web_quota FROM client WHERE client_id = ".$client['parent_client_id']);
            //* Check the website quota of the client
            if(isset($_POST["hd_quota"]) && $reseller["limit_web_quota"] >= 0) {
            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"]);
@@ -603,7 +586,7 @@
            }
            //* Check the traffic quota of the client
            if(isset($_POST["traffic_quota"]) && $reseller["limit_traffic_quota"] > 0) {
            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"]);
@@ -700,6 +683,10 @@
         $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
@@ -714,7 +701,6 @@
               }
               // break
               if(preg_match('@^\s*break\s*;\s*$@', $rewrite_rule_line)){
                  $if_level += 1;
                  continue;
               }
               // return code [ text ]
@@ -1001,7 +987,16 @@
         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 = '".$web_rec['ip_address']."', ipv6_address = '".$web_rec['ipv6_address']."'", 'domain_id', $rec['domain_id']);
         }
         unset($records);
         unset($rec);
        }
   }
   function onAfterDelete() {