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.
| | |
| | | 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. |
| | |
| | | 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 |
| | | |
| | | |
| | |
| | | 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) { |
| | |
| | | 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']); |
| | |
| | | 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)) { |
| | |
| | | |
| | | //* 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)) { |