PageRenderTime 63ms CodeModel.GetById 17ms RepoModel.GetById 3ms app.codeStats 0ms

/monica/vendor/phpunit/php-file-iterator/File/Iterator/Factory.php

https://bitbucket.org/alexandretaz/maniac_divers
PHP | 120 lines | 51 code | 9 blank | 60 comment | 12 complexity | 04a519d423404f154e5ab75553eb83af MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * php-file-iterator
  4. *
  5. * Copyright (c) 2009-2012, 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-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  40. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  41. * @since File available since Release 1.1.0
  42. */
  43. /**
  44. * Factory Method implementation that creates a File_Iterator that operates on
  45. * an AppendIterator that contains an RecursiveDirectoryIterator for each given
  46. * path.
  47. *
  48. * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
  49. * @copyright 2009-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  50. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  51. * @version Release: @package_version@
  52. * @link http://github.com/sebastianbergmann/php-file-iterator/tree
  53. * @since Class available since Release 1.1.0
  54. */
  55. class File_Iterator_Factory
  56. {
  57. /**
  58. * @param array|string $paths
  59. * @param array|string $suffixes
  60. * @param array|string $prefixes
  61. * @param array $exclude
  62. * @return AppendIterator
  63. */
  64. public function getFileIterator($paths, $suffixes = '', $prefixes = '', array $exclude = array())
  65. {
  66. if (is_string($paths)) {
  67. $paths = array($paths);
  68. }
  69. $_paths = array();
  70. foreach ($paths as $path) {
  71. if ($locals = glob($path, GLOB_ONLYDIR)) {
  72. $_paths = array_merge($_paths, $locals);
  73. } else {
  74. $_paths[] = $path;
  75. }
  76. }
  77. $paths = $_paths;
  78. unset($_paths);
  79. if (is_string($prefixes)) {
  80. if ($prefixes != '') {
  81. $prefixes = array($prefixes);
  82. } else {
  83. $prefixes = array();
  84. }
  85. }
  86. if (is_string($suffixes)) {
  87. if ($suffixes != '') {
  88. $suffixes = array($suffixes);
  89. } else {
  90. $suffixes = array();
  91. }
  92. }
  93. $iterator = new AppendIterator;
  94. foreach ($paths as $path) {
  95. if (is_dir($path)) {
  96. $iterator->append(
  97. new File_Iterator(
  98. new RecursiveIteratorIterator(
  99. new RecursiveDirectoryIterator($path)
  100. ),
  101. $suffixes,
  102. $prefixes,
  103. $exclude,
  104. $path
  105. )
  106. );
  107. }
  108. }
  109. return $iterator;
  110. }
  111. }