Skip to content

Commit cd9e802

Browse files
author
Marius Cramer
committed
Merge branch 'remote_quota' into 'master'
Remote Quota Added functions to get Website and Mail-Quota via Remote-Api Moved Quota-Calculation-Functions to own lib-File for usage from dashlets and Remote-Api Added Parameters to select if quota should be given readable (+kB, +MB) or as raw data (via remote)
2 parents 1aece9b + 78e231a commit cd9e802

File tree

6 files changed

+192
-138
lines changed

6 files changed

+192
-138
lines changed
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
<?php
2+
3+
class quota_lib {
4+
public function get_quota_data($clientid = null, $readable = true) {
5+
global $app;
6+
7+
$tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC");
8+
$monitor_data = array();
9+
if(is_array($tmp_rec)) {
10+
foreach ($tmp_rec as $tmp_mon) {
11+
$monitor_data = array_merge_recursive($monitor_data, unserialize($app->db->unquote($tmp_mon['data'])));
12+
}
13+
}
14+
//print_r($monitor_data);
15+
16+
// select all websites or websites belonging to client
17+
$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=?)":''), $app->functions->intval($client_id));
18+
19+
//print_r($sites);
20+
if(is_array($sites) && !empty($sites)){
21+
for($i=0;$i<sizeof($sites);$i++){
22+
$username = $sites[$i]['system_user'];
23+
$sites[$i]['used'] = $monitor_data['user'][$username]['used'];
24+
$sites[$i]['soft'] = $monitor_data['user'][$username]['soft'];
25+
$sites[$i]['hard'] = $monitor_data['user'][$username]['hard'];
26+
$sites[$i]['files'] = $monitor_data['user'][$username]['files'];
27+
28+
if (!is_numeric($sites[$i]['used'])){
29+
if ($sites[$i]['used'][0] > $sites[$i]['used'][1]){
30+
$sites[$i]['used'] = $sites[$i]['used'][0];
31+
} else {
32+
$sites[$i]['used'] = $sites[$i]['used'][1];
33+
}
34+
}
35+
if (!is_numeric($sites[$i]['soft'])) $sites[$i]['soft']=$sites[$i]['soft'][1];
36+
if (!is_numeric($sites[$i]['hard'])) $sites[$i]['hard']=$sites[$i]['hard'][1];
37+
if (!is_numeric($sites[$i]['files'])) $sites[$i]['files']=$sites[$i]['files'][1];
38+
39+
if ($readable) {
40+
// colours
41+
$sites[$i]['display_colour'] = '#000000';
42+
if($sites[$i]['soft'] > 0){
43+
$used_ratio = $sites[$i]['used']/$sites[$i]['soft'];
44+
} else {
45+
$used_ratio = 0;
46+
}
47+
if($used_ratio >= 0.8) $sites[$i]['display_colour'] = '#fd934f';
48+
if($used_ratio >= 1) $sites[$i]['display_colour'] = '#cc0000';
49+
50+
if($sites[$i]['used'] > 1024) {
51+
$sites[$i]['used'] = round($sites[$i]['used'] / 1024, 2).' MB';
52+
} else {
53+
if ($sites[$i]['used'] != '') $sites[$i]['used'] .= ' KB';
54+
}
55+
56+
if($sites[$i]['soft'] > 1024) {
57+
$sites[$i]['soft'] = round($sites[$i]['soft'] / 1024, 2).' MB';
58+
} else {
59+
$sites[$i]['soft'] .= ' KB';
60+
}
61+
62+
if($sites[$i]['hard'] > 1024) {
63+
$sites[$i]['hard'] = round($sites[$i]['hard'] / 1024, 2).' MB';
64+
} else {
65+
$sites[$i]['hard'] .= ' KB';
66+
}
67+
68+
if($sites[$i]['soft'] == " KB") $sites[$i]['soft'] = $app->lng('unlimited');
69+
if($sites[$i]['hard'] == " KB") $sites[$i]['hard'] = $app->lng('unlimited');
70+
71+
if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = $app->lng('unlimited');
72+
if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = $app->lng('unlimited');
73+
74+
/*
75+
if(!strstr($sites[$i]['used'],'M') && !strstr($sites[$i]['used'],'K')) $sites[$i]['used'].= ' B';
76+
if(!strstr($sites[$i]['soft'],'M') && !strstr($sites[$i]['soft'],'K')) $sites[$i]['soft'].= ' B';
77+
if(!strstr($sites[$i]['hard'],'M') && !strstr($sites[$i]['hard'],'K')) $sites[$i]['hard'].= ' B';
78+
*/
79+
}
80+
else {
81+
if (empty($sites[$i]['soft'])) $sites[$i]['soft'] = -1;
82+
if (empty($sites[$i]['hard'])) $sites[$i]['hard'] = -1;
83+
84+
if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = -1;
85+
if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = -1;
86+
}
87+
}
88+
}
89+
90+
return $sites;
91+
}
92+
93+
public function get_mailquota_data($clientid = null, $readable = true) {
94+
global $app;
95+
96+
$tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'email_quota' ORDER BY created DESC");
97+
$monitor_data = array();
98+
if(is_array($tmp_rec)) {
99+
foreach ($tmp_rec as $tmp_mon) {
100+
//$monitor_data = array_merge_recursive($monitor_data,unserialize($app->db->unquote($tmp_mon['data'])));
101+
$tmp_array = unserialize($app->db->unquote($tmp_mon['data']));
102+
if(is_array($tmp_array)) {
103+
foreach($tmp_array as $username => $data) {
104+
if(!$monitor_data[$username]['used']) $monitor_data[$username]['used'] = $data['used'];
105+
}
106+
}
107+
}
108+
}
109+
//print_r($monitor_data);
110+
111+
// select all email accounts or email accounts belonging to client
112+
$emails = $app->db->queryAllRecords("SELECT * FROM mail_user".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : ''), $app->functions->intval($client_id));
113+
114+
//print_r($emails);
115+
if(is_array($emails) && !empty($emails)){
116+
for($i=0;$i<sizeof($emails);$i++){
117+
$email = $emails[$i]['email'];
118+
119+
$emails[$i]['used'] = isset($monitor_data[$email]['used']) ? $monitor_data[$email]['used'] : array(1 => 0);
120+
121+
if (!is_numeric($emails[$i]['used'])) $emails[$i]['used']=$emails[$i]['used'][1];
122+
123+
if ($readable) {
124+
// colours
125+
$emails[$i]['display_colour'] = '#000000';
126+
if($emails[$i]['quota'] > 0){
127+
$used_ratio = $emails[$i]['used']/$emails[$i]['quota'];
128+
} else {
129+
$used_ratio = 0;
130+
}
131+
if($used_ratio >= 0.8) $emails[$i]['display_colour'] = '#fd934f';
132+
if($used_ratio >= 1) $emails[$i]['display_colour'] = '#cc0000';
133+
134+
if($emails[$i]['quota'] == 0){
135+
$emails[$i]['quota'] = $app->lng('unlimited');
136+
} else {
137+
$emails[$i]['quota'] = round($emails[$i]['quota'] / 1048576, 4).' MB';
138+
}
139+
140+
141+
if($emails[$i]['used'] < 1544000) {
142+
$emails[$i]['used'] = round($emails[$i]['used'] / 1024, 4).' KB';
143+
} else {
144+
$emails[$i]['used'] = round($emails[$i]['used'] / 1048576, 4).' MB';
145+
}
146+
}
147+
}
148+
}
149+
150+
return $emails;
151+
}
152+
}

