RecursiveExtensionFilterIterator::accept

File

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

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->whitelist, 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 name is blacklisted.
    return !in_array($name, $this->blacklist, TRUE);
  }
  else {
    // Only accept extension info files.
    return substr($name, -9) == '.info.yml';
  }
}
doc_Drupal
2016-10-29 09:36:48
Comments
Leave a Comment

Please login to continue.