9cc3fb7b16d7aeb1f34ddee54cc8762d06cf5b1c
[yaffs-website] / vendor / phpunit / php-file-iterator / src / Factory.php
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, array_map('realpath', $locals));
84             } else {
85                 $_paths[] = realpath($path);
86             }
87         }
88
89         return $_paths;
90     }
91 }