You are here

function file_scan_directory in Coder 6

Same name and namespace in other branches
  1. 5.2 scripts/coder_format/coder_format.php \file_scan_directory()
  2. 6.2 scripts/coder_format/coder_format.php \file_scan_directory()
  3. 7.2 scripts/coder_format/coder_format.php \file_scan_directory()
  4. 7 scripts/coder_format/coder_format.php \file_scan_directory()

Finds all files that match a given mask in a given directory. Directories and files beginning with a period are excluded; this prevents hidden files and directories (such as SVN working directories) from being scanned.

Parameters

$dir: The base directory for the scan, without trailing slash.

$mask: The regular expression of the files to find.

$nomask: An array of files/directories to ignore.

$callback: The callback function to call for each match.

$recurse: When TRUE, the directory scan will recurse the entire tree starting at the provided directory.

$key: The key to be used for the returned array of files. Possible values are "filename", for the path starting with $dir, "basename", for the basename of the file, and "name" for the name of the file without an extension.

$min_depth: Minimum depth of directories to return files from.

$depth: Current depth of recursion. This parameter is only used internally and should not be passed.

Return value

An associative array (keyed on the provided key) of objects with "path", "basename", and "name" members corresponding to the matching files.

5 calls to file_scan_directory()
all.test in scripts/coder_format/tests/all.test
coder_format_file in scripts/coder_format/coder_format.inc
Reads, backups, processes and writes the source code from and to a file.
coder_format_recursive in scripts/coder_format/coder_format.inc
Recursively process .module and .inc files in directory with coder_format_file().
coder_page_form in ./coder.module
Implementation of hook_form().
coder_simpletest in ./coder.module
Implementation of hook_simpletest().

File

scripts/coder_format/coder_format.php, line 348
Coder format shell invocation script.

Code

function file_scan_directory($dir, $mask, $nomask = array(
  '.',
  '..',
  'CVS',
), $callback = 0, $recurse = TRUE, $key = 'filename', $min_depth = 0, $depth = 0) {
  $key = in_array($key, array(
    'filename',
    'basename',
    'name',
  )) ? $key : 'filename';
  $files = array();
  if (is_dir($dir) && ($handle = opendir($dir))) {
    while ($file = readdir($handle)) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("{$dir}/{$file}") && $recurse) {

          // Give priority to files in this folder by merging them in after any subdirectory files.
          $files = array_merge(file_scan_directory("{$dir}/{$file}", $mask, $nomask, $callback, $recurse, $key, $min_depth, $depth + 1), $files);
        }
        elseif ($depth >= $min_depth && ereg($mask, $file)) {

          // Always use this match over anything already set in $files with the same $$key.
          $filename = "{$dir}/{$file}";
          $basename = basename($file);
          $name = substr($basename, 0, strrpos($basename, '.'));
          $files[${$key}] = new stdClass();
          $files[${$key}]->filename = $filename;
          $files[${$key}]->basename = $basename;
          $files[${$key}]->name = $name;
          if ($callback) {
            $callback($filename);
          }
        }
      }
    }
    closedir($handle);
  }
  return $files;
}