interface/lib/classes/remote.d/mail.inc.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,6 +1024,19 @@ public function mail_domain_set_status($session_id, $primary_id, $status) {
10241024
}
10251025
}
10261026

1027+
//** quota functions -----------------------------------------------------------------------------------
1028+
public function mailquota_get_by_user($session_id, $client_id)
1029+
{
1030+
global $app;
1031+
$app->uses('quota_lib');
1032+
1033+
if(!$this->checkPerm($session_id, 'mailquota_get_by_user')) {
1034+
$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
1035+
return false;
1036+
}
1037+
1038+
return $app->quota_lib->get_mailquota_data($client_id, false);
1039+
}
10271040

10281041
}
10291042

interface/lib/classes/remote.d/sites.inc.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,21 @@ public function sites_database_get_all_by_user($session_id, $client_id)
872872
return $all;
873873
}
874874

875+
//** quota functions -----------------------------------------------------------------------------------
876+
public function quota_get_by_user($session_id, $client_id)
877+
{
878+
global $app;
879+
$app->uses('quota_lib');
880+
881+
if(!$this->checkPerm($session_id, 'quota_get_by_user')) {
882+
$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
883+
return false;
884+
}
885+
886+
return $app->quota_lib->get_quota_data($client_id, false);
887+
}
888+
889+
875890
}
876891

877892
?>

interface/web/client/lib/remote.conf.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
$function_list['client_get_all,client_get,client_add,client_update,client_delete,client_get_sites_by_user,client_get_by_username,client_change_password,client_get_id,client_delete_everything'] = 'Client functions';
44
$function_list['domains_domain_get,domains_domain_add,domains_domain_delete,domains_get_all_by_user'] = 'Domaintool functions';
5+
$function_list['quota_get_by_user,mailquota_get_by_user'] = 'Quota functions';
56

