You are here

public function RecursiveExtensionFilterIterator::accept in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php \Drupal\Core\Extension\Discovery\RecursiveExtensionFilterIterator::accept()
  2. 9 core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php \Drupal\Core\Extension\Discovery\RecursiveExtensionFilterIterator::accept()

File

core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php, line 132

Class

RecursiveExtensionFilterIterator
Filters a RecursiveDirectoryIterator to discover extensions.

Namespace

Drupal\Core\Extension\Discovery

Code

public function accept() {
  $name = $this
    ->current()
    ->getFilename();

  // FilesystemIterator::SKIP_DOTS only skips '.' and '..', but not hidden
  // directories (like '.git').
  if ($name[0] == '.') {
    return FALSE;
  }
  if ($this
    ->isDir()) {

    // If this is a subdirectory of a base search path, only recurse into the
    // fixed list of expected extension type directory names. Required for
    // scanning the top-level/root directory; without this condition, we would
    // recurse into the whole filesystem tree that possibly contains other
    // files aside from Drupal.
    if ($this
      ->current()
      ->getSubPath() == '') {
      return in_array($name, $this->allowedExtensionTypes, TRUE);
    }

    // 'config' directories are special-cased here, because every extension
    // contains one. However, those default configuration directories cannot
    // contain extensions. The directory name cannot be globally skipped,
    // because core happens to have a directory of an actual module that is
    // named 'config'. By explicitly testing for that case, we can skip all
    // other config directories, and at the same time, still allow the core
    // config module to be overridden/replaced in a profile/site directory
    // (whereas it must be located directly in a modules directory).
    if ($name == 'config') {
      return substr($this
        ->current()
        ->getPathname(), -14) == 'modules/config';
    }

    // Accept the directory unless the folder is skipped.
    return !in_array($name, $this->skippedFolders, TRUE);
  }
  else {

    // Only accept extension info files.
    return substr($name, -9) == '.info.yml';
  }
}