lib/FbScanDir.class.php

Go to the documentation of this file.
00001 <?php
00013 class FbScanDir
00014 {
00015   private $dirList_ = Array();
00016   private $fileList_ = Array();
00017   private $l10n_;
00023   public function __construct($dir) {
00024     // Check directory validity
00025     if (!is_dir($dir))
00026       throw new ExceptionNotFound($dir);
00027     
00028     // No localization by default (empty L10n object)
00029     $this->l10n_ = new L10n;
00030     
00031     // Scan directory for subdirectories and files (and sort)
00032     $scanList = scandir($dir);
00033     array_shift($scanList);     // Remove '.'
00034     array_shift($scanList);     // Remove '..'
00035     
00036     // Fill dirList and fileList arrays
00037     foreach ($scanList as $current) {
00038       $file = $dir.'/'.$current;
00039       $size = filesize($file);
00040       $mtime = filemtime($file);
00041       if (is_dir($file)) {
00042         $this->dirList_ []= Array(
00043           'name' => $current,
00044           'mtime' => $mtime);
00045       } else {
00046         $this->fileList_ []= Array(
00047           'name' => $current,
00048           'size' => $size,
00049           'mtime' => $mtime);
00050       }
00051     }
00052     
00053     // Sort lists
00054     $this->handleSortRequest();
00055     $this->sort();
00056   }
00061   public function setLocale($l10n) {
00062     $this->l10n_ = $l10n;
00063   }
00068   public function currentSort() {
00069     return $_SESSION['fbSort'];
00070   }
00075   public function sortLinkArray() {
00076     $l10n = $this->l10n_;
00077     $sort = Array(
00078       'name' => 'N',
00079       'size' => 'S',
00080       'mtime' => 'M');
00081     foreach ($sort as $field => $cap) {
00082       $bSortAsc = (bool)($this->currentSort() == $cap);
00083       $bSort = str_replace('-', '', $this->currentSort()) == $cap;
00084       
00085       $href = '?sort='.($bSortAsc?'-':'').$cap;
00086       $text = $l10n->tr($bSortAsc?'Descending':'Ascending');
00087       $img = $alt = null;
00088       if ($bSort) {
00089         $img = ($bSortAsc)?'/s_asc.png':'/s_desc.png';
00090         $alt = $l10n->tr($bSortAsc?'Ascending':'Descending');
00091       }
00092       $sort[$field] = Array(
00093         'href' => $href,
00094         'text' => $text,
00095         'img' => $img,
00096         'alt' => $alt);
00097     }
00098     return $sort;
00099   }
00104   private function handleSortRequest() {
00105     session_start();
00106     session_register('fbSort');
00107     if (isset($_GET['sort'])) {
00108       $sortRq = strtoupper($_GET['sort']);
00109       switch ($sortRq) {
00110         case 'N':
00111         case 'S':
00112         case 'M':
00113         case '-N':
00114         case '-S':
00115         case '-M':
00116           $_SESSION['fbSort'] = $sortRq;
00117       }
00118     }
00119     if (!isset($_SESSION['fbSort']))
00120       $_SESSION['fbSort'] = 'N';
00121   }
00125   private function sort() {
00126     $sort = strtoupper($this->currentSort());
00127     $dirSort = $fileSort = '';
00128     switch ($sort) {
00129       case '+N': case 'N':
00130         $dirSort = $fileSort = 'FbScanDir_cmpName';
00131         break;
00132       case '-N':
00133         $dirSort = $fileSort = 'FbScanDir_cmpNameD';
00134         break;
00135       case '+S': case 'S':
00136         $dirSort = 'FbScanDir_cmpName';
00137         $fileSort = 'FbScanDir_cmpSize';
00138         break;
00139       case '-S':
00140         $dirSort = 'FbScanDir_cmpName';
00141         $fileSort = 'FbScanDir_cmpSizeD';
00142         break;
00143       case '+M': case 'M':
00144         $dirSort = $fileSort = 'FbScanDir_cmpMtime';
00145         break;
00146       case '-M':
00147         $dirSort = $fileSort = 'FbScanDir_cmpMtimeD';
00148         break;
00149     }
00150     usort($this->dirList_, $dirSort);
00151     usort($this->fileList_, $fileSort);
00152   }
00153   
00161   public function dirList() {
00162     return $this->dirList_;
00163   }
00164   
00173   public function fileList() {
00174     return $this->fileList_;
00175   }
00176   
00182   public static function sizeToString($countOfBytes) {
00183     if ($countOfBytes<1024)
00184       return sprintf('%d B', $countOfBytes);
00185     $size = (float)$countOfBytes;
00186     $size /= 1024;
00187     if ($size<1024)
00188       return sprintf('%.1f KB', $size);
00189     $size /= 1024;
00190     if ($size<1024)
00191       return sprintf('%.1f MB', $size);
00192     else
00193       return sprintf('%.1f GB', $size/1024);
00194   }
00195   
00201   public static function mtimeToString($timeStamp) {
00202     return date('Y-m-d H:i', $timeStamp);
00203   }
00204   
00210   public static function mtimeDateToString($timeStamp) {
00211     return date('Y-m-d', $timeStamp);
00212   }
00213   
00219   public static function mtimeTimeToString($timeStamp) {
00220     return date('H:i', $timeStamp);
00221   }
00222 }
00223 
00224 // end of FbScanDir class
00225 function FbScanDir_intCmp($a, $b) {
00226   if ($a>$b)
00227     return 1;
00228   else if ($b>$a)
00229     return -1;
00230   else
00231     return 0;
00232 }
00233 function FbScanDir_cmpName($a, $b) {
00234   return strcmp($a['name'], $b['name']);
00235 }
00236 function FbScanDir_cmpNameD($a, $b) {
00237   return strcmp($b['name'], $a['name']);
00238 }
00239 function FbScanDir_cmpSize($a, $b) {
00240   return FbScanDir_intCmp($a['size'], $b['size']);
00241 }
00242 function FbScanDir_cmpSizeD($a, $b) {
00243   return FbScanDir_intCmp($b['size'], $a['size']);
00244 }
00245 function FbScanDir_cmpMtime($a, $b) {
00246   return FbScanDir_intCmp($a['mtime'], $b['mtime']);
00247 }
00248 function FbScanDir_cmpMtimeD($a, $b) {
00249   return FbScanDir_intCmp($b['mtime'], $a['mtime']);
00250 }
00251 ?>

Generated on Sat Mar 8 10:26:43 2008 for Dudka.cz by  doxygen 1.5.4