correct increasing/decreasing of admin-resources

Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann
2019-01-16 15:14:22 +01:00
parent 97ff3485b7
commit 5ecb43ba73
8 changed files with 45 additions and 59 deletions

View File

@@ -468,43 +468,38 @@ class Customers extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resource
$ins_data['customerid'] = $customerid; $ins_data['customerid'] = $customerid;
// update admin resource-usage // update admin resource-usage
$admin_update_query = "UPDATE `" . TABLE_PANEL_ADMINS . "` SET `customers_used` = `customers_used` + 1";
if ($mysqls != '-1') { if ($mysqls != '-1') {
$admin_update_query .= ", `mysqls_used` = `mysqls_used` + 0" . (int) $mysqls; Admins::increaseUsage($this->getUserDetail('adminid'), 'mysqls_used', '', (int) $mysqls);
} }
if ($emails != '-1') { if ($emails != '-1') {
$admin_update_query .= ", `emails_used` = `emails_used` + 0" . (int) $emails; Admins::increaseUsage($this->getUserDetail('adminid'), 'emails_used', '', (int) $emails);
} }
if ($email_accounts != '-1') { if ($email_accounts != '-1') {
$admin_update_query .= ", `email_accounts_used` = `email_accounts_used` + 0" . (int) $email_accounts; Admins::increaseUsage($this->getUserDetail('adminid'), 'email_accounts_used', '', (int) $email_accounts);
} }
if ($email_forwarders != '-1') { if ($email_forwarders != '-1') {
$admin_update_query .= ", `email_forwarders_used` = `email_forwarders_used` + 0" . (int) $email_forwarders; Admins::increaseUsage($this->getUserDetail('adminid'), 'email_forwarders_used', '', (int) $email_forwarders);
} }
if ($email_quota != '-1') { if ($email_quota != '-1') {
$admin_update_query .= ", `email_quota_used` = `email_quota_used` + 0" . (int) $email_quota; Admins::increaseUsage($this->getUserDetail('adminid'), 'email_quota_used', '', (int) $email_quota);
} }
if ($subdomains != '-1') { if ($subdomains != '-1') {
$admin_update_query .= ", `subdomains_used` = `subdomains_used` + 0" . (int) $subdomains; Admins::increaseUsage($this->getUserDetail('adminid'), 'subdomains_used', '', (int) $subdomains);
} }
if ($ftps != '-1') { if ($ftps != '-1') {
$admin_update_query .= ", `ftps_used` = `ftps_used` + 0" . (int) $ftps; Admins::increaseUsage($this->getUserDetail('adminid'), 'ftps_used', '', (int) $ftps);
} }
if (($diskspace / 1024) != '-1') { if (($diskspace / 1024) != '-1') {
$admin_update_query .= ", `diskspace_used` = `diskspace_used` + 0" . (int) $diskspace; Admins::increaseUsage($this->getUserDetail('adminid'), 'diskspace_used', '', (int) $diskspace);
} }
$admin_update_query .= " WHERE `adminid` = '" . (int) $this->getUserDetail('adminid') . "'";
Database::query($admin_update_query);
// update last guid // update last guid
Settings::Set('system.lastguid', $guid, true); Settings::Set('system.lastguid', $guid, true);
@@ -1499,44 +1494,41 @@ class Customers extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resource
), true, true); ), true, true);
// update admin-resource-usage // update admin-resource-usage
$admin_update_query = "UPDATE `" . TABLE_PANEL_ADMINS . "` SET `customers_used` = `customers_used` - 1 "; Admins::decreaseUsage($this->getUserDetail('adminid'), 'customers_used');
$admin_update_query .= ", `domains_used` = `domains_used` - 0" . (int) ($domains_deleted - $result['subdomains_used']); Admins::decreaseUsage($this->getUserDetail('adminid'), 'domains_used', '', (int) ($domains_deleted - $result['subdomains_used']));
if ($result['mysqls'] != '-1') { if ($result['mysqls'] != '-1') {
$admin_update_query .= ", `mysqls_used` = `mysqls_used` - 0" . (int) $result['mysqls']; Admins::decreaseUsage($this->getUserDetail('adminid'), 'mysqls_used', '', (int) $result['mysqls']);
} }
if ($result['emails'] != '-1') { if ($result['emails'] != '-1') {
$admin_update_query .= ", `emails_used` = `emails_used` - 0" . (int) $result['emails']; Admins::decreaseUsage($this->getUserDetail('adminid'), 'emails_used', '', (int) $result['emails']);
} }
if ($result['email_accounts'] != '-1') { if ($result['email_accounts'] != '-1') {
$admin_update_query .= ", `email_accounts_used` = `email_accounts_used` - 0" . (int) $result['email_accounts']; Admins::decreaseUsage($this->getUserDetail('adminid'), 'email_accounts_used', '', (int) $result['email_accounts']);
} }
if ($result['email_forwarders'] != '-1') { if ($result['email_forwarders'] != '-1') {
$admin_update_query .= ", `email_forwarders_used` = `email_forwarders_used` - 0" . (int) $result['email_forwarders']; Admins::decreaseUsage($this->getUserDetail('adminid'), 'email_forwarders_used', '', (int) $result['email_forwarders']);
} }
if ($result['email_quota'] != '-1') { if ($result['email_quota'] != '-1') {
$admin_update_query .= ", `email_quota_used` = `email_quota_used` - 0" . (int) $result['email_quota']; Admins::decreaseUsage($this->getUserDetail('adminid'), 'email_quota_used', '', (int) $result['email_quota']);
} }
if ($result['subdomains'] != '-1') { if ($result['subdomains'] != '-1') {
$admin_update_query .= ", `subdomains_used` = `subdomains_used` - 0" . (int) $result['subdomains']; Admins::decreaseUsage($this->getUserDetail('adminid'), 'subdomains_used', '', (int) $result['subdomains']);
} }
if ($result['ftps'] != '-1') { if ($result['ftps'] != '-1') {
$admin_update_query .= ", `ftps_used` = `ftps_used` - 0" . (int) $result['ftps']; Admins::decreaseUsage($this->getUserDetail('adminid'), 'ftps_used', '', (int) $result['ftps']);
} }
if (($result['diskspace'] / 1024) != '-1') { if (($result['diskspace'] / 1024) != '-1') {
$admin_update_query .= ", `diskspace_used` = `diskspace_used` - 0" . (int) $result['diskspace']; Admins::decreaseUsage($this->getUserDetail('adminid'), 'diskspace_used', '', (int) $result['diskspace']);
} }
$admin_update_query .= " WHERE `adminid` = '" . (int) $result['adminid'] . "'";
Database::query($admin_update_query);
// rebuild configs // rebuild configs
\Froxlor\System\Cronjob::inserttask('1'); \Froxlor\System\Cronjob::inserttask('1');

