Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / symfony / finder / Iterator / FilterIterator.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  * This iterator just overrides the rewind method in order to correct a PHP bug,
16  * which existed before version 5.5.23/5.6.7.
17  *
18  * @see https://bugs.php.net/68557
19  *
20  * @author Alex Bogomazov
21  *
22  * @deprecated since 3.4, to be removed in 4.0.
23  */
24 abstract class FilterIterator extends \FilterIterator
25 {
26     /**
27      * This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after
28      * rewind in some cases.
29      *
30      * @see FilterIterator::rewind()
31      */
32     public function rewind()
33     {
34         if (\PHP_VERSION_ID > 50607 || (\PHP_VERSION_ID > 50523 && \PHP_VERSION_ID < 50600)) {
35             parent::rewind();
36
37             return;
38         }
39
40         $iterator = $this;
41         while ($iterator instanceof \OuterIterator) {
42             $innerIterator = $iterator->getInnerIterator();
43
44             if ($innerIterator instanceof RecursiveDirectoryIterator) {
45                 // this condition is necessary for iterators to work properly with non-local filesystems like ftp
46                 if ($innerIterator->isRewindable()) {
47                     $innerIterator->next();
48                     $innerIterator->rewind();
49                 }
50             } elseif ($innerIterator instanceof \FilesystemIterator) {
51                 $innerIterator->next();
52                 $innerIterator->rewind();
53             }
54
55             $iterator = $innerIterator;
56         }
57
58         parent::rewind();
59     }
60 }