MDL-15351: first working version of the local browser

This commit is contained in:
scyrma
2008-08-22 07:36:11 +00:00
parent 19a10884c6
commit be236ef508
+105 -22
View File
@@ -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) {
}
}
?>