Marius Cramer
2014-07-08 5d1c691970d8e30d4ab6e3ba9efcec98f858b1fc
Merge branch 'reseller_template_limits' into 'master'

Reseller quota

When a reseller has some quota established, they shouldn't be allowed to create clients without quota or assign more quota to their clients. If they are allowed (as it's done now), total quota used by their clients can be higher than reseller limit, and when reseller try to edit site or mailbox, then quota can be changed to 0.
3 files modified
58 ■■■■■ changed files
interface/web/mail/mail_user_edit.php 24 ●●●●● patch | view | raw | blame | history
interface/web/sites/database_edit.php 29 ●●●●● patch | view | raw | blame | history
interface/web/sites/web_vhost_domain_edit.php 5 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_user_edit.php
@@ -153,7 +153,7 @@
        if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
            // Get the limits of the client
            $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
            $client = $app->db->queryOneRecord("SELECT limit_mailbox, limit_mailquota FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            $client = $app->db->queryOneRecord("SELECT limit_mailbox, limit_mailquota, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
@@ -179,6 +179,28 @@
                unset($tmp);
                unset($tmp_quota);
            }
            if($client['parent_client_id'] > 0) {
                // Get the limits of the reseller
                $reseller = $app->db->queryOneRecord("SELECT limit_mailquota, limit_maildomain FROM client WHERE client_id = ".$client['parent_client_id']);
                //* Check the website quota of the client
                if(isset($_POST["quota"]) && $reseller["limit_mailquota"] >= 0 && $app->functions->intval($this->dataRecord["quota"]) * 1024 * 1024 != $this->oldDataRecord['quota']) {
                    $tmp = $app->db->queryOneRecord("SELECT sum(quota) as mailquota FROM mail_user, sys_group, client WHERE mail_user.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ".$client['parent_client_id']." IN (client.parent_client_id, client.client_id) AND mailuser_id != ".$app->functions->intval($this->id));
                    $mailquota = $tmp["mailquota"] / 1024 / 1024;
                    $new_mailbox_quota = $app->functions->intval($this->dataRecord["quota"]);
                    if(($mailquota + $new_mailbox_quota > $reseller["limit_mailquota"]) || ($new_mailbox_quota == 0 && $reseller["limit_mailquota"] != -1)) {
                        $max_free_quota = $reseller["limit_mailquota"] - $mailquota;
                        if($max_free_quota < 0) $max_free_quota = 0;
                        $app->tform->errorMessage .= $app->tform->lng("limit_mailquota_txt").": ".$max_free_quota."<br>";
                        // Set the quota field to the max free space
                        $this->dataRecord["quota"] = $max_free_quota;
                    }
                    unset($tmp);
                    unset($tmp_quota);
                }
            }
        } // end if user is not admin
interface/web/sites/database_edit.php
@@ -170,7 +170,7 @@
        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 db_servers, limit_database, limit_database_quota FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.groupid = $client_group_id");
            $client = $app->db->queryOneRecord("SELECT db_servers, limit_database, limit_database_quota, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.groupid = $client_group_id");
            // When the record is updated
            if($this->id > 0) {
@@ -200,6 +200,33 @@
                    unset($global_config);
                    unset($dbname_prefix);
                }
                if($client['parent_client_id'] > 0) {
                    // Get the limits of the reseller
                    $reseller = $app->db->queryOneRecord("SELECT limit_database, limit_database_quota FROM client WHERE client_id = ".$client['parent_client_id']);
                    //* Check the website quota of the client
                    if ($reseller['limit_database_quota'] >= 0) {
                        //* get the database prefix
                        $app->uses('getconf,tools_sites');
                        $global_config = $app->getconf->get_global_config('sites');
                        $dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $this->dataRecord);
                        //* get quota from other databases
                        $tmp = $app->db->queryOneRecord("SELECT sum(database_quota) as db_quota FROM web_database, sys_group, client WHERE web_database.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ? IN (client.parent_client_id, client.client_id) AND database_name <> ?", $client['parent_client_id'], $dbname_prefix.$this->dataRecord['database_name']);
                        $used_quota = $app->functions->intval($tmp['db_quota']);
                        $new_db_quota = $app->functions->intval($this->dataRecord["database_quota"]);
                        if(($used_quota + $new_db_quota > $reseller["limit_database_quota"]) || ($new_db_quota < 0 && $reseller["limit_database_quota"] >= 0)) {
                            $max_free_quota = floor($reseller["limit_database_quota"] - $used_quota);
                            if($max_free_quota < 0) $max_free_quota = 0;
                            $app->tform->errorMessage .= $app->tform->lng("limit_database_quota_free_txt").": ".$max_free_quota." MB<br>";
                            $this->dataRecord["database_quota"] = $max_free_quota;
                        }
                        unset($tmp);
                        unset($global_config);
                        unset($dbname_prefix);
                    }
                }
                // When the record is inserted
            } else {
                $client['db_servers_ids'] = explode(',', $client['db_servers']);
interface/web/sites/web_vhost_domain_edit.php
@@ -838,7 +838,8 @@
                if($this->_vhostdomain_type == 'domain') {
                    //* 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'));
                        $tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain, sys_group, client WHERE web_domain.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ".$client['parent_client_id']." IN (client.parent_client_id, client.client_id) AND domain_id != ".$app->functions->intval($this->id)." AND type = 'vhost'");
                        $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)) {
@@ -855,7 +856,7 @@
                //* 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'));
                    $tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain, sys_group, client WHERE web_domain.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ".$client['parent_client_id']." IN (client.parent_client_id, client.client_id) AND domain_id != ".$app->functions->intval($this->id)." AND type = 'vhost'");
                    $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)) {