mirror of
https://github.com/moodle/moodle.git
synced 2025-02-21 09:52:54 +01:00
The parameter $size of the following functions has been deprecated and is not used any more: - file_extension_icon - file_file_icon - file_folder_icon - file_mimetype_icon - mimeinfo_from_type - url_guess_icon That way, the sized icons (xxxxxxx-yyy.png) can be removed and replaced by SVG, to make it easier to keep them updated because once they are replaced, there will only be one single file for each MIME icon.
223 lines
8.2 KiB
PHP
223 lines
8.2 KiB
PHP
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* This plugin is used to access coursefiles repository
|
|
*
|
|
* @since Moodle 2.0
|
|
* @package repository_coursefiles
|
|
* @copyright 2010 Dongsheng Cai {@link http://dongsheng.org}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
require_once($CFG->dirroot . '/repository/lib.php');
|
|
|
|
/**
|
|
* repository_coursefiles class is used to browse course files
|
|
*
|
|
* @since Moodle 2.0
|
|
* @package repository_coursefiles
|
|
* @copyright 2010 Dongsheng Cai {@link http://dongsheng.org}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
class repository_coursefiles extends repository {
|
|
|
|
/**
|
|
* coursefiles plugin doesn't require login, so list all files
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function print_login() {
|
|
return $this->get_listing();
|
|
}
|
|
|
|
/**
|
|
* Get file listing
|
|
*
|
|
* @param string $encodedpath
|
|
* @return mixed
|
|
*/
|
|
public function get_listing($encodedpath = '', $page = '') {
|
|
global $CFG, $USER, $OUTPUT;
|
|
$ret = array();
|
|
$ret['dynload'] = true;
|
|
$ret['nosearch'] = true;
|
|
$ret['nologin'] = true;
|
|
$list = array();
|
|
$component = 'course';
|
|
$filearea = 'legacy';
|
|
$itemid = 0;
|
|
|
|
$browser = get_file_browser();
|
|
|
|
if (!empty($encodedpath)) {
|
|
$params = json_decode(base64_decode($encodedpath), true);
|
|
if (is_array($params)) {
|
|
$filepath = is_null($params['filepath']) ? NULL : clean_param($params['filepath'], PARAM_PATH);
|
|
$filename = is_null($params['filename']) ? NULL : clean_param($params['filename'], PARAM_FILE);
|
|
$context = context::instance_by_id(clean_param($params['contextid'], PARAM_INT));
|
|
}
|
|
} else {
|
|
$filename = null;
|
|
$filepath = null;
|
|
list($context, $course, $cm) = get_context_info_array($this->context->id);
|
|
$courseid = is_object($course) ? $course->id : SITEID;
|
|
$context = context_course::instance($courseid);
|
|
}
|
|
|
|
if ($fileinfo = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename)) {
|
|
// build path navigation
|
|
$pathnodes = array();
|
|
$encodedpath = base64_encode(json_encode($fileinfo->get_params()));
|
|
$pathnodes[] = array('name'=>$fileinfo->get_visible_name(), 'path'=>$encodedpath);
|
|
$level = $fileinfo->get_parent();
|
|
while ($level) {
|
|
$params = $level->get_params();
|
|
$encodedpath = base64_encode(json_encode($params));
|
|
if ($params['contextid'] != $context->id) {
|
|
break;
|
|
}
|
|
$pathnodes[] = array('name'=>$level->get_visible_name(), 'path'=>$encodedpath);
|
|
$level = $level->get_parent();
|
|
}
|
|
if (!empty($pathnodes) && is_array($pathnodes)) {
|
|
$pathnodes = array_reverse($pathnodes);
|
|
$ret['path'] = $pathnodes;
|
|
}
|
|
// build file tree
|
|
$children = $fileinfo->get_children();
|
|
foreach ($children as $child) {
|
|
if ($child->is_directory()) {
|
|
$params = $child->get_params();
|
|
$subdir_children = $child->get_children();
|
|
$encodedpath = base64_encode(json_encode($params));
|
|
$node = array(
|
|
'title' => $child->get_visible_name(),
|
|
'datemodified' => $child->get_timemodified(),
|
|
'datecreated' => $child->get_timecreated(),
|
|
'path' => $encodedpath,
|
|
'children'=>array(),
|
|
'thumbnail' => $OUTPUT->image_url(file_folder_icon())->out(false)
|
|
);
|
|
$list[] = $node;
|
|
} else {
|
|
$encodedpath = base64_encode(json_encode($child->get_params()));
|
|
$node = array(
|
|
'title' => $child->get_visible_name(),
|
|
'size' => $child->get_filesize(),
|
|
'author' => $child->get_author(),
|
|
'license' => $child->get_license(),
|
|
'datemodified' => $child->get_timemodified(),
|
|
'datecreated' => $child->get_timecreated(),
|
|
'source'=> $encodedpath,
|
|
'isref' => $child->is_external_file(),
|
|
'thumbnail' => $OUTPUT->image_url(file_file_icon($child))->out(false)
|
|
);
|
|
if ($child->get_status() == 666) {
|
|
$node['originalmissing'] = true;
|
|
}
|
|
if ($imageinfo = $child->get_imageinfo()) {
|
|
$fileurl = new moodle_url($child->get_url());
|
|
$node['realthumbnail'] = $fileurl->out(false, array('preview' => 'thumb', 'oid' => $child->get_timemodified()));
|
|
$node['realicon'] = $fileurl->out(false, array('preview' => 'tinyicon', 'oid' => $child->get_timemodified()));
|
|
$node['image_width'] = $imageinfo['width'];
|
|
$node['image_height'] = $imageinfo['height'];
|
|
}
|
|
$list[] = $node;
|
|
}
|
|
}
|
|
} else {
|
|
$list = array();
|
|
}
|
|
$ret['list'] = array_filter($list, array($this, 'filter'));
|
|
return $ret;
|
|
}
|
|
|
|
public function get_link($encoded) {
|
|
$info = array();
|
|
|
|
$browser = get_file_browser();
|
|
|
|
// the final file
|
|
$params = unserialize(base64_decode($encoded));
|
|
$contextid = clean_param($params['contextid'], PARAM_INT);
|
|
$fileitemid = clean_param($params['itemid'], PARAM_INT);
|
|
$filename = clean_param($params['filename'], PARAM_FILE);
|
|
$filepath = clean_param($params['filepath'], PARAM_PATH);
|
|
$filearea = clean_param($params['filearea'], PARAM_AREA);
|
|
$component = clean_param($params['component'], PARAM_COMPONENT);
|
|
$context = context::instance_by_id($contextid);
|
|
|
|
$file_info = $browser->get_file_info($context, $component, $filearea, $fileitemid, $filepath, $filename);
|
|
return $file_info->get_url();
|
|
}
|
|
|
|
/**
|
|
* Return is the instance is visible
|
|
* (is the type visible ? is the context enable ?)
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function is_visible() {
|
|
global $COURSE; //TODO: this is deprecated (skodak)
|
|
if ($COURSE->legacyfiles != 2) {
|
|
// do not show repo if legacy files disabled in this course...
|
|
return false;
|
|
}
|
|
|
|
return parent::is_visible();
|
|
}
|
|
|
|
/**
|
|
* Return the repository name.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_name() {
|
|
$context = $this->context->get_course_context(false);
|
|
if ($context) {
|
|
return get_string('courselegacyfilesofcourse', 'moodle', $context->get_context_name(false, true));
|
|
} else {
|
|
return get_string('courselegacyfiles');
|
|
}
|
|
}
|
|
|
|
public function supported_returntypes() {
|
|
return (FILE_INTERNAL | FILE_REFERENCE);
|
|
}
|
|
|
|
public static function get_type_option_names() {
|
|
return array();
|
|
}
|
|
|
|
/**
|
|
* Does this repository used to browse moodle files?
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function has_moodle_files() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Is this repository accessing private data?
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function contains_private_data() {
|
|
return false;
|
|
}
|
|
}
|