fix wrongly initialized resource-usage when re-calculating it; fixes #797
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
@@ -79,8 +79,8 @@ class User
|
|||||||
/**
|
/**
|
||||||
* Function which updates all counters of used ressources in panel_admins and panel_customers
|
* Function which updates all counters of used ressources in panel_admins and panel_customers
|
||||||
*
|
*
|
||||||
* @param
|
* @param bool $returndebuginfo
|
||||||
* bool Set to true to get an array with debug information
|
* Set to true to get an array with debug information
|
||||||
* @return array Contains debug information if parameter 'returndebuginfo' is set to true
|
* @return array Contains debug information if parameter 'returndebuginfo' is set to true
|
||||||
*
|
*
|
||||||
* @author Florian Lippert <flo@syscp.org> (2003-2009)
|
* @author Florian Lippert <flo@syscp.org> (2003-2009)
|
||||||
@@ -100,17 +100,17 @@ class User
|
|||||||
// Customers
|
// Customers
|
||||||
$customers_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` ORDER BY `customerid`');
|
$customers_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` ORDER BY `customerid`');
|
||||||
Database::pexecute($customers_stmt);
|
Database::pexecute($customers_stmt);
|
||||||
|
// array to store currently used resources per admin
|
||||||
$admin_resources = array();
|
$admin_resources = array();
|
||||||
while ($customer = $customers_stmt->fetch(\PDO::FETCH_ASSOC)) {
|
while ($customer = $customers_stmt->fetch(\PDO::FETCH_ASSOC)) {
|
||||||
|
// set current admin
|
||||||
$cur_adm = $customer['adminid'];
|
$cur_adm = $customer['adminid'];
|
||||||
|
|
||||||
// initialize admin-resources array for admin $customer['adminid']
|
// initialize admin-resources array for admin $customer['adminid']
|
||||||
if (! isset($admin_resources[$cur_adm])) {
|
if (! isset($admin_resources[$cur_adm])) {
|
||||||
$admin_resources[$cur_adm] = array();
|
$admin_resources[$cur_adm] = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fill admin resource usage array with customer data
|
||||||
self::addResourceCountEx($admin_resources[$cur_adm], $customer, 'diskspace_used', 'diskspace');
|
self::addResourceCountEx($admin_resources[$cur_adm], $customer, 'diskspace_used', 'diskspace');
|
||||||
self::addResourceCountEx($admin_resources[$cur_adm], $customer, 'traffic_used', 'traffic_used'); // !!! yes, USED and USED
|
self::addResourceCountEx($admin_resources[$cur_adm], $customer, 'traffic_used', 'traffic_used'); // !!! yes, USED and USED
|
||||||
|
|
||||||
@@ -126,6 +126,7 @@ class User
|
|||||||
self::addResourceCount($admin_resources[$cur_adm], $customer, $field . '_used', $field);
|
self::addResourceCount($admin_resources[$cur_adm], $customer, $field . '_used', $field);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calculate real usage
|
||||||
$customer_mysqls_stmt = Database::prepare('SELECT COUNT(*) AS `number_mysqls` FROM `' . TABLE_PANEL_DATABASES . '`
|
$customer_mysqls_stmt = Database::prepare('SELECT COUNT(*) AS `number_mysqls` FROM `' . TABLE_PANEL_DATABASES . '`
|
||||||
WHERE `customerid` = :cid');
|
WHERE `customerid` = :cid');
|
||||||
$customer_mysqls = Database::pexecute_first($customer_mysqls_stmt, array(
|
$customer_mysqls = Database::pexecute_first($customer_mysqls_stmt, array(
|
||||||
@@ -181,6 +182,7 @@ class User
|
|||||||
));
|
));
|
||||||
$customer['email_quota_used_new'] = (int) $customer_email_quota['email_quota'];
|
$customer['email_quota_used_new'] = (int) $customer_email_quota['email_quota'];
|
||||||
|
|
||||||
|
// update database accordingly
|
||||||
$stmt = Database::prepare('UPDATE `' . TABLE_PANEL_CUSTOMERS . '`
|
$stmt = Database::prepare('UPDATE `' . TABLE_PANEL_CUSTOMERS . '`
|
||||||
SET `mysqls_used` = :mysqls_used,
|
SET `mysqls_used` = :mysqls_used,
|
||||||
`emails_used` = :emails_used,
|
`emails_used` = :emails_used,
|
||||||
@@ -211,63 +213,56 @@ class User
|
|||||||
$admins_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_ADMINS . '` ORDER BY `adminid`');
|
$admins_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_ADMINS . '` ORDER BY `adminid`');
|
||||||
Database::pexecute($admins_stmt, array());
|
Database::pexecute($admins_stmt, array());
|
||||||
|
|
||||||
while ($admin = $admins_stmt->fetch(\PDO::FETCH_ASSOC)) {
|
$resource_fields = array(
|
||||||
|
'diskspace_used',
|
||||||
|
'traffic_used',
|
||||||
|
'mysqls_used',
|
||||||
|
'ftps_used',
|
||||||
|
'emails_used',
|
||||||
|
'email_accounts_used',
|
||||||
|
'email_forwarders_used',
|
||||||
|
'email_quota_used',
|
||||||
|
'subdomains_used'
|
||||||
|
);
|
||||||
|
|
||||||
$admin_customers_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `adminid` = :aid');
|
$admin_customers_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `adminid` = :aid');
|
||||||
|
while ($admin = $admins_stmt->fetch(\PDO::FETCH_ASSOC)) {
|
||||||
Database::pexecute($admin_customers_stmt, array(
|
Database::pexecute($admin_customers_stmt, array(
|
||||||
"aid" => $admin['adminid']
|
"aid" => $admin['adminid']
|
||||||
));
|
));
|
||||||
$admin_customers = $admin_customers_stmt->fetchAll(\PDO::FETCH_ASSOC);
|
$admin_customers = $admin_customers_stmt->fetchAll(\PDO::FETCH_ASSOC);
|
||||||
$admin['customers_used_new'] = count($admin_customers);
|
$admin['customers_used_new'] = count($admin_customers);
|
||||||
|
|
||||||
$admin_domains_stmt = Database::prepare('SELECT COUNT(*) AS `number_domains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `adminid` = :aid');
|
$admin_domains_stmt = Database::prepare('SELECT COUNT(*) AS `number_domains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `adminid` = :aid AND `parentdomainid` = "0"');
|
||||||
$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
|
// substract the amount of domains that are std-subdomains later when we iterated through all customers and know for sure
|
||||||
$admin['domains_used_new'] = $admin_domains['number_domains'];
|
$admin['domains_used_new'] = $admin_domains['number_domains'];
|
||||||
|
// set current admin
|
||||||
$cur_adm = $admin['adminid'];
|
$cur_adm = $admin['adminid'];
|
||||||
|
// if there's an admin without any customers it might be possible that the id is not yet known in $admin_resources
|
||||||
if (! isset($admin_resources[$cur_adm])) {
|
if (! isset($admin_resources[$cur_adm])) {
|
||||||
$admin_resources[$cur_adm] = array();
|
$admin_resources[$cur_adm] = array();
|
||||||
}
|
}
|
||||||
|
// be sure that all fields are set in the array
|
||||||
foreach (array(
|
foreach ($resource_fields as $field) {
|
||||||
'diskspace_used',
|
|
||||||
'traffic_used',
|
|
||||||
'mysqls_used',
|
|
||||||
'ftps_used',
|
|
||||||
'emails_used',
|
|
||||||
'email_accounts_used',
|
|
||||||
'email_forwarders_used',
|
|
||||||
'email_quota_used',
|
|
||||||
'subdomains_used'
|
|
||||||
) as $field) {
|
|
||||||
self::initArrField($field, $admin_resources[$cur_adm], 0);
|
self::initArrField($field, $admin_resources[$cur_adm], 0);
|
||||||
$admin[$field . '_new'] = $admin_resources[$cur_adm][$field];
|
// initialize new values
|
||||||
|
$admin[$field . '_new'] = 0;
|
||||||
}
|
}
|
||||||
|
// now get the customer resource usage which we have re-calculated previously
|
||||||
foreach ($admin_customers as $acustomer) {
|
foreach ($admin_customers as $acustomer) {
|
||||||
foreach (array(
|
foreach ($resource_fields as $field) {
|
||||||
'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];
|
$admin[$field . '_new'] += $acustomer[$field];
|
||||||
}
|
}
|
||||||
// check for std-subdomain
|
// check for std-subdomain
|
||||||
if ($acustomer['standardsubdomain'] > 0) {
|
if ($acustomer['standardsubdomain'] > 0) {
|
||||||
// std-subdomain does not count to assign resource
|
// std-subdomain does not count as assigned resource
|
||||||
$admin['domains_used_new']--;
|
$admin['domains_used_new'] --;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// update database entry accordingly
|
||||||
$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,
|
||||||
|
|||||||
Reference in New Issue
Block a user