1: <?php
2:
3: /*
4: * This file is part of the Symfony package.
5: *
6: * (c) Fabien Potencier <fabien@symfony.com>
7: *
8: * For the full copyright and license information, please view the LICENSE
9: * file that was distributed with this source code.
10: */
11:
12: namespace Symfony\Component\Finder\Iterator;
13:
14: /**
15: * ExcludeDirectoryFilterIterator filters out directories.
16: *
17: * @author Fabien Potencier <fabien@symfony.com>
18: */
19: class ExcludeDirectoryFilterIterator extends FilterIterator
20: {
21: private $patterns;
22:
23: /**
24: * Constructor.
25: *
26: * @param \Iterator $iterator The Iterator to filter
27: * @param array $directories An array of directories to exclude
28: */
29: public function __construct(\Iterator $iterator, array $directories)
30: {
31: $this->patterns = array();
32: foreach ($directories as $directory) {
33: $this->patterns[] = '#(^|/)'.preg_quote($directory, '#').'(/|$)#';
34: }
35:
36: parent::__construct($iterator);
37: }
38:
39: /**
40: * Filters the iterator values.
41: *
42: * @return Boolean true if the value should be kept, false otherwise
43: */
44: public function accept()
45: {
46: $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath();
47: $path = strtr($path, '\\', '/');
48: foreach ($this->patterns as $pattern) {
49: if (preg_match($pattern, $path)) {
50: return false;
51: }
52: }
53:
54: return true;
55: }
56: }
57: