gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

Factory.php (2438B)


      1 <?php
      2 /*
      3  * This file is part of the File_Iterator package.
      4  *
      5  * (c) Sebastian Bergmann <sebastian@phpunit.de>
      6  *
      7  * For the full copyright and license information, please view the LICENSE
      8  * file that was distributed with this source code.
      9  */
     10 
     11 /**
     12  * Factory Method implementation that creates a File_Iterator that operates on
     13  * an AppendIterator that contains an RecursiveDirectoryIterator for each given
     14  * path.
     15  *
     16  * @since     Class available since Release 1.1.0
     17  */
     18 class File_Iterator_Factory
     19 {
     20     /**
     21      * @param  array|string   $paths
     22      * @param  array|string   $suffixes
     23      * @param  array|string   $prefixes
     24      * @param  array          $exclude
     25      * @return AppendIterator
     26      */
     27     public function getFileIterator($paths, $suffixes = '', $prefixes = '', array $exclude = array())
     28     {
     29         if (is_string($paths)) {
     30             $paths = array($paths);
     31         }
     32 
     33         $paths   = $this->getPathsAfterResolvingWildcards($paths);
     34         $exclude = $this->getPathsAfterResolvingWildcards($exclude);
     35 
     36         if (is_string($prefixes)) {
     37             if ($prefixes != '') {
     38                 $prefixes = array($prefixes);
     39             } else {
     40                 $prefixes = array();
     41             }
     42         }
     43 
     44         if (is_string($suffixes)) {
     45             if ($suffixes != '') {
     46                 $suffixes = array($suffixes);
     47             } else {
     48                 $suffixes = array();
     49             }
     50         }
     51 
     52         $iterator = new AppendIterator;
     53 
     54         foreach ($paths as $path) {
     55             if (is_dir($path)) {
     56                 $iterator->append(
     57                   new File_Iterator(
     58                     new RecursiveIteratorIterator(
     59                       new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::FOLLOW_SYMLINKS)
     60                     ),
     61                     $suffixes,
     62                     $prefixes,
     63                     $exclude,
     64                     $path
     65                   )
     66                 );
     67             }
     68         }
     69 
     70         return $iterator;
     71     }
     72 
     73     /**
     74      * @param  array $paths
     75      * @return array
     76      */
     77     protected function getPathsAfterResolvingWildcards(array $paths)
     78     {
     79         $_paths = array();
     80 
     81         foreach ($paths as $path) {
     82             if ($locals = glob($path, GLOB_ONLYDIR)) {
     83                 $_paths = array_merge($_paths, $locals);
     84             } else {
     85                 $_paths[] = $path;
     86             }
     87         }
     88 
     89         return $_paths;
     90     }
     91 }