Beispiel #1
0
 /**
  * Builds a tree of files This function is
  * then called recursively.
  *
  * @param $fileinfo an object returned by file_browser::get_file_info()
  * @param $search searched string
  * @param $dynamicmode bool no recursive call is done when in dynamic mode
  * @param $list - the array containing the files under the passed $fileinfo
  * @returns int the number of files found
  *
  * todo: take $search into account, and respect a threshold for dynamic loading
  */
 public static function build_tree($fileinfo, $search, $dynamicmode, &$list)
 {
     global $CFG, $OUTPUT;
     $filecount = 0;
     $children = $fileinfo->get_children();
     foreach ($children as $child) {
         $filename = $child->get_visible_name();
         $filesize = $child->get_filesize();
         $filesize = $filesize ? display_size($filesize) : '';
         $filedate = $child->get_timemodified();
         $filedate = $filedate ? userdate($filedate) : '';
         $filetype = $child->get_mimetype();
         if ($child->is_directory()) {
             $path = array();
             $level = $child->get_parent();
             while ($level) {
                 $params = $level->get_params();
                 $path[] = repository::encode_path($params['filearea'], $params['filepath'], $level->get_visible_name());
                 $level = $level->get_parent();
             }
             $tmp = array('title' => $child->get_visible_name(), 'size' => 0, 'date' => $filedate, 'path' => array_reverse($path), 'thumbnail' => $OUTPUT->old_icon_url('f/folder-32'));
             //if ($dynamicmode && $child->is_writable()) {
             //    $tmp['children'] = array();
             //} else {
             // if folder name matches search, we send back all files contained.
             $_search = $search;
             if ($search && stristr($tmp['title'], $search) !== false) {
                 $_search = false;
             }
             $tmp['children'] = array();
             $_filecount = repository::build_tree($child, $_search, $dynamicmode, $tmp['children']);
             if ($search && $_filecount) {
                 $tmp['expanded'] = 1;
             }
             //}
             //Uncomment this following line if you wanna display all directory ()even empty
             if (!$search || $_filecount || stristr($tmp['title'], $search) !== false) {
                 $filecount += $_filecount;
                 $list[] = $tmp;
             }
         } else {
             // not a directory
             // skip the file, if we're in search mode and it's not a match
             if ($search && stristr($filename, $search) === false) {
                 continue;
             }
             $params = $child->get_params();
             $source = serialize(array($params['contextid'], $params['filearea'], $params['itemid'], $params['filepath'], $params['filename']));
             $list[] = array('title' => $filename, 'size' => $filesize, 'date' => $filedate, 'source' => base64_encode($source), 'thumbnail' => $OUTPUT->old_icon_url(file_extension_icon($filename, 32)));
             $filecount++;
         }
     }
     return $filecount;
 }