2006-04-26 12:28:53 +00:00
< ? php
/*
2012-08-25 15:44:50 +00:00
----------------------------------------------------------------------
AlternC - Web Hosting System
Copyright ( C ) 2000 - 2012 by the AlternC Development Team .
https :// alternc . org /
----------------------------------------------------------------------
LICENSE
This program is free software ; you can redistribute it and / or
modify it under the terms of the GNU General Public License ( GPL )
as published by the Free Software Foundation ; either version 2
of the License , or ( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
To read the license please visit http :// www . gnu . org / copyleft / gpl . html
----------------------------------------------------------------------
Purpose of file : Manage user quota
----------------------------------------------------------------------
2006-04-26 12:28:53 +00:00
*/
/**
2012-08-25 15:44:50 +00:00
* Class for hosting quotas management
*
* This class manages services ' quotas for each user of AlternC .
* The available quotas for each service is stored in the system . quotas
* mysql table . The used value is computed by the class using a
* callback function < code > alternc_quota_check ( $uid ) </ code > that
* may by exported by each service class .< br >
* each class may also export a function < code > alternc_quota_names () </ code >
* that returns an array with the quotas names managed by this class .
*
*/
2006-04-26 12:28:53 +00:00
class m_quota {
2013-06-12 11:22:02 +00:00
var $disk = Array (); /* disk resource for which we will manage quotas */
2006-04-26 12:28:53 +00:00
2013-06-12 11:22:02 +00:00
var $disk_quota_enable ;
2006-04-26 12:28:53 +00:00
var $quotas ;
var $clquota ; // Which class manage which quota.
2009-09-08 05:29:38 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
/**
* Constructor
*/
function m_quota () {
2014-03-28 11:37:36 +00:00
$this -> disk_quota_enable = variable_get ( 'disk_quota_enable' , 1 , 'Are disk quota enabled for this server' , array ( 'desc' => 'Enabled' , 'type' => 'boolean' ));
2013-06-12 11:22:02 +00:00
if ( $this -> disk_quota_enable ) {
$this -> disk = Array ( " web " => " web " );
}
2006-04-26 12:28:53 +00:00
}
2012-11-08 19:39:39 +00:00
private function dummy_for_translation () {
2012-11-08 19:37:22 +00:00
_ ( " quota_web " );
}
2013-02-18 10:01:28 +00:00
function hook_menu () {
$obj = array (
'title' => _ ( " Show my quotas " ),
'ico' => 'images/quota.png' ,
2013-10-18 08:03:40 +00:00
'link' => 'toggle' ,
2013-02-18 10:01:28 +00:00
'pos' => 110 ,
'divclass' => 'menu-quota' ,
'links' => array (),
) ;
2013-06-12 11:22:02 +00:00
$q = $this -> getquota ();
2013-02-18 10:01:28 +00:00
foreach ( array ( 'web' , 'bw_web' ) as $key ) {
2013-06-12 11:22:02 +00:00
if ( ! isset ( $q [ $key ][ " u " ]) || empty ( $q [ $key ][ " t " ])) continue ;
2013-02-18 10:01:28 +00:00
$usage_percent = ( int ) ( $q [ $key ][ " u " ] / $q [ $key ][ " t " ] * 100 );
$obj [ 'links' ][] = array ( 'txt' => _ ( " quota_ " . $key ) . " " . sprintf ( _ ( " %s%% of %s " ), $usage_percent , format_size ( $q [ $key ][ " t " ] * 1024 )), 'url' => ( $key == 'bw_web' ? 'stats_show_per_month.php' : 'quota_show.php' ) );
$obj [ 'links' ][] = array ( 'txt' => 'progressbar' , 'total' => $q [ $key ][ " t " ], 'used' => $q [ $key ][ " u " ]);
}
2013-10-18 08:03:40 +00:00
2013-02-18 10:01:28 +00:00
return $obj ;
}
2009-09-08 05:29:38 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
/** Check if a user can use a ressource .
2009-09-08 05:29:38 +00:00
* @ param string $ressource the ressource name ( a named quota )
2006-04-26 12:28:53 +00:00
* @ Return TRUE if the user can create a ressource ( = is there any quota left ? )
2014-03-26 13:59:41 +00:00
* @ return boolean
2006-04-26 12:28:53 +00:00
*/
function cancreate ( $ressource = " " ) {
$t = $this -> getquota ( $ressource );
return $t [ " u " ] < $t [ " t " ];
}
2009-09-08 05:29:38 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2012-08-25 15:38:26 +00:00
/** List the quota - managed services in the server
* @ Return array the quota names and description ( translated )
2006-04-26 12:28:53 +00:00
*/
function qlist () {
2012-08-25 15:38:26 +00:00
global $classes , $hooks ;
2006-04-26 12:28:53 +00:00
$qlist = array ();
reset ( $this -> disk );
while ( list ( $key , $val ) = each ( $this -> disk )) {
$qlist [ $key ] = _ ( " quota_ " . $key ); // those are specific disks quotas.
}
2012-08-26 16:11:53 +00:00
foreach ( $this -> getquota () as $qq ) {
2012-08-29 13:18:27 +00:00
if ( isset ( $qq [ 'name' ])) {
$qlist [ $qq [ 'name' ]] = $qq [ 'description' ];
}
2006-04-26 12:28:53 +00:00
}
return $qlist ;
}
2012-08-26 11:01:54 +00:00
2012-10-16 09:21:00 +00:00
/**
* Synchronise the quotas of the users with the quota of the
* user ' s profile .
* If the user have a greater quota than the profile , no change .
* If the quota entry doesn ' t exist for the user , create it with
* the defaults value .
*/
function synchronise_user_profile () {
global $db , $err ;
2012-10-16 15:12:54 +00:00
$err -> log ( " quota " , " synchronise_user_profile " );
2012-10-16 09:21:00 +00:00
$q = " insert into quotas select m.uid as uid, d.quota as name, d.value as total from membres m, defquotas d left join quotas q on q.name=d.quota where m.type=d.type ON DUPLICATE KEY UPDATE total = greatest(d.value, quotas.total); " ;
2012-10-16 09:30:58 +00:00
if ( ! $db -> query ( $q )) return false ;
2012-10-16 09:21:00 +00:00
return true ;
}
2012-10-16 15:12:54 +00:00
/*
* Create default quota in the profile
* when a new quota appear
*
*/
function create_missing_quota_profile () {
global $db , $quota , $err ;
$err -> log ( " quota " , " create_missing_quota_profile " );
$qt = $quota -> getquota ( '' , true );
$type = $quota -> listtype ();
foreach ( $type as $t ) {
foreach ( $qt as $q => $vv ) {
$db -> query ( " INSERT IGNORE defquotas (value,quota,type) VALUES (0,' $q ',' $t '); " );
}
}
return true ;
}
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2009-09-08 05:29:38 +00:00
/** Return a ressource usage ( u ) and total quota ( t )
* @ param string $ressource ressource to get quota of
* @ Return array the quota used and total for this ressource ( or for all ressource if unspecified )
2006-04-26 12:28:53 +00:00
*/
2012-08-27 10:37:31 +00:00
function getquota ( $ressource = " " , $recheck = false ) {
2013-06-12 11:22:02 +00:00
global $db , $err , $cuid , $get_quota_cache , $hooks , $mem ;
2006-04-26 12:28:53 +00:00
$err -> log ( " quota " , " getquota " , $ressource );
2012-08-27 10:37:31 +00:00
if ( $recheck ) { // rebuilding quota
$get_quota_cache = null ;
2014-03-26 13:31:06 +00:00
$this -> quotas = array ();
2012-08-27 10:37:31 +00:00
}
2011-03-27 17:39:17 +00:00
if ( ! empty ( $get_quota_cache [ $cuid ]) ) {
2011-03-06 21:28:14 +00:00
// This function is called many time each webpage, so I cache the result
2011-03-27 17:39:17 +00:00
$this -> quotas = $get_quota_cache [ $cuid ];
2006-04-26 12:28:53 +00:00
} else {
2012-08-26 16:11:53 +00:00
$res = $hooks -> invoke ( " hook_quota_get " );
foreach ( $res as $r ) {
$this -> quotas [ $r [ 'name' ]] = $r ;
$this -> quotas [ $r [ 'name' ]][ 'u' ] = $r [ 'used' ]; // retrocompatibilité
$this -> quotas [ $r [ 'name' ]][ 't' ] = 0 ; // Default quota = 0
2012-08-25 15:38:26 +00:00
}
2012-08-25 15:44:50 +00:00
reset ( $this -> disk );
2013-06-12 11:22:02 +00:00
if ( ! empty ( $this -> disk )) { // Check if there are some disk quota to check
// Look if there are some cached value
$disk_cached = $mem -> session_tempo_params_get ( 'quota_cache_disk' );
while ( list ( $key , $val ) = each ( $this -> disk )) {
$a = array ();
if (
isset ( $disk_cached [ $val ])
&& ! empty ( $disk_cached [ $val ])
2013-06-24 14:08:47 +00:00
&& $disk_cached [ $val ][ 'uid' ] == $cuid
2013-06-12 11:22:02 +00:00
&& $disk_cached [ $val ][ 'timestamp' ] > ( time () - ( 90 ) ) // Cache, en seconde
) {
// If there is a cached value
$a = $disk_cached [ $val ];
} else {
exec ( " /usr/lib/alternc/quota_get " . $cuid , $ak );
$a [ 'u' ] = intval ( $ak [ 0 ]);
$a [ 't' ] =@ intval ( $ak [ 1 ]);
$a [ 'timestamp' ] = time ();
2013-06-24 14:08:47 +00:00
$a [ 'uid' ] = $cuid ;
2013-06-12 11:22:02 +00:00
$disk_cached = $mem -> session_tempo_params_set ( 'quota_cache_disk' , array ( $val => $a ));
}
$this -> quotas [ $val ] = array ( " name " => " $val " , 'description' => _ ( " quota_ " . $val ), " t " => $a [ 't' ], " u " => $a [ 'u' ]);
}
}
2012-08-26 16:11:53 +00:00
// Get the allowed quota from database.
$db -> query ( " select name, total from quotas where uid=' $cuid '; " );
while ( $db -> next_record () ) {
$this -> quotas [ $db -> f ( 'name' )][ 't' ] = $db -> f ( 'total' );
}
2012-08-25 15:44:50 +00:00
$get_quota_cache [ $cuid ] = $this -> quotas ;
2012-08-25 15:38:26 +00:00
}
2012-08-25 15:44:50 +00:00
2006-04-26 12:28:53 +00:00
if ( $ressource ) {
2012-04-06 10:10:36 +00:00
if ( isset ( $this -> quotas [ $ressource ]) ) {
2012-08-25 15:44:50 +00:00
return $this -> quotas [ $ressource ];
2012-04-06 10:10:36 +00:00
} else {
2012-08-25 15:44:50 +00:00
return 0 ;
2012-04-06 10:10:36 +00:00
}
2006-04-26 12:28:53 +00:00
} else {
return $this -> quotas ;
}
}
2012-08-25 15:44:50 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
/** Set the quota for a user ( and for a ressource )
2009-09-08 05:29:38 +00:00
* @ param string $ressource ressource to set quota of
2006-04-26 12:28:53 +00:00
* @ param integer size of the quota ( available or used )
*/
function setquota ( $ressource , $size ) {
global $err , $db , $cuid ;
$err -> log ( " quota " , " setquota " , $ressource . " / " . $size );
2008-04-30 03:34:57 +00:00
if ( floatval ( $size ) == 0 ) $size = " 0 " ;
2011-06-04 09:39:15 +00:00
if ( isset ( $this -> disk [ $ressource ])) {
2006-04-26 12:28:53 +00:00
// It's a disk resource, update it with shell command
2012-11-27 21:32:43 +00:00
exec ( " sudo /usr/lib/alternc/quota_edit $cuid $size &> /dev/null & " );
2006-04-26 12:28:53 +00:00
// Now we check that the value has been written properly :
2012-11-27 21:32:43 +00:00
exec ( " sudo /usr/lib/alternc/quota_get $cuid &> /dev/null & " , $a );
2013-01-21 14:51:33 +00:00
if ( ! isset ( $a [ 1 ]) || $size != $a [ 1 ]) {
2012-10-18 07:52:54 +00:00
$err -> raise ( " quota " , _ ( " Error writing the quota entry! " ));
2006-04-26 12:28:53 +00:00
return false ;
}
}
// We check that this ressource exists for this client :
$db -> query ( " SELECT * FROM quotas WHERE uid=' $cuid ' AND name=' $ressource ' " );
if ( $db -> num_rows ()) {
2012-08-25 15:44:50 +00:00
$db -> query ( " UPDATE quotas SET total=' $size ' WHERE uid=' $cuid ' AND name=' $ressource '; " );
2006-04-26 12:28:53 +00:00
} else {
2012-08-25 15:44:50 +00:00
$db -> query ( " INSERT INTO quotas (uid,name,total) VALUES (' $cuid ',' $ressource ',' $size '); " );
2006-04-26 12:28:53 +00:00
}
return true ;
}
/* ----------------------------------------------------------------- */
/**
* Erase all quota information about the user .
*/
function delquotas () {
global $db , $err , $cuid ;
$err -> log ( " quota " , " delquota " );
$db -> query ( " DELETE FROM quotas WHERE uid=' $cuid '; " );
return true ;
}
2009-09-08 05:29:38 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2012-08-25 15:38:26 +00:00
/** Get the default quotas as an associative array
2006-04-26 12:28:53 +00:00
* @ return array the array of the default quotas
*/
function getdefaults () {
global $db ;
$c = array ();
$db -> query ( " SELECT type,quota FROM defquotas WHERE type='default' " );
if ( ! $db -> next_record ())
$this -> addtype ( 'default' );
$db -> query ( " SELECT value,quota,type FROM defquotas ORDER BY type,quota " );
while ( $db -> next_record ()) {
$type = $db -> f ( " type " );
$c [ $type ][ $db -> f ( " quota " )] = $db -> f ( " value " );
}
return $c ;
}
2009-09-08 05:29:38 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2012-08-25 15:38:26 +00:00
/** Set the default quotas
2006-04-26 12:28:53 +00:00
* @ param array associative array of quota ( key => val )
*/
function setdefaults ( $newq ) {
global $db ;
$qlist = $this -> qlist ();
foreach ( $newq as $type => $quotas ) {
foreach ( $quotas as $qname => $value ) {
if ( array_key_exists ( $qname , $qlist )) {
if ( ! $db -> query ( " REPLACE INTO defquotas (value,quota,type) VALUES ( $value ,' $qname ',' $type '); " ))
return false ;
}
}
}
return true ;
}
2012-08-25 15:38:26 +00:00
2009-09-08 05:29:38 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2012-08-25 15:38:26 +00:00
/** Add an account type for quotas
2009-09-08 05:29:38 +00:00
* @ param string $type account type to be added
* @ return boolean true if all went ok
2006-04-26 12:28:53 +00:00
*/
function addtype ( $type ) {
2012-08-22 09:46:56 +00:00
global $db , $err ;
2006-04-26 12:28:53 +00:00
$qlist = $this -> qlist ();
2012-08-22 09:46:56 +00:00
if ( empty ( $type )) return false ;
$type = strtolower ( $type );
if ( ! preg_match ( " #^[a-z0-9]* $ # " , $type )) {
2012-11-08 14:33:46 +00:00
$err -> raise ( " quota " , " Type can only contains characters a-z and 0-9 " );
2012-08-22 09:46:56 +00:00
return false ;
}
2006-04-26 12:28:53 +00:00
while ( list ( $key , $val ) = each ( $qlist )) {
if ( ! $db -> query ( " INSERT IGNORE INTO defquotas (quota,type) VALUES(' $key ', ' $type '); " )
|| $db -> affected_rows () == 0 )
return false ;
}
return true ;
}
2009-09-08 05:29:38 +00:00
2012-08-22 09:46:56 +00:00
/* ----------------------------------------------------------------- */
2012-08-25 15:38:26 +00:00
/** List for quotas
2012-08-22 09:46:56 +00:00
* @ return array
*/
function listtype () {
global $db ;
$db -> query ( " SELECT distinct(type) FROM defquotas ORDER by type " );
$t = array ();
while ( $db -> next_record ()) {
$t [] = $db -> f ( " type " );
}
return $t ;
}
2012-08-25 15:38:26 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2012-08-25 15:38:26 +00:00
/** Delete an account type for quotas
2009-09-08 05:29:38 +00:00
* @ param string $type account type to be deleted
* @ return boolean true if all went ok
2006-04-26 12:28:53 +00:00
*/
function deltype ( $type ) {
global $db ;
2012-08-25 15:38:26 +00:00
2006-04-26 12:28:53 +00:00
if ( $db -> query ( " UPDATE membres SET type='default' WHERE type=' $type ' " ) &&
$db -> query ( " DELETE FROM defquotas WHERE type=' $type ' " )) {
return true ;
} else {
return false ;
}
}
2012-08-25 15:38:26 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2012-08-25 15:38:26 +00:00
/** Create default quotas entries for a new user .
2009-09-08 05:29:38 +00:00
* The user we are talking about is in the global $cuid .
2006-04-26 12:28:53 +00:00
*/
function addquotas () {
global $db , $err , $cuid ;
$err -> log ( " quota " , " addquota " );
$ql = $this -> qlist ();
reset ( $ql );
$db -> query ( " SELECT type,quota FROM defquotas WHERE type='default' " );
if ( ! $db -> next_record ())
$this -> addtype ( 'default' );
$db -> query ( " SELECT type FROM membres WHERE uid=' $cuid ' " );
$db -> next_record ();
$t = $db -> f ( " type " );
2012-08-25 15:38:26 +00:00
2006-04-26 12:28:53 +00:00
foreach ( $ql as $res => $val ) {
$db -> query ( " SELECT value FROM defquotas WHERE quota=' $res ' AND type=' $t ' " );
$q = $db -> next_record () ? $db -> f ( " value " ) : 0 ;
$this -> setquota ( $res , $q );
}
return true ;
}
2012-08-25 15:38:26 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
/** Return a quota value with its unit ( when it is a space quota )
* in MB , GB , TB ...
* @ param string $type The quota type
* @ param integer $value The quota value
* @ return string a quota value with its unit .
*/
function display_val ( $type , $value ) {
switch ( $type ) {
case 'bw_web' :
return format_size ( $value );
case 'web' :
return format_size ( $value * 1024 );
default :
return $value ;
}
}
2012-08-25 15:38:26 +00:00
2006-04-26 12:28:53 +00:00
2012-08-24 16:14:15 +00:00
/* get size_xx function (filled by spoolsize.php) */
function _get_sum_sql ( $sql ) {
global $db , $err , $cuid ;
$db -> query ( $sql );
if ( $db -> num_rows () == 0 ) {
return - 1 ;
} else {
$db -> next_record ();
$r = $db -> Record ;
return $r [ 'sum' ];
}
}
2012-08-25 15:38:26 +00:00
2012-08-24 16:14:15 +00:00
function _get_count_sql ( $sql ) {
global $db , $err , $cuid ;
$db -> query ( $sql );
if ( $db -> num_rows () == 0 ) {
return 0 ;
} else {
$db -> next_record ();
$r = $db -> Record ;
return $r [ 'count' ];
}
}
2012-08-24 17:16:29 +00:00
function _get_size_and_record_sql ( $sql ) {
global $db , $err , $cuid ;
$db -> query ( $sql );
if ( $db -> num_rows () == 0 ) {
return array ();
} else {
$ret = array ();
while ( $db -> next_record ()) {
$ret [] = $db -> Record ;
}
return $ret ;
}
}
2012-08-24 16:14:15 +00:00
/* sum of websites sizes from all users */
function get_size_web_sum_all () {
return $this -> _get_sum_sql ( " SELECT SUM(size) AS sum FROM size_web; " );
}
/* sum of websites sizes from one user */
function get_size_web_sum_user ( $u ) {
return $this -> _get_sum_sql ( " SELECT SUM(size) AS sum FROM size_web WHERE uid=' $u '; " );
}
/* sum of mailbox sizes from all domains */
function get_size_mail_sum_all () {
2012-08-26 16:54:21 +00:00
return $this -> _get_sum_sql ( " SELECT SUM(bytes) AS sum FROM mailbox; " );
2012-08-24 16:14:15 +00:00
}
/* sum of mailbox sizes for one domain */
function get_size_mail_sum_domain ( $dom ) {
2014-03-07 08:36:28 +00:00
global $mail ;
return $mail -> get_total_size_for_domain ( $dom );
2012-08-24 16:14:15 +00:00
}
/* count of mailbox sizes from all domains */
function get_size_mail_count_all () {
2012-08-26 16:54:21 +00:00
return $this -> _get_count_sql ( " SELECT COUNT(*) AS count FROM mailbox; " );
2012-08-24 16:14:15 +00:00
}
/* count of mailbox for one domain */
function get_size_mail_count_domain ( $dom ) {
2012-08-26 16:54:21 +00:00
return $this -> _get_count_sql ( " SELECT COUNT(*) AS count FROM dovecot_view WHERE user LIKE '%@ { $dom } ' " );
2012-08-24 16:14:15 +00:00
}
2012-08-24 17:16:29 +00:00
/* get list of mailbox alias and size for one domain */
function get_size_mail_details_domain ( $dom ) {
2012-11-08 14:33:46 +00:00
return $this -> _get_size_and_record_sql ( " SELECT user as alias,quota_dovecot as size FROM dovecot_view WHERE user LIKE '%@ { $dom } ' ORDER BY alias; " );
2012-08-24 17:16:29 +00:00
}
2012-08-24 16:14:15 +00:00
/* sum of mailman lists sizes from all domains */
function get_size_mailman_sum_all () {
return $this -> _get_sum_sql ( " SELECT SUM(size) AS sum FROM size_mailman; " );
}
/* sum of mailman lists sizes for one domain */
function get_size_mailman_sum_domain ( $dom ) {
return $this -> _get_sum_sql ( " SELECT SUM(size) AS sum FROM size_mailman WHERE list LIKE '%@ { $dom } ' " );
}
2012-08-24 17:16:29 +00:00
/* sum of mailman lists for one user */
function get_size_mailman_sum_user ( $u ) {
return $this -> _get_sum_sql ( " SELECT SUM(size) AS sum FROM size_mailman WHERE uid = ' { $u } ' " );
}
2012-08-24 16:14:15 +00:00
/* count of mailman lists sizes from all domains */
function get_size_mailman_count_all () {
return $this -> _get_count_sql ( " SELECT COUNT(*) AS count FROM size_mailman; " );
}
/* count of mailman lists for one user */
function get_size_mailman_count_user ( $u ) {
return $this -> _get_count_sql ( " SELECT COUNT(*) AS count FROM size_mailman WHERE uid = ' { $u } ' " );
}
2012-08-24 17:16:29 +00:00
/* get list of mailman list and size for one user */
function get_size_mailman_details_user ( $u ) {
2012-11-09 09:07:02 +00:00
return $this -> _get_size_and_record_sql ( " SELECT s.size,CONCAT(m.list,'@',m.domain) as list FROM size_mailman s LEFT JOIN mailman m ON s.list=m.name WHERE s.uid=' { $u } ' ORDER BY s.list ASC " );
2012-08-24 17:16:29 +00:00
}
2012-08-24 16:14:15 +00:00
/* sum of databases sizes from all users */
function get_size_db_sum_all () {
return $this -> _get_sum_sql ( " SELECT SUM(size) AS sum FROM size_db; " );
}
/* sum of databases sizes for one user */
function get_size_db_sum_user ( $u ) {
return $this -> _get_sum_sql ( " SELECT SUM(size) AS sum FROM size_db WHERE db = ' { $u } ' OR db LIKE ' { $u } \ _%' " );
}
/* count of databases from all users */
function get_size_db_count_all () {
return $this -> _get_count_sql ( " SELECT COUNT(*) AS count FROM size_db; " );
}
2012-08-24 17:16:29 +00:00
/* count of databases for one user */
2012-08-24 16:14:15 +00:00
function get_size_db_count_user ( $u ) {
return $this -> _get_count_sql ( " SELECT COUNT(*) AS count FROM size_db WHERE db = ' { $u } ' OR db LIKE ' { $u } \ _%' " );
}
2012-08-24 17:16:29 +00:00
/* get list of databases name and size for one user */
function get_size_db_details_user ( $u ) {
return $this -> _get_size_and_record_sql ( " SELECT db,size FROM size_db WHERE db=' { $u } ' OR db LIKE ' { $u } \ _%'; " );
}
2012-11-08 14:33:46 +00:00
/* Return appropriate value and unit of a size given in Bytes (e.g. 1024 Bytes -> return 1 KB) */
function get_size_unit ( $size ) {
$units = array ( 1073741824 => _ ( " GB " ), 1048576 => _ ( " MB " ), 1024 => _ ( " KB " ), 0 => _ ( " B " ));
foreach ( $units as $value => $unit ){
if ( $size >= $value ){
$size = str_pad ( round ( $size / ( $value ? $value : 1 ), 1 ), 5 , ' ' , STR_PAD_LEFT );
return array ( 'size' => $size , 'unit' => $unit );
}
}
}
2012-08-24 16:14:15 +00:00
2013-04-29 15:58:09 +00:00
// Affiche des barres de progression
// color_type :
// 0 = Pas de changement de couleur
// 1 = Progression du vert vers le rouge en fonction du porcentage
// 2 = Progression du rouge vers le vert en fonction du porcentage
function quota_displaybar ( $usage , $color_type = 1 ) {
if ( $color_type == 1 ) {
$csscolor = " background-color: " . PercentToColor ( $usage );
} elseif ( $color_type == 2 ) {
$csscolor = " background-color: " . PercentToColor ( 100 - $usage );
} else {
$csscolor = " " ;
}
2013-04-23 22:41:07 +00:00
echo '<div class="progress-bar">' ;
2013-04-29 15:58:09 +00:00
echo '<div class="barre" style="width:' . $usage . '%;' . $csscolor . '" ></div>' ;
echo '<div class="txt">' . $usage . '%</div>' ;
2013-04-23 22:41:07 +00:00
echo '</div>' ;
}
2012-08-24 16:14:15 +00:00
/* ==== Hook functions ==== */
2009-09-08 05:29:38 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2009-09-08 05:29:38 +00:00
/** Hook function call when a user is deleted
* AlternC ' s standard function called when a user is deleted
2012-08-25 15:38:26 +00:00
* globals $cuid is the appropriate user
2006-04-26 12:28:53 +00:00
*/
2012-08-25 15:38:26 +00:00
function hook_admin_del_member () {
2006-04-26 12:28:53 +00:00
$this -> delquotas ();
}
2009-09-08 05:29:38 +00:00
2006-04-26 12:28:53 +00:00
/* ----------------------------------------------------------------- */
2009-09-08 05:29:38 +00:00
/** Hook function called when a user is created
* This function initialize the user ' s quotas .
2012-08-25 15:38:26 +00:00
* globals $cuid is the appropriate user
2006-04-26 12:28:53 +00:00
*/
2012-08-25 15:38:26 +00:00
function hook_admin_add_member () {
2012-12-03 08:11:06 +00:00
global $err ;
$err -> log ( " quota " , " hook_admin_add_member " );
2006-04-26 12:28:53 +00:00
$this -> addquotas ();
2012-12-03 08:11:06 +00:00
$this -> getquota ( '' , true ); // actualise quota
2006-04-26 12:28:53 +00:00
}
/* ----------------------------------------------------------------- */
2012-08-25 15:38:26 +00:00
/** Exports all the quota related information for an account .
2006-04-26 12:28:53 +00:00
* @ access private
2012-08-25 15:38:26 +00:00
* EXPERIMENTAL function ;)
2006-04-26 12:28:53 +00:00
*/
2012-05-21 15:58:20 +00:00
function alternc_export_conf () {
2006-04-26 12:28:53 +00:00
global $db , $err ;
$err -> log ( " quota " , " export " );
2012-05-21 15:58:20 +00:00
$str = " <quota> " ;
2006-04-26 12:28:53 +00:00
$q = $this -> getquota ();
foreach ( $q as $k => $v ) {
2012-05-21 15:58:20 +00:00
$str .= " < $k > \n " ;
$str .= " <used> " . ( $v [ " u " ]) . " </used> \n " ;
$str .= " <total> " . ( $v [ " t " ]) . " </total> \n " ;
$str .= " </ $k > \n " ;
2006-04-26 12:28:53 +00:00
}
2012-05-21 15:58:20 +00:00
$str .= " </quota> \n " ;
2006-04-26 12:28:53 +00:00
return $str ;
}
} /* Class m_quota */