You are here

function _filetree_list_files in File Tree 7.2

Same name and namespace in other branches
  1. 6.2 filetree.module \_filetree_list_files()
  2. 6 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
Implements hook_filter_FILTER_process().

File

./filetree.module, line 216

Code

function _filetree_list_files($dir, $params) {
  $list = array();
  if (is_dir($dir) && ($handle = opendir($dir))) {
    $folders = $files = array();

    // Parse .descript.ion file descriptions.
    $descriptions = _filetree_parse_description($dir);
    while (FALSE !== ($filename = readdir($handle))) {

      // Exclude certain paths:
      // - those which start with a period (".", "..", and hidden files),
      // - additional paths from the "exclude" param
      if ($filename[0] != '.' && !drupal_match_path($filename, $params['exclude'])) {
        $filepath = "{$dir}/{$filename}";
        $token_args = array(
          'filename' => $filename,
          'filepath' => $filepath,
          'descriptions' => $descriptions,
          'params' => $params,
        );

        // It's a folder.
        if (is_dir($filepath)) {
          $folders[$filename] = array(
            'data' => isset($descriptions[$filename]) ? $descriptions[$filename] : token_replace($params['dirname'], $token_args),
            'children' => _filetree_list_files($filepath, $params),
            'title' => token_replace($params['dirtitle'], $token_args),
            'class' => array(
              'folder',
            ),
          );
        }
        else {
          $files[$filename] = array(
            'data' => token_replace($params['fileformat'], $token_args),
            'title' => token_replace($params['filetitle'], $token_args),
            'class' => array(
              _filetree_icon(pathinfo($filename, PATHINFO_EXTENSION)),
            ),
          );
        }
      }
    }
    closedir($handle);

    // Sort.
    asort($folders);
    asort($files);
    $list += $folders;
    $list += $files;
  }
  return $list;
}