View file vendor/symfony/finder/Iterator/FileTypeFilterIterator.php

File size: 1.33Kb
  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. * FileTypeFilterIterator only keeps files, directories, or both.
  16. *
  17. * @author Fabien Potencier <fabien@symfony.com>
  18. */
  19. class FileTypeFilterIterator extends \FilterIterator
  20. {
  21. public const ONLY_FILES = 1;
  22. public const ONLY_DIRECTORIES = 2;
  23.  
  24. private $mode;
  25.  
  26. /**
  27. * @param \Iterator $iterator The Iterator to filter
  28. * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES)
  29. */
  30. public function __construct(\Iterator $iterator, int $mode)
  31. {
  32. $this->mode = $mode;
  33.  
  34. parent::__construct($iterator);
  35. }
  36.  
  37. /**
  38. * Filters the iterator values.
  39. *
  40. * @return bool true if the value should be kept, false otherwise
  41. */
  42. public function accept()
  43. {
  44. $fileinfo = $this->current();
  45. if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) {
  46. return false;
  47. } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) {
  48. return false;
  49. }
  50.  
  51. return true;
  52. }
  53. }