Exemple #1
0
 /**
  * Create Pages object instance from path
  *
  * @param string $path
  * @param array|callable $filter
  * @param string $class
  * @return \cms\Pages
  */
 public static function from($path, $filter = ['index', '404'], $class = Page::class)
 {
     $iterator = new \RecursiveDirectoryIterator(realpath($path), \RecursiveDirectoryIterator::SKIP_DOTS);
     if (class_exists($class)) {
         $iterator->setInfoClass($class);
     }
     $filter = is_callable($filter) ? $filter : function (Page $item) use($filter) {
         return $item->isValid((array) $filter);
     };
     return new self(new \RecursiveCallbackFilterIterator($iterator, $filter));
 }
 public function __construct(array $sources)
 {
     foreach ($sources as $source) {
         if ($source instanceof \SplFileInfo) {
             $this->children[] = $source;
         } elseif (is_string($source) && ($source = realpath($source))) {
             if (is_file($source)) {
                 $child = new SourceFileInfo($source);
                 $child->setInfoClass(SourceFileInfo::class);
                 $this->children[] = $child;
             } elseif (is_dir($source)) {
                 $child = new \RecursiveDirectoryIterator($source);
                 $child->setInfoClass(SourceFileInfo::class);
                 $this->children[] = $child;
             }
         }
     }
 }
Exemple #3
0
 /**
  *  create an iterator to iterate through the children
  *  
  *  @since  6-23-11   
  *  @param  string  $regex
  *  @param  integer $depth
  *  @return \Traversable
  */
 public function createIterator($regex = '', $depth = -1)
 {
     $depth = (int) $depth;
     $iterator = null;
     if ($this->isDir()) {
         if ($depth < 0 || $depth > 1) {
             $iterator = new RecursiveDirectoryIterator($this->getPathname(), FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::SKIP_DOTS);
             $iterator->setInfoClass(get_class($this));
             $iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
             $iterator->setMaxDepth($depth);
         } else {
             $iterator = new FilesystemIterator($this->getPathname(), FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::SKIP_DOTS);
             $iterator->setInfoClass(get_class($this));
         }
         //if/else
     } else {
         $iterator = $this->openFile();
         $iterator->setFlags(\SplFileObject::DROP_NEW_LINE | \SplFileObject::SKIP_EMPTY);
     }
     //if/else
     if (!empty($regex)) {
         $iterator = new RegexIterator($iterator, $regex, RegexIterator::MATCH);
     }
     //if/else
     return $iterator;
 }
 /**
  * Создаёт объект RecursiveDirectoryIterator для текущей директории.
  *
  * @return RecursiveDirectoryIterator
  */
 public function createRecursiveDirectoryIterator($flags = null)
 {
     if (isset($flags)) {
         $iterator = new \RecursiveDirectoryIterator($this->getRealPath(), $flags);
     } else {
         $iterator = new \RecursiveDirectoryIterator($this->getRealPath());
     }
     $iterator->setFileClass('Stalxed\\FileSystem\\FileObject');
     $iterator->setInfoClass('Stalxed\\FileSystem\\FileInfo');
     return $iterator;
 }