diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php index 3a4cc1603cca1972f8711c7e09ff19f7c53cc8f9..a8f1f966a788f394ec1c355c4fe21dbf08a94fe3 100644 --- a/interface/lib/classes/auth.inc.php +++ b/interface/lib/classes/auth.inc.php @@ -53,6 +53,13 @@ class auth { } } + public function is_reseller() { + if($this->has_clients($_SESSION['s']['user']['userid'])) { + return true; + } else { + return false; + } + } public function has_clients($userid) { global $app, $conf; diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index 629da2fb0e21ad9ecc9dc92f99e29f1665d908c7..bca97ed30197f5cd58cc5cf85a267e7fc42bf9bb 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -287,11 +287,33 @@ class functions { * @return string - formated bytes */ public function formatBytes($size, $precision = 2) { + // 0 is a special as it would give NAN otehrwise. + if ($size == 0) { + return 0; + } + $base=log($size)/log(1024); $suffixes=array('', ' kB', ' MB', ' GB', ' TB'); return round(pow(1024, $base-floor($base)), $precision).$suffixes[floor($base)]; } + /** + * Function to change bytes to kB, MB, GB or TB or the translated string 'Unlimited' for -1 + * @param int $size - size in bytes + * @param int precicion - after-comma-numbers (default: 2) + * @return string - formated bytes + */ + public function formatBytesOrUnlimited($size, $precision = 2) { + global $app; + + if ($size == -1) { + return $app->lng('unlimited_txt'); + } + else { + return $this->formatBytes($size, $precision); + } + + } /** * Normalize a path and strip duplicate slashes from it diff --git a/interface/lib/classes/quota_lib.inc.php b/interface/lib/classes/quota_lib.inc.php index 7c5b388536ec9d0a672d9a3e283d2a5d6b7adc97..e38a7e117fbc5eafe1f00543378d27c6429fb121 100644 --- a/interface/lib/classes/quota_lib.inc.php +++ b/interface/lib/classes/quota_lib.inc.php @@ -14,7 +14,12 @@ class quota_lib { //print_r($monitor_data); // select all websites or websites belonging to client - $sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND type = 'vhost'".(($clientid != null)?" AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)":'') . " ORDER BY domain", $clientid); + $q = " SELECT * FROM web_domain + WHERE active = 'y' AND type = 'vhost'" + . 'AND sys_groupid ' . (($clientid != null) ? "= (SELECT default_group FROM sys_user WHERE client_id=?)" + : " IN (" . $_SESSION["s"]["user"]["groups"] . ")") + . " ORDER BY domain"; + $sites = $app->db->queryAllRecords($q, $clientid); //print_r($sites); if(is_array($sites) && !empty($sites)){ @@ -36,9 +41,10 @@ class quota_lib { if (!is_numeric($sites[$i]['hard'])) $sites[$i]['hard']=$sites[$i]['hard'][1]; if (!is_numeric($sites[$i]['files'])) $sites[$i]['files']=$sites[$i]['files'][1]; - $sites[$i]['used_raw'] = $sites[$i]['used']; - $sites[$i]['soft_raw'] = $sites[$i]['soft']; - $sites[$i]['hard_raw'] = $sites[$i]['hard']; + // Convert from kb to bytes, and use -1 for instead of 0 for Unlimited. + $sites[$i]['used_raw'] = $sites[$i]['used'] * 1024; + $sites[$i]['soft_raw'] = ($sites[$i]['soft'] > 0) ? $sites[$i]['soft'] * 1024 : -1; + $sites[$i]['hard_raw'] = ($sites[$i]['hard'] > 0) ? $sites[$i]['hard'] * 1024 : -1; $sites[$i]['files_raw'] = $sites[$i]['files']; $sites[$i]['used_percentage'] = ($sites[$i]['soft'] > 0 && $sites[$i]['used'] > 0 ? round($sites[$i]['used'] * 100 / $sites[$i]['soft']) : 0); @@ -53,29 +59,6 @@ class quota_lib { if($used_ratio >= 0.8) $sites[$i]['display_colour'] = '#fd934f'; if($used_ratio >= 1) $sites[$i]['display_colour'] = '#cc0000'; - if($sites[$i]['used'] > 1024) { - $sites[$i]['used'] = round($sites[$i]['used'] / 1024, 1).' MB'; - } else { - if ($sites[$i]['used'] != '') $sites[$i]['used'] .= ' KB'; - } - - if($sites[$i]['soft'] > 1024) { - $sites[$i]['soft'] = round($sites[$i]['soft'] / 1024, 1).' MB'; - } else { - $sites[$i]['soft'] .= ' KB'; - } - - if($sites[$i]['hard'] > 1024) { - $sites[$i]['hard'] = round($sites[$i]['hard'] / 1024, 1).' MB'; - } else { - $sites[$i]['hard'] .= ' KB'; - } - - if($sites[$i]['soft'] == " KB") $sites[$i]['soft'] = $app->lng('unlimited_txt'); - if($sites[$i]['hard'] == " KB") $sites[$i]['hard'] = $app->lng('unlimited_txt'); - - if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = $app->lng('unlimited_txt'); - if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = $app->lng('unlimited_txt'); /* if(!strstr($sites[$i]['used'],'M') && !strstr($sites[$i]['used'],'K')) $sites[$i]['used'].= ' B'; @@ -83,13 +66,7 @@ class quota_lib { if(!strstr($sites[$i]['hard'],'M') && !strstr($sites[$i]['hard'],'K')) $sites[$i]['hard'].= ' B'; */ } - else { - if (empty($sites[$i]['soft'])) $sites[$i]['soft'] = -1; - if (empty($sites[$i]['hard'])) $sites[$i]['hard'] = -1; - if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = -1; - if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = -1; - } } } @@ -237,7 +214,11 @@ class quota_lib { //print_r($monitor_data); // select all email accounts or email accounts belonging to client - $emails = $app->db->queryAllRecords("SELECT * FROM mail_user".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : '') . " ORDER BY email", $clientid); + $q = " SELECT * FROM mail_user" + . " WHERE sys_groupid " . (($clientid != null) ? "= (SELECT default_group FROM sys_user WHERE client_id=?)" + : " IN (" . $_SESSION["s"]["user"]["groups"] . ")") + . " ORDER BY email"; + $emails = $app->db->queryAllRecords($q, $clientid); //print_r($emails); if(is_array($emails) && !empty($emails)) { @@ -265,17 +246,8 @@ class quota_lib { if($used_ratio >= 0.8) $emails[$i]['display_colour'] = '#fd934f'; if($used_ratio >= 1) $emails[$i]['display_colour'] = '#cc0000'; - if($emails[$i]['quota'] == 0){ - $emails[$i]['quota'] = $app->lng('unlimited_txt'); - } else { - $emails[$i]['quota'] = round($emails[$i]['quota'] / 1048576, 1).' MB'; - } - - - if($emails[$i]['used'] < 1544000) { - $emails[$i]['used'] = round($emails[$i]['used'] / 1024, 1).' KB'; - } else { - $emails[$i]['used'] = round($emails[$i]['used'] / 1048576, 1).' MB'; + if($emails[$i]['quota'] == 0) { + $emails[$i]['quota'] = -1; } } } @@ -302,18 +274,22 @@ class quota_lib { //print_r($monitor_data); // select all databases belonging to client - $databases = $app->db->queryAllRecords("SELECT * FROM web_database".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : '') . " ORDER BY database_name", $clientid); + $q = "SELECT * FROM web_database" + . " WHERE sys_groupid " . (($clientid != null) ? "= (SELECT default_group FROM sys_user WHERE client_id=?)" + : " IN (" . $_SESSION["s"]["user"]["groups"] . ")") + . " ORDER BY database_name"; + $databases = $app->db->queryAllRecords($q, $clientid); //print_r($databases); if(is_array($databases) && !empty($databases)){ for($i=0;$i 0) && ($databases[$i]['used'] > 0)) ? round($databases[$i]['used_raw'] * 100 / $databases[$i]['database_quota']) : 0; + $databases[$i]['database_quota_raw'] = ($databases[$i]['database_quota'] == -1) ? -1 : $databases[$i]['database_quota'] * 1000 * 1000; + $databases[$i]['used_raw'] = $size; // / 1024 / 1024; //* quota is stored as MB - calculated bytes + $databases[$i]['used_percentage'] = (($databases[$i]['database_quota'] > 0) && ($size > 0)) ? round($databases[$i]['used_raw'] * 100 / $databases[$i]['database_quota_raw']) : 0; if ($readable) { // colours @@ -326,18 +302,8 @@ class quota_lib { if($used_ratio >= 0.8) $databases[$i]['display_colour'] = '#fd934f'; if($used_ratio >= 1) $databases[$i]['display_colour'] = '#cc0000'; - if($databases[$i]['database_quota'] == -1) { - $databases[$i]['database_quota'] = $app->lng('unlimited_txt'); - } else { - $databases[$i]['database_quota'] = $databases[$i]['database_quota'] . ' MB'; - } - if($databases[$i]['used'] < 1544000) { - $databases[$i]['used'] = round($databases[$i]['used'] / 1024, 1).' KB'; - } else { - $databases[$i]['used'] = round($databases[$i]['used'] / 1048576, 1).' MB'; - } } } } diff --git a/interface/web/dashboard/dashboard.php b/interface/web/dashboard/dashboard.php index d8adccd15eb9ba3e82783411a499084ebbf5f474..a78ade4e7c58f644e5bbfbb1d53e66a9e44123d1 100644 --- a/interface/web/dashboard/dashboard.php +++ b/interface/web/dashboard/dashboard.php @@ -214,12 +214,18 @@ if($app->auth->is_admin()) { } } +if ($app->auth->is_admin() || $app->auth->is_reseller()) { + $limit_to_client_id = null; +} +else { + $limit_to_client_id = $_SESSION['s']['user']['client_id']; +} /* Fill the left column */ $leftcol = array(); foreach($leftcol_dashlets as $name) { if(isset($dashlet_list[$name])) { - $leftcol[]['content'] = $dashlet_list[$name]->show(); + $leftcol[]['content'] = $dashlet_list[$name]->show($limit_to_client_id); } } $app->tpl->setloop('leftcol', $leftcol); @@ -228,7 +234,7 @@ $app->tpl->setloop('leftcol', $leftcol); $rightcol = array(); foreach($rightcol_dashlets as $name) { if(isset($dashlet_list[$name])) { - $rightcol[]['content'] = $dashlet_list[$name]->show(); + $rightcol[]['content'] = $dashlet_list[$name]->show($limit_to_client_id); } } $app->tpl->setloop('rightcol', $rightcol); diff --git a/interface/web/dashboard/dashlets/databasequota.php b/interface/web/dashboard/dashlets/databasequota.php index 5bb38be8545f757ef343dca1b621a3a838089dc7..6403032b542da53e520597ef03fb17d69471c69c 100644 --- a/interface/web/dashboard/dashlets/databasequota.php +++ b/interface/web/dashboard/dashlets/databasequota.php @@ -23,20 +23,18 @@ class dashlet_databasequota { $lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_databasequota.lng'; if(is_file($lng_file)) include $lng_file; $tpl->setVar($wb); - if ($_SESSION["s"]["user"]["typ"] != 'admin') { - $client_id = $_SESSION['s']['user']['client_id']; - } else { - $client_id = $limit_to_client_id; - } - $databases = $app->quota_lib->get_databasequota_data($client_id); + $databases = $app->quota_lib->get_databasequota_data($limit_to_client_id); //print_r($databases); $has_databasequota = false; $total_used = 0; if(is_array($databases) && !empty($databases)){ foreach ($databases as &$db) { - $total_used += $db['used_raw'] * 1000 * 1000; + $db['used'] = $app->functions->formatBytes($db['used_raw'], 0); + $db['database_quota'] = $app->functions->formatBytesOrUnlimited($db['database_quota_raw'], 0); + + $total_used += $db['used_raw']; } $databases = $app->functions->htmlentities($databases); $tpl->setloop('databasequota', $databases); diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php index 79ac2126c831d93cfbaf2fd11edae1cb5f0d974f..3e3040eb83cf35c4a9f30d44d8f0c766b8b7092b 100644 --- a/interface/web/dashboard/dashlets/limits.php +++ b/interface/web/dashboard/dashlets/limits.php @@ -147,38 +147,34 @@ class dashlet_limits } $tpl->setVar($wb); - if ($limit_to_client_id == 0) { - $client_id = $_SESSION['s']['user']['client_id']; - $user_is_admin = true; - } else { - $client_id = $limit_to_client_id; - $user_is_admin = false; + if ($limit_to_client_id != null) { + $client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", $limit_to_client_id); + } + elseif ($limit_to_client_id == null && $app->auth->is_reseller()) { + $client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", $_SESSION['s']['user']['client_id']); } - - $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); - $client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", $client_id); - $rows = array(); foreach ($limits as $limit) { $field = $limit['field']; $value = $client[$field]; - if ($user_is_admin) { - $value = $wb['unlimited_txt']; + if ($app->auth->is_admin() && $limit_to_client_id == 0) { + $value = -1; } else { $value = $client[$field]; } if ($value != 0 || $value == $wb['unlimited_txt']) { - $value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value; + $suffix = ''; if (isset($limit['q_type']) && $limit['q_type'] != '') { - $usage = $this->_get_assigned_quota($limit, $client_id) . " MB"; - $value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value . " MB"; + $usage = $this->_get_assigned_quota($limit, $client_id); + $suffix = ' MB'; } else { $usage = $this->_get_limit_usage($limit, $client_id); } $percentage = ($value == '-1' || intval($value) == 0 || trim($value) == '' ? -1 : round(100 * (int)$usage / (int)$value)); $progressbar = $percentage > 100 ? 100 : $percentage; + $value_formatted = ($value == '-1') ? $wb['unlimited_txt'] : ($value . $suffix); $rows[] = array('field' => $field, 'field_txt' => $wb[$field.'_txt'], 'value' => $value_formatted, @@ -223,7 +219,7 @@ class dashlet_limits } $sql .= $app->tform->getAuthSQL('r', '', $limit_to_client_id); $rec = $app->db->queryOneRecord($sql, $limit['q_type'], $limit['db_table']); - if ($limit['db_table']=='mail_user') { + if ($limit['db_table'] == 'mail_user') { $quotaMB = $rec['number'] / 1048576; } // Mail quota is in bytes, must be converted to MB else { diff --git a/interface/web/dashboard/dashlets/mailquota.php b/interface/web/dashboard/dashlets/mailquota.php index f097005d7f35dc494a63d5c999faeec093639f7a..d38fc4431ad9b3733baef242bdab2a9d74274a7e 100644 --- a/interface/web/dashboard/dashlets/mailquota.php +++ b/interface/web/dashboard/dashlets/mailquota.php @@ -16,13 +16,8 @@ class dashlet_mailquota { if(is_file($lng_file)) include $lng_file; $tpl->setVar($wb); - if ($_SESSION["s"]["user"]["typ"] != 'admin') { - $client_id = $_SESSION['s']['user']['client_id']; - } else { - $client_id = $limit_to_client_id; - } - $emails = $app->quota_lib->get_mailquota_data($client_id); + $emails = $app->quota_lib->get_mailquota_data($limit_to_client_id); //print_r($emails); $has_mailquota = false; @@ -30,6 +25,8 @@ class dashlet_mailquota { if(is_array($emails) && !empty($emails)){ foreach($emails as &$email) { $email['email'] = $app->functions->idn_decode($email['email']); + $email['used'] = $app->functions->formatBytes($email['used_raw'], 0); + $email['quota'] = $app->functions->formatBytesOrUnlimited($email['quota_raw'], 0); $total_used += $email['used_raw']; } unset($email); @@ -46,12 +43,3 @@ class dashlet_mailquota { } } - - - - - - - - -?> diff --git a/interface/web/dashboard/dashlets/quota.php b/interface/web/dashboard/dashlets/quota.php index a70a1bf25376efd8607e0a5824a88590e8804213..2dc695ae1413d4f12ccb26f1916f5ffcac0f5262 100644 --- a/interface/web/dashboard/dashlets/quota.php +++ b/interface/web/dashboard/dashlets/quota.php @@ -24,13 +24,7 @@ class dashlet_quota { if(is_file($lng_file)) include $lng_file; $tpl->setVar($wb); - if ($_SESSION["s"]["user"]["typ"] != 'admin') { - $client_id = $_SESSION['s']['user']['client_id']; - } else { - $client_id = $limit_to_client_id; - } - - $sites = $app->quota_lib->get_quota_data($client_id); + $sites = $app->quota_lib->get_quota_data($limit_to_client_id); //print_r($sites); $has_quota = false; @@ -38,7 +32,10 @@ class dashlet_quota { foreach($sites as &$site) { $site['domain'] = $app->functions->idn_decode($site['domain']); $site['progressbar'] = $site['hd_quota']; - $total_used += $site['used_raw'] * 1000; + $site['used'] = $app->functions->formatBytes($site['used_raw'], 0); + $site['hard'] = $app->functions->formatBytesOrUnlimited($site['hard_raw'], 0); + $site['soft'] = $app->functions->formatBytesOrUnlimited($site['soft_raw'], 0); + $total_used += $site['used_raw']; } unset($site);