comparison vendor/phpunit/php-file-iterator/src/Factory.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 7a779792577d
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
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 }