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

Iterator.php (3937B)


      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  * FilterIterator implementation that filters files based on prefix(es) and/or
     13  * suffix(es). Hidden files and files from hidden directories are also filtered.
     14  *
     15  * @since     Class available since Release 1.0.0
     16  */
     17 class File_Iterator extends FilterIterator
     18 {
     19     const PREFIX = 0;
     20     const SUFFIX = 1;
     21 
     22     /**
     23      * @var array
     24      */
     25     protected $suffixes = array();
     26 
     27     /**
     28      * @var array
     29      */
     30     protected $prefixes = array();
     31 
     32     /**
     33      * @var array
     34      */
     35     protected $exclude = array();
     36 
     37     /**
     38      * @var string
     39      */
     40     protected $basepath;
     41 
     42     /**
     43      * @param Iterator $iterator
     44      * @param array    $suffixes
     45      * @param array    $prefixes
     46      * @param array    $exclude
     47      * @param string   $basepath
     48      */
     49     public function __construct(Iterator $iterator, array $suffixes = array(), array $prefixes = array(), array $exclude = array(), $basepath = NULL)
     50     {
     51         $exclude = array_filter(array_map('realpath', $exclude));
     52 
     53         if ($basepath !== NULL) {
     54             $basepath = realpath($basepath);
     55         }
     56 
     57         if ($basepath === FALSE) {
     58             $basepath = NULL;
     59         } else {
     60             foreach ($exclude as &$_exclude) {
     61                 $_exclude = str_replace($basepath, '', $_exclude);
     62             }
     63         }
     64 
     65         $this->prefixes = $prefixes;
     66         $this->suffixes = $suffixes;
     67         $this->exclude  = $exclude;
     68         $this->basepath = $basepath;
     69 
     70         parent::__construct($iterator);
     71     }
     72 
     73     /**
     74      * @return bool
     75      */
     76     public function accept()
     77     {
     78         $current  = $this->getInnerIterator()->current();
     79         $filename = $current->getFilename();
     80         $realpath = $current->getRealPath();
     81 
     82         if ($this->basepath !== NULL) {
     83             $realpath = str_replace($this->basepath, '', $realpath);
     84         }
     85 
     86         // Filter files in hidden directories.
     87         if (preg_match('=/\.[^/]*/=', $realpath)) {
     88             return FALSE;
     89         }
     90 
     91         return $this->acceptPath($realpath) &&
     92                $this->acceptPrefix($filename) &&
     93                $this->acceptSuffix($filename);
     94     }
     95 
     96     /**
     97      * @param  string $path
     98      * @return bool
     99      * @since  Method available since Release 1.1.0
    100      */
    101     protected function acceptPath($path)
    102     {
    103         foreach ($this->exclude as $exclude) {
    104             if (strpos($path, $exclude) === 0) {
    105                 return FALSE;
    106             }
    107         }
    108 
    109         return TRUE;
    110     }
    111 
    112     /**
    113      * @param  string $filename
    114      * @return bool
    115      * @since  Method available since Release 1.1.0
    116      */
    117     protected function acceptPrefix($filename)
    118     {
    119         return $this->acceptSubString($filename, $this->prefixes, self::PREFIX);
    120     }
    121 
    122     /**
    123      * @param  string $filename
    124      * @return bool
    125      * @since  Method available since Release 1.1.0
    126      */
    127     protected function acceptSuffix($filename)
    128     {
    129         return $this->acceptSubString($filename, $this->suffixes, self::SUFFIX);
    130     }
    131 
    132     /**
    133      * @param  string $filename
    134      * @param  array  $subString
    135      * @param  int    $type
    136      * @return bool
    137      * @since  Method available since Release 1.1.0
    138      */
    139     protected function acceptSubString($filename, array $subStrings, $type)
    140     {
    141         if (empty($subStrings)) {
    142             return TRUE;
    143         }
    144 
    145         $matched = FALSE;
    146 
    147         foreach ($subStrings as $string) {
    148             if (($type == self::PREFIX && strpos($filename, $string) === 0) ||
    149                 ($type == self::SUFFIX &&
    150                  substr($filename, -1 * strlen($string)) == $string)) {
    151                 $matched = TRUE;
    152                 break;
    153             }
    154         }
    155 
    156         return $matched;
    157     }
    158 }