Beispiel #1
0
 /**
  * Whether this folder may be skipped in folder hierarchy
  *
  * 1. Skip the name of a single filearea in a module
  * 2. Skip course categories for non-admins who do not have navshowmycoursecategories setting
  *
  * @param file_info $fileinfo
  * @param string|array $extensions, for example '*' or array('.gif','.jpg')
  * @param file_info|int $parent specify parent here if we know it to avoid creating extra objects
  * @return bool
  */
 private function can_skip(file_info $fileinfo, $extensions, $parent = -1)
 {
     global $CFG;
     if (!$fileinfo->is_directory()) {
         // do not skip files
         return false;
     }
     if ($fileinfo instanceof file_info_context_coursecat) {
         // This is a course category. For non-admins we do not display categories
         return empty($CFG->navshowmycoursecategories) && !has_capability('moodle/course:update', context_system::instance());
     } else {
         if ($fileinfo instanceof file_info_context_course || $fileinfo instanceof file_info_context_user || $fileinfo instanceof file_info_area_course_legacy || $fileinfo instanceof file_info_context_module || $fileinfo instanceof file_info_context_system) {
             // these instances can never be filearea inside an activity, they will never be skipped
             return false;
         } else {
             $params = $fileinfo->get_params();
             if (strlen($params['filearea']) && ($params['filepath'] === '/' || empty($params['filepath'])) && ($params['filename'] === '.' || empty($params['filename'])) && context::instance_by_id($params['contextid'])->contextlevel == CONTEXT_MODULE) {
                 if ($parent === -1) {
                     $parent = $fileinfo->get_parent();
                 }
                 // This is a filearea inside an activity, it can be skipped if it has no non-empty siblings
                 if ($parent && $parent instanceof file_info_context_module) {
                     if ($parent->count_non_empty_children($extensions, 2) <= 1) {
                         return true;
                     }
                 }
             }
         }
     }
     return false;
 }
Beispiel #2
0
 /**
  * Constructor of moodle_file_tree_viewer class
  * @param file_info $file_info
  * @param array $options
  */
 public function __construct(file_info $file_info, array $options = null)
 {
     global $CFG;
     //note: this MUST NOT use get_file_storage() !!!!!!!!!!!!!!!!!!!!!!!!!!!!
     $this->options = (array) $options;
     $this->context = $options['context'];
     $this->tree = array();
     $children = $file_info->get_children();
     $current_file_params = $file_info->get_params();
     $parent_info = $file_info->get_parent();
     $level = $parent_info;
     $this->path = array();
     while ($level) {
         $params = $level->get_params();
         $context = context::instance_by_id($params['contextid']);
         // $this->context is current context
         if ($context->id != $this->context->id or empty($params['filearea'])) {
             break;
         }
         // unset unused parameters
         unset($params['component']);
         unset($params['filearea']);
         unset($params['filename']);
         unset($params['itemid']);
         $url = new moodle_url('/files/index.php', $params);
         $this->path[] = html_writer::link($url, $level->get_visible_name());
         $level = $level->get_parent();
     }
     $this->path = array_reverse($this->path);
     if ($current_file_params['filepath'] != '/') {
         $this->path[] = $file_info->get_visible_name();
     }
     foreach ($children as $child) {
         $filedate = $child->get_timemodified();
         $filesize = $child->get_filesize();
         $mimetype = $child->get_mimetype();
         $params = $child->get_params();
         unset($params['component']);
         unset($params['filearea']);
         unset($params['filename']);
         unset($params['itemid']);
         $fileitem = array('params' => $params, 'filename' => $child->get_visible_name(), 'mimetype' => $child->get_mimetype(), 'filedate' => $filedate ? $filedate : '', 'filesize' => $filesize ? $filesize : '');
         $url = new moodle_url('/files/index.php', $params);
         if ($child->is_directory()) {
             $fileitem['isdir'] = true;
             $fileitem['url'] = $url->out(false);
         } else {
             $fileitem['url'] = $child->get_url();
         }
         $this->tree[] = $fileitem;
     }
 }