You are here

protected function xautoload_RegistryWildcard_RecursiveScan::scanDirectory in X Autoload 7.3

Parameters

string $dir: Base folder, e.g. "sites/all/modules/foo/includes", which does NOT contain any asterisk ("*").

string $wildcard: Suffix which may contain asterisks.

2 calls to xautoload_RegistryWildcard_RecursiveScan::scanDirectory()
xautoload_RegistryWildcard_RecursiveScan::check in lib/RegistryWildcard/RecursiveScan.php
Process one registry entry.
xautoload_RegistryWildcard_RecursiveScan::scanDirectoryLevel in lib/RegistryWildcard/RecursiveScan.php

File

lib/RegistryWildcard/RecursiveScan.php, line 61

Class

xautoload_RegistryWildcard_RecursiveScan
Scan directories for wildcard files[] instructions in a module's info file.

Code

protected function scanDirectory($dir, $wildcard) {
  if (!is_dir($dir)) {
    return;
  }
  if (FALSE === strpos($wildcard, '*')) {

    // $wildcard is a fixed string, not a wildcard.
    $this
      ->suggestFile($dir . '/' . $wildcard);
  }
  elseif ('**' === $wildcard) {

    // Trick: "$a/**" == union of "$a/*" and "$a/*/**"
    $this
      ->scanDirectoryLevel($dir, '*');
    $this
      ->scanDirectoryLevel($dir, '*', '**');
  }
  elseif ('**/' === substr($wildcard, 0, 3)) {

    // Trick: "$a/**/$b" == union of "$a/$b" and "$a/*/**/$b"
    $remaining = substr($wildcard, 3);
    $this
      ->scanDirectory($dir, $remaining);
    $this
      ->scanDirectoryLevel($dir, '*', $wildcard);
  }
  elseif (FALSE !== ($slashpos = strpos($wildcard, '/'))) {

    // $wildcard consists of more than one fragment.
    $fragment = substr($wildcard, 0, $slashpos);
    $remaining = substr($wildcard, $slashpos + 1);
    if (FALSE === strpos($fragment, '*')) {
      $this
        ->scanDirectory($dir . '/' . $fragment, $remaining);
    }
    else {
      $this
        ->scanDirectoryLevel($dir, $fragment, $remaining);
    }
  }
  else {

    // $wildcard represents a file name.
    $this
      ->scanDirectoryLevel($dir, $wildcard);
  }
}