View File

@@ -187,10 +187,6 @@ class EmailAccounts extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Reso
Customers::increaseUsage($customer['customerid'], 'email_accounts_used'); Customers::increaseUsage($customer['customerid'], 'email_accounts_used');
Customers::increaseUsage($customer['customerid'], 'email_quota_used', '', $quota); Customers::increaseUsage($customer['customerid'], 'email_quota_used', '', $quota);
// update admin usage
Admins::increaseUsage($customer['adminid'], 'email_accounts_used');
Admins::increaseUsage($customer['adminid'], 'email_quota_used', '', $quota);
if ($sendinfomail) { if ($sendinfomail) {
// replacer array for mail to create account on server // replacer array for mail to create account on server
$replace_arr = array( $replace_arr = array(
@@ -480,9 +476,6 @@ class EmailAccounts extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Reso
// decrease usage for customer // decrease usage for customer
Customers::decreaseUsage($customer['customerid'], 'email_accounts_used'); Customers::decreaseUsage($customer['customerid'], 'email_accounts_used');
Customers::decreaseUsage($customer['customerid'], 'email_quota_used', '', $quota); Customers::decreaseUsage($customer['customerid'], 'email_quota_used', '', $quota);
// decrease admin usage
Admins::decreaseUsage($customer['adminid'], 'email_accounts_used');
Admins::decreaseUsage($customer['adminid'], 'email_quota_used', '', $quota);
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] deleted email account for '" . $result['email_full'] . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] deleted email account for '" . $result['email_full'] . "'");
return $this->response(200, "successfull", $result); return $this->response(200, "successfull", $result);

View File

@@ -97,9 +97,6 @@ class EmailForwarders extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Re
// update customer usage // update customer usage
Customers::increaseUsage($customer['customerid'], 'email_forwarders_used'); Customers::increaseUsage($customer['customerid'], 'email_forwarders_used');
// update admin usage
Admins::increaseUsage($customer['adminid'], 'email_forwarders_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] added email forwarder for '" . $result['email_full'] . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] added email forwarder for '" . $result['email_full'] . "'");
$result = $this->apiCall('Emails.get', array( $result = $this->apiCall('Emails.get', array(
@@ -199,9 +196,6 @@ class EmailForwarders extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Re
// update customer usage // update customer usage
Customers::decreaseUsage($customer['customerid'], 'email_forwarders_used'); Customers::decreaseUsage($customer['customerid'], 'email_forwarders_used');
// update admin usage
Admins::decreaseUsage($customer['adminid'], 'email_forwarders_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] deleted email forwarder for '" . $result['email_full'] . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] deleted email forwarder for '" . $result['email_full'] . "'");
$result = $this->apiCall('Emails.get', array( $result = $this->apiCall('Emails.get', array(

View File

@@ -132,9 +132,6 @@ class Emails extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
// update customer usage // update customer usage
Customers::increaseUsage($customer['customerid'], 'emails_used'); Customers::increaseUsage($customer['customerid'], 'emails_used');
// update admin usage
Admins::increaseUsage($customer['adminid'], 'emails_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] added email address '" . $email_full . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] added email address '" . $email_full . "'");
$result = $this->apiCall('Emails.get', array( $result = $this->apiCall('Emails.get', array(
@@ -381,7 +378,6 @@ class Emails extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
"id" => $id "id" => $id
), true, true); ), true, true);
Customers::decreaseUsage($customer['customerid'], 'emails_used'); Customers::decreaseUsage($customer['customerid'], 'emails_used');
Admins::decreaseUsage($customer['customerid'], 'emails_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] deleted email address '" . $result['email_full'] . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] deleted email address '" . $result['email_full'] . "'");
return $this->response(200, "successfull", $result); return $this->response(200, "successfull", $result);

View File

@@ -179,8 +179,6 @@ class Ftps extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEntit
Customers::increaseUsage($customer['customerid'], 'ftps_used'); Customers::increaseUsage($customer['customerid'], 'ftps_used');
Customers::increaseUsage($customer['customerid'], 'ftp_lastaccountnumber'); Customers::increaseUsage($customer['customerid'], 'ftp_lastaccountnumber');
// update admin usage
Admins::increaseUsage($customer['adminid'], 'ftps_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] added ftp-account '" . $username . " (" . $path . ")'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] added ftp-account '" . $username . " (" . $path . ")'");
\Froxlor\System\Cronjob::inserttask(5); \Froxlor\System\Cronjob::inserttask(5);
@@ -545,8 +543,6 @@ class Ftps extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEntit
// decrease ftp-user usage for customer // decrease ftp-user usage for customer
$resetaccnumber = ($customer_data['ftps_used'] == '1') ? " , `ftp_lastaccountnumber`='0'" : ''; $resetaccnumber = ($customer_data['ftps_used'] == '1') ? " , `ftp_lastaccountnumber`='0'" : '';
Customers::decreaseUsage($customer_data['customerid'], 'ftps_used', $resetaccnumber); Customers::decreaseUsage($customer_data['customerid'], 'ftps_used', $resetaccnumber);
// update admin usage
Admins::decreaseUsage(($this->isAdmin() ? $customer_data['adminid'] : $this->getUserDetail('adminid')), 'ftps_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_WARNING, "[API] deleted ftp-user '" . $result['username'] . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_WARNING, "[API] deleted ftp-user '" . $result['username'] . "'");
return $this->response(200, "successfull", $result); return $this->response(200, "successfull", $result);

View File

@@ -110,9 +110,6 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
Customers::increaseUsage($customer['customerid'], 'mysqls_used'); Customers::increaseUsage($customer['customerid'], 'mysqls_used');
Customers::increaseUsage($customer['customerid'], 'mysql_lastaccountnumber'); Customers::increaseUsage($customer['customerid'], 'mysql_lastaccountnumber');
// update admin usage
Admins::increaseUsage($this->getUserDetail('adminid'), 'mysqls_used');
// send info-mail? // send info-mail?
if ($sendinfomail == 1) { if ($sendinfomail == 1) {
$pma = $this->lng['admin']['notgiven']; $pma = $this->lng['admin']['notgiven'];
@@ -476,8 +473,6 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
// reduce mysql-usage-counter // reduce mysql-usage-counter
$resetaccnumber = ($mysql_used == '1') ? " , `mysql_lastaccountnumber` = '0' " : ''; $resetaccnumber = ($mysql_used == '1') ? " , `mysql_lastaccountnumber` = '0' " : '';
Customers::decreaseUsage($customer['customerid'], 'mysqls_used', $resetaccnumber); Customers::decreaseUsage($customer['customerid'], 'mysqls_used', $resetaccnumber);
// update admin usage
Admins::decreaseUsage(($this->isAdmin() ? $customer['adminid'] : $this->getUserDetail('adminid')), 'mysqls_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_WARNING, "[API] deleted database '" . $result['databasename'] . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_WARNING, "[API] deleted database '" . $result['databasename'] . "'");
return $this->response(200, "successfull", $result); return $this->response(200, "successfull", $result);

View File

@@ -310,7 +310,6 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc
\Froxlor\System\Cronjob::inserttask('4'); \Froxlor\System\Cronjob::inserttask('4');
Customers::increaseUsage($customer['customerid'], 'subdomains_used'); Customers::increaseUsage($customer['customerid'], 'subdomains_used');
Admins::increaseUsage(($this->isAdmin() ? $customer['adminid'] : $this->getUserDetail('adminid')), 'subdomains_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] added subdomain '" . $completedomain . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_INFO, "[API] added subdomain '" . $completedomain . "'");
@@ -832,8 +831,6 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc
// reduce subdomain-usage-counter // reduce subdomain-usage-counter
Customers::decreaseUsage($customer['customerid'], 'subdomains_used'); Customers::decreaseUsage($customer['customerid'], 'subdomains_used');
// update admin usage
Admins::decreaseUsage(($this->isAdmin() ? $customer['adminid'] : $this->getUserDetail('adminid')), 'subdomains_used');
$this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_WARNING, "[API] deleted subdomain '" . $result['domain'] . "'"); $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_WARNING, "[API] deleted subdomain '" . $result['domain'] . "'");
return $this->response(200, "successfull", $result); return $this->response(200, "successfull", $result);

View File

@@ -212,16 +212,18 @@ class User
Database::pexecute($admins_stmt, array()); Database::pexecute($admins_stmt, array());
while ($admin = $admins_stmt->fetch(\PDO::FETCH_ASSOC)) { while ($admin = $admins_stmt->fetch(\PDO::FETCH_ASSOC)) {
$admin_customers_stmt = Database::prepare('SELECT COUNT(*) AS `number_customers` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `adminid` = :aid'); $admin_customers_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `adminid` = :aid');
$admin_customers = Database::pexecute_first($admin_customers_stmt, array( Database::pexecute($admin_customers_stmt, array(
"aid" => $admin['adminid'] "aid" => $admin['adminid']
)); ));
$admin['customers_used_new'] = $admin_customers['number_customers']; $admin_customers = $admin_customers_stmt->fetchAll(\PDO::FETCH_ASSOC);
$admin['customers_used_new'] = count($admin_customers);
$admin_domains_stmt = Database::prepare('SELECT COUNT(*) AS `number_domains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `adminid` = :aid AND `isemaildomain` = "1"'); $admin_domains_stmt = Database::prepare('SELECT COUNT(*) AS `number_domains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `adminid` = :aid');
$admin_domains = Database::pexecute_first($admin_domains_stmt, array( $admin_domains = Database::pexecute_first($admin_domains_stmt, array(
"aid" => $admin['adminid'] "aid" => $admin['adminid']
)); ));
// substract the amount of domains that are std-subdomains later when we iterated through all customers and now for sure
$admin['domains_used_new'] = $admin_domains['number_domains']; $admin['domains_used_new'] = $admin_domains['number_domains'];
$cur_adm = $admin['adminid']; $cur_adm = $admin['adminid'];
@@ -245,6 +247,27 @@ class User
$admin[$field . '_new'] = $admin_resources[$cur_adm][$field]; $admin[$field . '_new'] = $admin_resources[$cur_adm][$field];
} }
foreach ($admin_customers as $acustomer) {
foreach (array(
'diskspace_used',
'traffic_used',
'mysqls_used',
'ftps_used',
'emails_used',
'email_accounts_used',
'email_forwarders_used',
'email_quota_used',
'subdomains_used'
) as $field) {
$admin[$field . '_new'] += $acustomer[$field];
}
// check for std-subdomain
if ($acustomer['standardsubdomain'] > 0) {
// std-subdomain does not count to assign resource
$admin['domains_used_new']--;
}
}
$stmt = Database::prepare('UPDATE `' . TABLE_PANEL_ADMINS . '` $stmt = Database::prepare('UPDATE `' . TABLE_PANEL_ADMINS . '`
SET `customers_used` = :customers_used, SET `customers_used` = :customers_used,
`domains_used` = :domains_used, `domains_used` = :domains_used,