- <?php 
- /** 
-  * @author: Jörg Reinholz, fastix WebDesign & Consult, Kassel - http://www.fastix.org/ 
-  * @return: array 
-  * @see: phpdoc functions opendir, readdir, sort, date 
-  * @uses: humanReadableBin.php, sort_2D_hash.php 
- **/ 
-   
- require_once './lib/humanReadableBin.php'; 
- require_once './lib/sort_2D_hash.php'; 
-   
- class Dir2Array 
- { 
-     protected   $DH              = false; 
-     protected   $dir             = false; 
-     private     $sortItem        = 'name'; 
-     private     $sortUpDown      = 'up'; 
-     private     $sortOrder       = SORT_REGULAR; 
-     private     $foldersFirst    = 0; 
-     private     $showHiddenFiles = 0; 
-     private     $showDirLinks    = 0; 
-     private     $arIgnoreFilesRegex = array(); 
-     private     $errors = false; 
-     public      $filetimemHumanStyle = 'Y-m-d H:i'; # the same format like in date() 
-   
-     public function __construct ( $dir = false ) { 
-   
-   
-         if (! $dir) { 
-             trigger_error(__FILE__ . ' class Dir2Array: Es wurde kein existierendes Verzeichnis übergeben.', E_USER_ERROR); 
-             setError (1, E_USER_ERROR, 'Es wurde kein existierendes Verzeichnis angebeben.'); 
-             return false; 
-         } 
-   
-             trigger_error(__FILE__ . ' class Dir2Array: Das Verzeichnis "' . $dir . '" existiert nicht.', E_USER_NOTICE); 
-             setError (2, E_USER_ERROR, 'Das Verzeichnis "' . $dir . '" existiert nicht.'); 
-             return false; 
-         } 
-   
-             trigger_error(__FILE__ . '  class Dir2Array: Das Verzeichnis "' . $dir . '" ist nicht lesbar.', E_USER_NOTICE); 
-             setError (4, E_USER_ERROR, 'Das Verzeichnis "' . $dir . '" ist nicht lesbar.'); 
-             return false; 
-         } 
-   
-   
-   
-         $this -> sortOrder        = ( SORT_NATURAL | SORT_FLAG_CASE ); 
-         $this -> showFoldersFirst = true; 
-         $this -> showHiddenFiles  = false; 
-         $this -> showDirLinks     = false; 
-         $this -> arIgnoreFilesRegex[0] = '/\.projekte_dir_cache/'; 
-         return true; 
-     } 
-   
-   
-     private function setError ($errorNumber, $ErrorType, $ErrorString) { 
-         $arErrors = $this -> errors; 
-         if (! $arError) { 
-             $errIndex=0; 
-         } else { 
-             $newErrorIndex = count($arError); 
-             $arErrors[$newErrorIndex]['ErrorNumber']=$errorNumber; 
-             $arErrors[$newErrorIndex]['ErrorType']=$errorType; 
-             $arErrors[$newErrorIndex]['ErrorString']=$errorString; 
-         } 
-         $this -> errors = $arErrors; 
-     } 
-   
-     public function getErrors () { 
-         return $this -> errors; 
-     } 
-   
-     public function getRealDir () { 
-     } 
-   
-   
-     public function setSortItem($sortItem) { 
-   
-             'name', 
-             'time', 
-             'size', 
-             'mime' 
-         ); 
-         if (! in_array($sortItem, $arGueltige) ) { 
-             trigger_error(__FILE__ . 'class Dir2Array: sorItem() wurde eine ungültiges SortItem übergeben', E_USER_NOTICE); 
-             setError (8, E_USER_NOTICE, 'class Dir2Array: sortItem() wurde ein ungültiger Wert übergeben.  Die Aktion wird ignoriert.'); 
-             return false; 
-         } else { 
-             $this -> sortItem = $sortItem; 
-             return true; 
-         } 
-     } 
-   
-     public function setSortOrder($sortOrder) { 
-             trigger_error(__FILE__ . 'class Dir2Array: sortOrder() wurde ein nichtnumerischer Wert übergeben', E_USER_NOTICE); 
-             setError (16, E_USER_NOTICE, 'sortOrder() wurde ein nichtnumerischer Wert übergeben. Die Aktion wird ignoriert.'); 
-             return false; 
-         } 
-   
-             SORT_REGULAR, 
-             SORT_NUMERIC, 
-             SORT_STRING, 
-             SORT_LOCALE_STRING, 
-             SORT_NATURAL, 
-             ( SORT_STRING | SORT_FLAG_CASE ), 
-             ( SORT_NATURAL | SORT_FLAG_CASE ) 
-         ); 
-   
-         if (! in_array($sortOrder, $arGueltige) ) { 
-             trigger_error(__FILE__ . 'class Dir2Array: sortOrder() wurde eine ungültige SortOrder übergeben', E_USER_NOTICE); 
-             setError (32, E_USER_NOTICE, 'class Dir2Array: sortOrder() wurde ein ungültiger Wert übergeben.  Die Aktion wird ignoriert.'); 
-             return false; 
-         } else { 
-             $this -> sortOrder = $sortOrder; 
-             return true; 
-         } 
-     } 
-   
-     public function setUpDown ($v) { 
-         if ('up' == $v or 'down' == $v) { 
-             $this -> sortUpDown = $v; 
-             return true; 
-         } else { 
-             trigger_error(__FILE__ . 'class Dir2Array: setUpDown wurde ein ungültiger Wert ('.$v.') übergeben. Gültig ist "up" oder "down". Die Aktion wird ignoriert.', E_USER_NOTICE); 
-             setError (32, E_USER_NOTICE, 'class Dir2Array: setUpDown wurde ein ungültiger Wert ('.$v.') übergeben. Gültig ist "up" oder "down". Die Aktion wird ignoriert.'); 
-             return false; 
-         } 
-     } 
-     public function setShowFoldersFirst($v) { 
-         $this -> showFoldersFirst = $v; 
-         return true; 
-     } 
-   
-     public function setShowHiddenFiles($v) { 
-         $this -> showHiddenFiles = $v; 
-         return true; 
-     } 
-   
-     public function setShowDirLinks($v) { 
-         $this -> showDirLinks = $v; 
-         return true; 
-     } 
-   
-     public function addIgnoreFilesRegex($v) { 
-         $ar = $this -> arIgnoreFilesRegex; 
-         $ar[] = $v; 
-         $this -> arIgnoreFilesRegex = $ar; 
-         return true; 
-     } 
-   
-     public function removeIgnoreFilesRegex($v) { 
-         $ar = $this -> arIgnoreFilesRegex; 
-             foreach ($ar as $s) { 
-                 if ($s != $v) { $ar2[] = $s; } 
-             } 
-             $this -> arIgnoreFilesRegex = $ar2; 
-             return true; 
-         } else { 
-             return false; 
-         } 
-     } 
-   
-     public function getArray() { 
-   
-         $cacheName = 
-               '.projekte_dir_cache/' . ',' 
-             . $this -> sortItem . ',' 
-             . $this -> sortUpDown . ',' 
-             . $this -> sortOrder . ',' 
-             . $this -> foldersFirst . ',' 
-             . $this -> showHiddenFiles . ',' 
-             . $this -> showDirLinks . ',' 
-             . $this -> filetimemHumanStyle . ',' 
-   
-   
-         #print '<pre>' . htmlspecialchars($cacheName) . '</pre>'; 
-   
-         if ( is_file($this -> dir . '/'.$cacheNameOpen) ) { 
-         } 
-   
-   
-         $sortItem    = $this -> sortItem; 
-         $sortUpDown  = $this -> sortUpDown; 
-   
-         if (! $this -> DH ) { 
-             return false; 
-         } 
-   
-         while (false !== ($s = readdir($this -> DH))) { 
-             $insert = false; 
-             $c = $s[0]; 
-             $showHiddenFiles    = $this -> showHiddenFiles; 
-             $showDirLinks       = $this -> showDirLinks; 
-             $arIgnoreFilesRegex = $this -> arIgnoreFilesRegex; 
-   
-             if ( $showHiddenFiles or '.' != $c ) { $insert = true; } 
-             if ( (!$showDirLinks) and ($s == '.' or $s == '..') ) { $insert = false; } 
-             if ($insert and $arIgnoreFilesRegex) { 
-                 foreach ($arIgnoreFilesRegex as $pattern) { 
-                     if ($insert-  and  preg_match( $pattern, $s ) ) { $insert = false; }
 
-                 } 
-             } 
-   
-             if ($insert) { 
-                     $dirs[] = $s; 
-                 } elseif ( is_file( $dir . $s ) ) { 
-                     $files[] = $s; 
-                 } 
-             } 
-         } 
-   
-   
-         $showFoldersFirst = $this -> showFoldersFirst; 
-         if ($showFoldersFirst) { 
-             sort($dirs,  $this -> sortOrder); 
-             if ('name' == $sortItem-  and  'down' == $sortUpDown) { $dirs = array_reverse($dirs); }
 
-             foreach($dirs as $s) { $arNames[] = $s; } 
-             sort($files, $this -> sortOrder); 
-             if ('name' == $sortItem-  and  'down' == $sortUpDown) { $files = array_reverse($files); }
 
-             foreach($files as $s) { $arNames[] = $s; } 
-         } else { 
-             foreach($dirs  as $s) { $arNames[] = $s; } 
-             foreach($files as $s) { $arNames[] = $s; } 
-             sort($arNames,  $this -> sortOrder); 
-             if ('name' == $sortItem-  and  'down' == $sortUpDown) { $arNames = array_reverse($arNames); }
 
-         } 
-   
-   
-             trigger_error(__FILE__ . 'class Dir2Array: file_info ist nicht installiert', E_USER_NOTICE); 
-             setError (32, E_USER_NOTICE, 'Die PHP-Erweiterung file_info ist nicht installiert. Rückfall auf mime_content_type()'); 
-             $resFinfo = false; 
-         } else { 
-             $resFinfo = new finfo(FILEINFO_MIME); 
-         } 
-   
-             foreach ($arNames as $s) { 
-                 $f = $dir . $s; 
-                 $ar[$s]['sizeHuman'] = humanReadableBin($ar[$s]['size'], 2, ' ' ,'B'); 
-                 $ar[$s]['filemtimeHuman'] = date($this -> filetimemHumanStyle, $ar[$s]['filemtime']); 
-   
-                 if ($resFinfo) { 
-                     $info = $resFinfo -> file($f); 
-                         $ar[$s]['mime'] = $parts[0]; 
-                         $ar[$s]['charset']=str_replace( ' charset=', '', $parts[1] ); 
-                     } else { 
-                         $ar[$s]['mime']=$info; 
-                         $ar[$s]['charset'] = false; 
-                     } 
-                 } else { 
-                     $ar[$s]['charset'] = false; 
-   
-                 } 
-             } 
-         } 
-   
-         if ('mime' == $sortItem) { 
-             $ar = sort_2D_hash( $ar, 'mime', SORT_STRING ); 
-             if ('down' == $sortUpDown) { 
-             } 
-         } elseif ('size' == $sortItem) { 
-             $ar = sort_2D_hash( $ar, 'size', SORT_NUMERIC ); 
-             if ('down' == $sortUpDown) { 
-             } 
-         } elseif ('time' == $sortItem) { 
-             $ar = sort_2D_hash( $ar, 'filemtime', SORT_NUMERIC ); 
-             if ('down' == $sortUpDown) { 
-             } 
-         } 
-   
-   
-         ## Cache: ## 
-         if (! is_dir( $dir . '/.projekte_dir_cache/' ) ) { 
-                 mkdir($dir . '/.projekte_dir_cache/'); 
-             } 
-         } 
-         if (is_dir( $dir . '/.projekte_dir_cache/' ) ) { 
-         } 
-         return $ar; 
-     } 
- }