You are here

function _filetree_list_files in File Tree 6

Same name and namespace in other branches
  1. 6.2 filetree.module \_filetree_list_files()
  2. 7.2 filetree.module \_filetree_list_files()
  3. 7 filetree.module \_filetree_list_files()

Recursively lists folders and files in this directory.

Similar to file_scan_directory(), except that we need the hierarchy. Returns a sorted list which is compatible with theme('item_list') or theme('filetree'), folders first, then files.

1 call to _filetree_list_files()
_filetree_process in ./filetree.module
Process function for the filter.

File

./filetree.module, line 168

Code

function _filetree_list_files($dir, $params) {
  $list = array();
  if (is_dir($dir) && ($handle = opendir($dir))) {
    $folders = $files = array();
    $descriptions = _filetree_parse_description($dir);
    while (FALSE !== ($file = readdir($handle))) {

      // Exclude certain paths:
      // - those which start with a period (".", "..", and hidden files),
      // - additional paths from the "exclude" param
      if ($file[0] != '.' and !drupal_match_path($file, $params['exclude'])) {
        $filename = "{$dir}/{$file}";
        if (is_dir($filename)) {
          $folders[$file] = array(
            'data' => isset($descriptions[$file]) ? $descriptions[$file] : token_replace($params['dirname'], 'filetree', $file),
            'children' => _filetree_list_files($filename, $params),
            'title' => token_replace($params['dirtitle'], 'filetree', $file),
            'class' => 'folder',
          );
        }
        else {
          $name = isset($descriptions[$file]) ? $descriptions[$file] : token_replace($params['filename'], 'filetree', $file);

          // See http://drupal.org/node/278770#comment-1011434.
          $url = $params['absolute'] ? file_create_url($filename) : substr(file_create_url($filename), strlen($GLOBALS['base_url'] . '/'));
          $files[$file] = array(
            'data' => l($name, $url),
            'title' => token_replace($params['filetitle'], $file),
            'class' => _filetree_icon(pathinfo($file, PATHINFO_EXTENSION)),
          );
        }
      }
    }
    closedir($handle);
    asort($folders);
    asort($files);
    $list += $folders;
    $list += $files;
  }
  return $list;
}