RecursiveFolderFilterIterator.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. /**
  3. * @package Grav\Common\Filesystem
  4. *
  5. * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Filesystem;
  9. use Grav\Common\Grav;
  10. use RecursiveIterator;
  11. use SplFileInfo;
  12. use function in_array;
  13. /**
  14. * Class RecursiveFolderFilterIterator
  15. * @package Grav\Common\Filesystem
  16. */
  17. class RecursiveFolderFilterIterator extends \RecursiveFilterIterator
  18. {
  19. /** @var array */
  20. protected static $ignore_folders;
  21. /**
  22. * Create a RecursiveFilterIterator from a RecursiveIterator
  23. *
  24. * @param RecursiveIterator $iterator
  25. * @param array $ignore_folders
  26. */
  27. public function __construct(RecursiveIterator $iterator, $ignore_folders = [])
  28. {
  29. parent::__construct($iterator);
  30. if (empty($ignore_folders)) {
  31. $ignore_folders = Grav::instance()['config']->get('system.pages.ignore_folders');
  32. }
  33. $this::$ignore_folders = $ignore_folders;
  34. }
  35. /**
  36. * Check whether the current element of the iterator is acceptable
  37. *
  38. * @return bool true if the current element is acceptable, otherwise false.
  39. */
  40. public function accept()
  41. {
  42. /** @var SplFileInfo $current */
  43. $current = $this->current();
  44. return $current->isDir() && !in_array($current->getFilename(), $this::$ignore_folders, true);
  45. }
  46. }