MDL-15351: first working version of the local browser
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
|
||||
*/
|
||||
|
||||
class repository_local extends repository{
|
||||
class repository_local extends repository {
|
||||
|
||||
public function __construct($repositoryid, $context = SITEID, $options = array()){
|
||||
global $SESSION, $action, $CFG;
|
||||
@@ -19,44 +19,127 @@ class repository_local extends repository{
|
||||
// You can use $_FILES to find that file
|
||||
}
|
||||
|
||||
public function print_login($ajax = true){
|
||||
public function print_login($ajax = true) {
|
||||
global $SESSION;
|
||||
// TODO
|
||||
// Return file list in moodle
|
||||
return $this->get_listing();
|
||||
}
|
||||
public function get_listing($path = '/', $search = ''){
|
||||
global $SESSION;
|
||||
$ret = new stdclass;
|
||||
|
||||
// this statement tells file picker to load files dramanically.
|
||||
$ret->dynload = true;
|
||||
$ret->nologin = true;
|
||||
public function get_listing($path = '/', $search = '') {
|
||||
global $CFG;
|
||||
$ret = array();
|
||||
|
||||
// defina upload form in file picker
|
||||
// this statement tells the file picker to load files dynamically (don't send the content of directories)
|
||||
// todo: add a thresold, where the picker automatically uses the dynamic mode - if there are too many files in
|
||||
// sub-directories - this should be calculated with a quick query, for the whole tree. Better optimizations
|
||||
// (like loading just a part of the sub-tree) can come later.
|
||||
$ret['dynload'] = false;
|
||||
// no login required
|
||||
$ret['nologin'] = true;
|
||||
// define upload form in file picker
|
||||
// Use ajax upload file
|
||||
$ret->upload = array('name'=>get_string('attachment', 'repository'), 'id'=>'repo-form');
|
||||
$ret->list = array();
|
||||
$ret['upload'] = array('name'=>get_string('attachment', 'repository'), 'id'=>'repo-form');
|
||||
// todo: link to file manager
|
||||
$ret['manage'] = $CFG->wwwroot .'/files/index.php'; // temporary
|
||||
|
||||
$browser = get_file_browser();
|
||||
$itemid = null;
|
||||
$filename = null;
|
||||
$filearea = null;
|
||||
|
||||
// TODO: set path and file area for folders, for example
|
||||
//
|
||||
// $ret->list[] = array('title'=>'folder1', 'size'=>0,
|
||||
// 'date'=>'', 'path'=>'/', 'file_area'=>'course_files');
|
||||
//
|
||||
// call FILE API get the list of the file
|
||||
//
|
||||
$ret->list[] = array('title'=>'title','source'=>'download url', 'thumbnail'=>'url of thumbnail', 'date'=>'', 'size'=>'unknown');
|
||||
if(empty($ret)) {
|
||||
if ($fileinfo = $browser->get_file_info($this->context, $filearea, $itemid, $path, $filename)) {
|
||||
$level = $fileinfo->get_parent();
|
||||
$path = array();
|
||||
while ($level) {
|
||||
$path[] = $level->get_visible_name();
|
||||
$level = $level->get_parent();
|
||||
}
|
||||
$ret['path'] = array_reverse($path);
|
||||
$ret['list'] = $this->build_tree($fileinfo, $search);
|
||||
} else {
|
||||
// throw some "path not found" exception?
|
||||
}
|
||||
|
||||
if (empty($ret['list'])) {
|
||||
throw new repository_exception('emptyfilelist', 'repository_local');
|
||||
} else {
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
public function print_listing(){
|
||||
|
||||
/**
|
||||
* Builds a tree of files, to be used by get_listing()
|
||||
*
|
||||
* @param $fileinfo an object returned by file_browser::get_file_info()
|
||||
* @returns array describing the files under the passed $fileinfo
|
||||
*
|
||||
* todo: take $search into account, and respect a threshold for dynamic loading
|
||||
*/
|
||||
private function build_tree($fileinfo, $search) {
|
||||
global $CFG;
|
||||
|
||||
$children = $fileinfo->get_children();
|
||||
|
||||
$list = array();
|
||||
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()) {
|
||||
$level = $child->get_parent();
|
||||
while ($level) {
|
||||
$path[] = $level->get_visible_name();
|
||||
$level = $level->get_parent();
|
||||
}
|
||||
|
||||
$tmp = array(
|
||||
'title' => $child->get_visible_name(),
|
||||
'size' => 0,
|
||||
'date' => $filedate,
|
||||
'path' => array_reverse($path),
|
||||
'thumbnail' => $CFG->pixpath .'/f/folder.gif'
|
||||
);
|
||||
$tmp['children'] = $this->build_tree($child, $search);
|
||||
$list[] = $tmp;
|
||||
|
||||
} else { // not a directory
|
||||
$list[] = array(
|
||||
'title' => $filename,
|
||||
'size' => $filesize,
|
||||
'date' => $filedate,
|
||||
'source' => $child->get_url(),
|
||||
'thumbnail' => $CFG->pixpath .'/f/'. mimeinfo_from_type("icon", $filetype)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
public function print_listing() {
|
||||
// will be used in non-javascript file picker
|
||||
}
|
||||
public function print_search(){
|
||||
|
||||
public function print_search() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function has_admin_config() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function get_option_names() {
|
||||
// todo: add dynamic loading threshold
|
||||
return array();
|
||||
}
|
||||
|
||||
// empty function is necessary to make it possible to edit the name of the repository
|
||||
public function admin_config_form(&$mform) {
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user