diff --git a/bureau/admin/bro_main.php b/bureau/admin/bro_main.php index 224b9201..09770329 100644 --- a/bureau/admin/bro_main.php +++ b/bureau/admin/bro_main.php @@ -126,7 +126,7 @@ if ($actextract) { } /* Creation de la liste des fichiers courants */ -$c=$bro->filelist($R); +$c=$bro->filelist($R, $_REQUEST['showdirsize']); if ($c===false) $error=$err->errstr(); include("head.php"); @@ -498,6 +498,7 @@ else { ' . _("Show disk usage of directories (slow)") . '

'; if ($id=$ftp->is_ftp($R)) { echo _("There is an ftp account in this folder")." "._("Click here to edit this ftp account.")."
"; diff --git a/bureau/class/m_bro.php b/bureau/class/m_bro.php index 77c559e9..b4fd248e 100644 --- a/bureau/class/m_bro.php +++ b/bureau/class/m_bro.php @@ -158,14 +158,14 @@ class m_bro { * membre courant * @return array le tableau contenant les fichiers de $dir, et */ - function filelist($dir="") { + function filelist($dir="", $showdirsize = false) { global $db,$cuid; $db->query("UPDATE browser SET lastdir='$dir' WHERE uid='$cuid';"); $absolute=$this->convertabsolute($dir,0); if ($dir = @opendir($absolute)) { while (($file = readdir($dir)) !== false) { if ($file!="." && $file!="..") { - $c[]=array("name"=>$file, "size"=>$this->fsize($absolute."/".$file), "date"=>filemtime($absolute."/".$file), "type"=> (!is_dir($absolute."/".$file)) ); + $c[]=array("name"=>$file, "size"=>$this->fsize($absolute."/".$file, $showdirsize), "date"=>filemtime($absolute."/".$file), "type"=> (!is_dir($absolute."/".$file)) ); } } closedir($dir); @@ -276,19 +276,50 @@ class m_bro { /* ----------------------------------------------------------------- */ /** Retourne la taille du fichier $file * si $file est un dossier, retourne la taille de ce dossier et de tous - * ses sous dossiers. + * ses sous dossiers (mais seulement si l'utilisateur en a fait la demande). * @param string $file Fichier dont on souhaite connaitre la taille * @return integer Taille du fichier en octets. * TODO : create a du cache ... */ - function fsize($file) { + function fsize($file, $showdirsize = false) { if (is_dir($file)) { - return "-"; + if ($showdirsize) { + return $this->dirsize($file); + } else { + return "-"; + } } else { return filesize($file); } } + /* ----------------------------------------------------------------- */ + /** Retourne la taille du repertoire $dir (fonction recursive) + * @param string $dir Repertoire dont on souhaite connaitre la taille + * @return integer Taille du repertoire en octets. + */ + function dirsize($dir) { + $totalsize = 0; + + if ($handle = opendir($dir)) { + while (false !== ($file = readdir($handle))) { + $nextpath = $dir . '/' . $file; + + if ($file != '.' && $file != '..' && !is_link($nextpath)) { + if (is_dir($nextpath)) { + $totalsize += $this->dirsize($nextpath); + } elseif (is_file ($nextpath)) { + $totalsize += filesize($nextpath); + } + } + } + + closedir($handle); + } + + return $totalsize; + } + /* ----------------------------------------------------------------- */ /** Crée le dossier $file dans le dossier (parent) $dir * @param string $dir dossier dans lequel on veut créer un sous-dossier