67

78
?>

interface/web/dashboard/dashlets/mailquota.php

Lines changed: 6 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
class dashlet_mailquota {
44

55
function show() {
6-
global $app, $conf;
6+
global $app;
77

88
//* Loading Template
9-
$app->uses('tpl');
9+
$app->uses('tpl,quota_lib');
1010

1111
$tpl = new tpl;
1212
$tpl->newTemplate("dashlets/templates/mailquota.htm");
@@ -16,70 +16,17 @@ function show() {
1616
if(is_file($lng_file)) include $lng_file;
1717
$tpl->setVar($wb);
1818

19-
$tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'email_quota' ORDER BY created DESC");
20-
$monitor_data = array();
21-
if(is_array($tmp_rec)) {
22-
foreach ($tmp_rec as $tmp_mon) {
23-
//$monitor_data = array_merge_recursive($monitor_data,unserialize($app->db->unquote($tmp_mon['data'])));
24-
$tmp_array = unserialize($app->db->unquote($tmp_mon['data']));
25-
if(is_array($tmp_array)) {
26-
foreach($tmp_array as $username => $data) {
27-
if(!$monitor_data[$username]['used']) $monitor_data[$username]['used'] = $data['used'];
28-
}
29-
}
30-
}
31-
}
32-
//print_r($monitor_data);
33-
if($_SESSION["s"]["user"]["typ"] != 'admin'){
34-
$sql_where = " AND sys_groupid = ".intval($_SESSION['s']['user']['default_group']);
35-
}
19+
$emails = $app->quota_lib->get_mailquota_data( ($_SESSION["s"]["user"]["typ"] != 'admin') ? $_SESSION['s']['user']['client_id'] : null);
20+
//print_r($emails);
3621

3722
$has_mailquota = false;
38-
// select email accounts belonging to client
39-
$emails = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE 1".$sql_where);
40-
//print_r($emails);
4123
if(is_array($emails) && !empty($emails)){
42-
for($i=0;$i<sizeof($emails);$i++){
43-
$email = $emails[$i]['email'];
44-
45-
$emails[$i]['used'] = isset($monitor_data[$email]['used']) ? $monitor_data[$email]['used'] : array(1 => 0);
46-
47-
if (!is_numeric($emails[$i]['used'])) $emails[$i]['used']=$emails[$i]['used'][1];
48-
49-
// colours
50-
$emails[$i]['display_colour'] = '#000000';
51-
if($emails[$i]['quota'] > 0){
52-
$used_ratio = $emails[$i]['used']/$emails[$i]['quota'];
53-
} else {
54-
$used_ratio = 0;
55-
}
56-
if($used_ratio >= 0.8) $emails[$i]['display_colour'] = '#fd934f';
57-
if($used_ratio >= 1) $emails[$i]['display_colour'] = '#cc0000';
58-
59-
if($emails[$i]['quota'] == 0){
60-
$emails[$i]['quota'] = $app->lng('unlimited');
61-
} else {
62-
$emails[$i]['quota'] = round($emails[$i]['quota'] / 1048576, 4).' MB';
63-
}
64-
65-
66-
if($emails[$i]['used'] < 1544000) {
67-
$emails[$i]['used'] = round($emails[$i]['used'] / 1024, 4).' KB';
68-
} else {
69-
$emails[$i]['used'] = round($emails[$i]['used'] / 1048576, 4).' MB';
70-
}
71-
72-
}
73-
$has_mailquota = true;
7424
$tpl->setloop('mailquota', $emails);
25+
$has_mailquota = isset($emails[0]['used']);
7526
}
76-
//print_r($sites);
77-
7827
$tpl->setVar('has_mailquota', $has_mailquota);
79-
28+
8029
return $tpl->grab();
81-
82-
8330
}
8431

8532
}

interface/web/dashboard/dashlets/quota.php

Lines changed: 5 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
class dashlet_quota {
44

55
function show() {
6-
global $app, $conf;
6+
global $app;
77

88
//* Loading Template
9-
$app->uses('tpl');
9+
$app->uses('tpl,quota_lib');
1010

1111
$tpl = new tpl;
1212
$tpl->newTemplate("dashlets/templates/quota.htm");
@@ -16,88 +16,14 @@ function show() {
1616
if(is_file($lng_file)) include $lng_file;
1717
$tpl->setVar($wb);
1818

19-
$tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC");
20-
$monitor_data = array();
21-
if(is_array($tmp_rec)) {
22-
foreach ($tmp_rec as $tmp_mon) {
23-
$monitor_data = array_merge_recursive($monitor_data, unserialize($app->db->unquote($tmp_mon['data'])));
24-
}
25-
}
26-
//print_r($monitor_data);
27-
if($_SESSION["s"]["user"]["typ"] != 'admin'){
28-
$sql_where = " AND sys_groupid = ".$app->functions->intval($_SESSION['s']['user']['default_group']);
29-
}
19+
$sites = $app->quota_lib->get_quota_data( ($_SESSION["s"]["user"]["typ"] != 'admin') ? $_SESSION['s']['user']['client_id'] : null);
20+
//print_r($sites);
3021

3122
$has_quota = false;
32-
// select websites belonging to client
33-
$sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND type = 'vhost'".$sql_where);
34-
//print_r($sites);
3523
if(is_array($sites) && !empty($sites)){
36-
for($i=0;$i<sizeof($sites);$i++){
37-
$username = $sites[$i]['system_user'];
38-
$sites[$i]['used'] = $monitor_data['user'][$username]['used'];
39-
$sites[$i]['soft'] = $monitor_data['user'][$username]['soft'];
40-
$sites[$i]['hard'] = $monitor_data['user'][$username]['hard'];
41-
$sites[$i]['files'] = $monitor_data['user'][$username]['files'];
42-
43-
if (!is_numeric($sites[$i]['used'])){
44-
if ($sites[$i]['used'][0] > $sites[$i]['used'][1]){
45-
$sites[$i]['used'] = $sites[$i]['used'][0];
46-
} else {
47-
$sites[$i]['used'] = $sites[$i]['used'][1];
48-
}
49-
}
50-
if (!is_numeric($sites[$i]['soft'])) $sites[$i]['soft']=$sites[$i]['soft'][1];
51-
if (!is_numeric($sites[$i]['hard'])) $sites[$i]['hard']=$sites[$i]['hard'][1];
52-
if (!is_numeric($sites[$i]['files'])) $sites[$i]['files']=$sites[$i]['files'][1];
53-
54-
// colours
55-
$sites[$i]['display_colour'] = '#000000';
56-
if($sites[$i]['soft'] > 0){
57-
$used_ratio = $sites[$i]['used']/$sites[$i]['soft'];
58-
} else {
59-
$used_ratio = 0;
60-
}
61-
if($used_ratio >= 0.8) $sites[$i]['display_colour'] = '#fd934f';
62-
if($used_ratio >= 1) $sites[$i]['display_colour'] = '#cc0000';
63-
64-
if($sites[$i]['used'] > 1024) {
65-
$sites[$i]['used'] = round($sites[$i]['used'] / 1024, 2).' MB';
66-
} else {
67-
if ($sites[$i]['used'] != '') $sites[$i]['used'] .= ' KB';
68-
}
69-
70-
if($sites[$i]['soft'] > 1024) {
71-
$sites[$i]['soft'] = round($sites[$i]['soft'] / 1024, 2).' MB';
72-
} else {
73-
$sites[$i]['soft'] .= ' KB';
74-
}
75-
76-
if($sites[$i]['hard'] > 1024) {
77-
$sites[$i]['hard'] = round($sites[$i]['hard'] / 1024, 2).' MB';
78-
} else {
79-
$sites[$i]['hard'] .= ' KB';
80-
}
81-
82-
if($sites[$i]['soft'] == " KB") $sites[$i]['soft'] = $app->lng('unlimited');
83-
if($sites[$i]['hard'] == " KB") $sites[$i]['hard'] = $app->lng('unlimited');
84-
85-
86-
/*
87-
if(!strstr($sites[$i]['used'],'M') && !strstr($sites[$i]['used'],'K')) $sites[$i]['used'].= ' B';
88-
if(!strstr($sites[$i]['soft'],'M') && !strstr($sites[$i]['soft'],'K')) $sites[$i]['soft'].= ' B';
89-
if(!strstr($sites[$i]['hard'],'M') && !strstr($sites[$i]['hard'],'K')) $sites[$i]['hard'].= ' B';
90-
*/
91-
92-
if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = $app->lng('unlimited');
93-
if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = $app->lng('unlimited');
94-
95-
}
96-
$has_quota = true;
9724
$tpl->setloop('quota', $sites);
25+
$has_quota = isset($sites[0]['used']);
9826
}
99-
//print_r($sites);
100-
10127
$tpl->setVar('has_quota', $has_quota);
10228

10329
return $tpl->grab();

0 commit comments

Comments
 (0)