You are here

function file_scan_directory in Coder 7.2

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. 6 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
Set of tests for the coder format script.
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_review_simpletest in coder_review/coder_review.module
Implements hook_simpletest().
example_file_scan_directory in coder_upgrade/tests/old/samples/example.module
2 string references to 'file_scan_directory'
coder_review_7x_reviews in coder_review/includes/coder_review_7x.inc
Implements hook_reviews().
coder_upgrade_callback_function_calls in coder_upgrade/conversions/other.inc
Callback routine for function call changes using grammar parser.

File

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

Code

function file_scan_directory($dir, $mask, $nomask = array(
  '.',
  '..',
  'CVS',
  '.svn',
  '.git',
), $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;
}