81594b87740481b0ada8ca7114468e5687f638d0
[yaffs-website] / vendor / symfony / finder / Iterator / FilecontentFilterIterator.php
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  * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings).
16  *
17  * @author Fabien Potencier  <fabien@symfony.com>
18  * @author Włodzimierz Gajda <gajdaw@gajdaw.pl>
19  */
20 class FilecontentFilterIterator extends MultiplePcreFilterIterator
21 {
22     /**
23      * Filters the iterator values.
24      *
25      * @return bool true if the value should be kept, false otherwise
26      */
27     public function accept()
28     {
29         if (!$this->matchRegexps && !$this->noMatchRegexps) {
30             return true;
31         }
32
33         $fileinfo = $this->current();
34
35         if ($fileinfo->isDir() || !$fileinfo->isReadable()) {
36             return false;
37         }
38
39         $content = $fileinfo->getContents();
40         if (!$content) {
41             return false;
42         }
43
44         return $this->isAccepted($content);
45     }
46
47     /**
48      * Converts string to regexp if necessary.
49      *
50      * @param string $str Pattern: string or regexp
51      *
52      * @return string regexp corresponding to a given string or regexp
53      */
54     protected function toRegex($str)
55     {
56         return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/';
57     }
58 }