Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: /** Chris@0: * Factory Method implementation that creates a File_Iterator that operates on Chris@0: * an AppendIterator that contains an RecursiveDirectoryIterator for each given Chris@0: * path. Chris@0: * Chris@0: * @since Class available since Release 1.1.0 Chris@0: */ Chris@0: class File_Iterator_Factory Chris@0: { Chris@0: /** Chris@0: * @param array|string $paths Chris@0: * @param array|string $suffixes Chris@0: * @param array|string $prefixes Chris@0: * @param array $exclude Chris@0: * @return AppendIterator Chris@0: */ Chris@0: public function getFileIterator($paths, $suffixes = '', $prefixes = '', array $exclude = array()) Chris@0: { Chris@0: if (is_string($paths)) { Chris@0: $paths = array($paths); Chris@0: } Chris@0: Chris@0: $paths = $this->getPathsAfterResolvingWildcards($paths); Chris@0: $exclude = $this->getPathsAfterResolvingWildcards($exclude); Chris@0: Chris@0: if (is_string($prefixes)) { Chris@0: if ($prefixes != '') { Chris@0: $prefixes = array($prefixes); Chris@0: } else { Chris@0: $prefixes = array(); Chris@0: } Chris@0: } Chris@0: Chris@0: if (is_string($suffixes)) { Chris@0: if ($suffixes != '') { Chris@0: $suffixes = array($suffixes); Chris@0: } else { Chris@0: $suffixes = array(); Chris@0: } Chris@0: } Chris@0: Chris@0: $iterator = new AppendIterator; Chris@0: Chris@0: foreach ($paths as $path) { Chris@0: if (is_dir($path)) { Chris@0: $iterator->append( Chris@0: new File_Iterator( Chris@0: new RecursiveIteratorIterator( Chris@0: new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::FOLLOW_SYMLINKS) Chris@0: ), Chris@0: $suffixes, Chris@0: $prefixes, Chris@0: $exclude, Chris@0: $path Chris@0: ) Chris@0: ); Chris@0: } Chris@0: } Chris@0: Chris@0: return $iterator; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @param array $paths Chris@0: * @return array Chris@0: */ Chris@0: protected function getPathsAfterResolvingWildcards(array $paths) Chris@0: { Chris@0: $_paths = array(); Chris@0: Chris@0: foreach ($paths as $path) { Chris@0: if ($locals = glob($path, GLOB_ONLYDIR)) { Chris@12: $_paths = array_merge($_paths, array_map('realpath', $locals)); Chris@0: } else { Chris@12: $_paths[] = realpath($path); Chris@0: } Chris@0: } Chris@0: Chris@0: return $_paths; Chris@0: } Chris@0: }