]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/File/Iterator/Factory.php
Release 6.2.0
[Github/sugarcrm.git] / tests / PHPUnit / File / Iterator / Factory.php
1 <?php
2 /**
3  * php-file-iterator
4  *
5  * Copyright (c) 2009-2010, Sebastian Bergmann <sb@sebastian-bergmann.de>.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  *   * Redistributions of source code must retain the above copyright
13  *     notice, this list of conditions and the following disclaimer.
14  *
15  *   * Redistributions in binary form must reproduce the above copyright
16  *     notice, this list of conditions and the following disclaimer in
17  *     the documentation and/or other materials provided with the
18  *     distribution.
19  *
20  *   * Neither the name of Sebastian Bergmann nor the names of his
21  *     contributors may be used to endorse or promote products derived
22  *     from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35  * POSSIBILITY OF SUCH DAMAGE.
36  *
37  * @package   File
38  * @author    Sebastian Bergmann <sb@sebastian-bergmann.de>
39  * @copyright 2009-2010 Sebastian Bergmann <sb@sebastian-bergmann.de>
40  * @license   http://www.opensource.org/licenses/bsd-license.php  BSD License
41  * @since     File available since Release 1.1.0
42  */
43
44 require_once 'File/Iterator.php';
45
46 /**
47  * Factory Method implementation that creates a File_Iterator that operates on
48  * an AppendIterator that contains an RecursiveDirectoryIterator for each given
49  * path.
50  *
51  * @author    Sebastian Bergmann <sb@sebastian-bergmann.de>
52  * @copyright 2009-2010 Sebastian Bergmann <sb@sebastian-bergmann.de>
53  * @license   http://www.opensource.org/licenses/bsd-license.php  BSD License
54  * @version   Release: 1.2.3
55  * @link      http://github.com/sebastianbergmann/php-file-iterator/tree
56  * @since     Class available since Release 1.1.0
57  */
58 class File_Iterator_Factory
59 {
60     /**
61      * @param  array|string $paths
62      * @param  array|string $suffixes
63      * @param  array|string $prefixes
64      * @param  array        $exclude
65      * @return AppendIterator
66      */
67     public static function getFileIterator($paths, $suffixes = '', $prefixes = '', array $exclude = array())
68     {
69         if (is_string($paths)) {
70             $paths = array($paths);
71         }
72
73         $_paths = array();
74
75         foreach ($paths as $path) {
76             if ($locals = glob($path, GLOB_ONLYDIR)) {
77                 $_paths = array_merge($_paths, $locals);
78             } else {
79                 $_paths[] = $path;
80             }
81         }
82
83         $paths = $_paths;
84         unset($_paths);
85
86         if (is_string($prefixes)) {
87             if ($prefixes != '') {
88                 $prefixes = array($prefixes);
89             } else {
90                 $prefixes = array();
91             }
92         }
93
94         if (is_string($suffixes)) {
95             if ($suffixes != '') {
96                 $suffixes = array($suffixes);
97             } else {
98                 $suffixes = array();
99             }
100         }
101
102         $iterator = new AppendIterator;
103
104         foreach ($paths as $path) {
105             if (is_dir($path)) {
106                 $iterator->append(
107                   new File_Iterator(
108                     new RecursiveIteratorIterator(
109                       new RecursiveDirectoryIterator($path)
110                     ),
111                     $suffixes,
112                     $prefixes,
113                     $exclude,
114                     $path
115                   )
116                 );
117             }
118         }
119
120         return $iterator;
121     }
122
123     /**
124      * @param  array|string $paths
125      * @param  array|string $suffixes
126      * @param  array|string $prefixes
127      * @param  array        $exclude
128      * @return array
129      */
130     public static function getFilesAsArray($paths, $suffixes = '', $prefixes = '', array $exclude = array())
131     {
132         if (is_string($paths)) {
133             $paths = array($paths);
134         }
135
136         $result = array();
137
138         $iterator = self::getFileIterator(
139           $paths, $suffixes, $prefixes, $exclude
140         );
141
142         foreach ($iterator as $file) {
143             $result[] = $file->getRealPath();
144         }
145
146         foreach ($paths as $path) {
147             if (is_file($path)) {
148                 $result[] = realpath($path);
149             }
150         }
151
152         return $result;
153     }
154 }
155 ?>