From a560785fae91a24c5e8a5fb4208c3badcd2ed83f Mon Sep 17 00:00:00 2001 From: dongsheng Date: Thu, 3 Sep 2009 03:37:55 +0000 Subject: [PATCH] "MDL-13766, improve repository module to support file manager and disable draft plugin in filemanager" --- repository/draft/repository.class.php | 20 ++++++++++++--- repository/lib.php | 24 +++++++++--------- repository/repository.js | 2 +- repository/repository.src.js | 3 +++ repository/ws.php | 35 +++++++++++---------------- 5 files changed, 46 insertions(+), 38 deletions(-) diff --git a/repository/draft/repository.class.php b/repository/draft/repository.class.php index f04b1cc35d..c09ef7f1cc 100755 --- a/repository/draft/repository.class.php +++ b/repository/draft/repository.class.php @@ -31,7 +31,7 @@ class repository_draft extends repository { * @param string $path not used by this plugin * @return mixed */ - public function get_listing($path = '', $page = '') { + public function get_listing($path = '/', $page = '') { global $CFG, $USER, $itemid, $OUTPUT; $ret = array(); $ret['dynload'] = true; @@ -39,10 +39,13 @@ class repository_draft extends repository { $ret['nologin'] = true; $ret['draftfiles'] = true; $list = array(); + if (empty($path)) { + $path = '/'; + } $fs = get_file_storage(); - $context = get_context_instance(CONTEXT_USER, $USER->id); - $files = $fs->get_area_files($context->id, 'user_draft', $itemid); + $user_context = get_context_instance(CONTEXT_USER, $USER->id); + $files = $fs->get_directory_files($user_context->id, 'user_draft', $itemid, $path, false); foreach ($files as $file) { if ($file->get_filename()!='.') { $node = array( @@ -53,6 +56,17 @@ class repository_draft extends repository { 'thumbnail' => $OUTPUT->old_icon_url('f/text-32') ); $list[] = $node; + } else { + $foldername = explode('/', trim($file->get_filepath(), '/')); + $foldername = trim(array_pop($foldername), '/'); + $node = array( + 'title' => $foldername, + 'size' => 0, + 'date' => '', + 'children' => array(), + 'thumbnail' => $OUTPUT->old_icon_url('f/folder-32') + ); + $list[] = $node; } } $ret['list'] = $list; diff --git a/repository/lib.php b/repository/lib.php index 3f4b284ff4..083bb40f54 100644 --- a/repository/lib.php +++ b/repository/lib.php @@ -1116,7 +1116,7 @@ abstract class repository { * reused by sub class * @param string filename */ - public function prepare_file($file) { + public function prepare_file($filename) { global $CFG; if (!file_exists($CFG->dataroot.'/temp/download')) { mkdir($CFG->dataroot.'/temp/download/', 0777, true); @@ -1124,13 +1124,13 @@ abstract class repository { if (is_dir($CFG->dataroot.'/temp/download')) { $dir = $CFG->dataroot.'/temp/download/'; } - if (empty($file)) { - $file = uniqid('repo').'_'.time().'.tmp'; + if (empty($filename)) { + $filename = uniqid('repo').'_'.time().'.tmp'; } - if (file_exists($dir.$file)) { - $file = uniqid('m').$file; + if (file_exists($dir.$filename)) { + $filename = uniqid('m').$filename; } - return $dir.$file; + return $dir.$filename; } /** @@ -1139,19 +1139,17 @@ abstract class repository { * * @global object $CFG * @param string $url the url of file - * @param string $file save location + * @param string $filename save location * @return string the location of the file * @see curl package */ - public function get_file($url, $file = '') { + public function get_file($url, $filename = '') { global $CFG; - $path = $this->prepare_file($file); + $path = $this->prepare_file($filename); $fp = fopen($path, 'w'); $c = new curl; - $c->download(array( - array('url'=>$url, 'file'=>$fp) - )); + $c->download(array(array('url'=>$url, 'file'=>$fp))); return $path; } @@ -1486,7 +1484,7 @@ abstract class repository { * Show the search screen, if required * @return null */ - public function print_search($client_id) { + public function print_search() { $str = ''; $str .= ''; $str .= ''; diff --git a/repository/repository.js b/repository/repository.js index 3c36d6612f..510be21533 100644 --- a/repository/repository.js +++ b/repository/repository.js @@ -1 +1 @@ -var id2clientid={};var id2itemid={};var repository_listing={};var cached_client_id={};var file_extensions={};var new_filename="";var cached_id;var cached_repo_id;var repository_client=(function(){var a="2.0";var d=(10*2);function b(){alert(a)}function c(h,f){if(YAHOO.env.ua.ie==6){var g=document.getElementById("file-picker-"+h);g.style.width=f}}function e(){this.create_filepicker=function(o){var m=(YAHOO.env.ua.ie&&document.compatMode=="BackCompat");var j=(YAHOO.env.ua.ie==6||(YAHOO.env.ua.ie==7&&m));var n={label:fp_lang.listview,value:"l",onclick:{fn:repository_client.view_as_list,obj:o}};var f={label:fp_lang.thumbview,value:"t",onclick:{fn:repository_client.view_as_icons,obj:o}};var h=document.createElement("DIV");h.id="file-picker-"+o;h.className="file-picker";this.client_id=o;document.body.appendChild(h);this.filepicker=new YAHOO.widget.Panel("file-picker-"+o,{draggable:true,close:true,underlay:"none",zindex:666666,xy:[50,YAHOO.util.Dom.getDocumentScrollTop()+20]});var l="";this.filepicker.client_id=o;this.filepicker.setHeader(fp_lang.title);this.filepicker.setBody('
');this.filepicker.beforeRenderEvent.subscribe(function(){YAHOO.util.Event.onAvailable("layout-"+o,function(){l=new YAHOO.widget.Layout("layout-"+o,{height:480,width:700,units:[{position:"top",height:32,resize:false,body:'
',gutter:"2"},{position:"left",width:200,resize:true,scroll:true,body:'',gutter:"0 5 0 2",minWidth:150,maxWidth:300},{position:"center",body:'
',scroll:true,gutter:"0 2 0 0"}]});l.render()})});var g=new YAHOO.util.Resize("file-picker-"+o,{handles:["br"],autoRatio:true,status:true,minWidth:680,minHeight:400});c(o,"680px");g.on("resize",function(q){var r=q.height;var p=this.header.offsetHeight;var t=(r-p);var s=(m)?t:t-d;YAHOO.util.Dom.setStyle(this.body,"height",s+"px");c(this.client_id,"680px");if(j){this.sizeUnderlay();this.syncIframe()}l.set("height",s);l.set("width",(q.width-d));l.resize()},this.filepicker,true);repository_client.fp[o].viewbar=new YAHOO.widget.ButtonGroup({id:"btngroup-"+o,name:"buttons",disabled:true,container:"repo-viewbar-"+o});repository_client.fp[o].viewbar.addButtons([f,n]);this.print_listing();this.filepicker.render()};this.init_search=function(){var f=document.getElementById("search-div-"+this.client_id);f.innerHTML='";var g=new YAHOO.util.Element("search-btn-"+this.client_id);g.client_id=this.client_id;var h=new YAHOO.util.Element("search-input-"+this.client_id);h.client_id=this.client_id;g.fnSearch=function(o){var m=new YAHOO.util.Element("search-input-"+this.client_id);var j=m.get("value");var n=repository_client.fp[this.client_id];var p=[];p.s=j;p.env=n.env;p.accepted_types=n.accepted_types;p.sesskey=moodle_cfg.sesskey;p.ctx_id=fp_config.contextid;p.client_id=this.client_id;repository_client.loading(this.client_id,"load");var l=YAHOO.util.Connect.asyncRequest("POST",moodle_cfg.wwwroot+"/repository/ws.php?action=gsearch",this.search_cb,repository_client.postdata(p))};g.on("contentReady",function(){g.on("click",this.fnSearch,this.input_keyword)});g.search_cb={success:function(p){var n=repository_client.parse_json(p.responseText,"global_search_cb");var j=new YAHOO.util.Element("panel-"+n.client_id);if(!n.list||n.list.length<1){j.get("element").innerHTML=fp_lang.noresult;return}var m=repository_client.fp[n.client_id];m.view_staus=0;m.fs=n.list;if(n.gsearch){m.gsearch=true}if(m.view_staus){repository_client.view_as_list(n.client_id,n.list)}else{repository_client.view_as_icons(n.client_id,n.list)}var l=new YAHOO.util.Element("search-input-"+n.client_id);l.set("value","")}};h.on("contentReady",function(){var j=document.getElementById("search-input-"+this.client_id);var l=new YAHOO.util.KeyListener(j,{keys:13},{fn:function(){this.fnSearch()},scope:g,correctScope:true});l.enable()})};this.print_listing=function(){var f=new YAHOO.util.Element("repo-list-"+this.client_id);f.set("innerHTML","");f.on("contentReady",function(){this.init_search();for(var m in repository_listing[this.client_id]){var l=repository_listing[this.client_id][m];var o=false;if(this.env=="editor"&&this.accepted_types!="*"){if(l.supported_types!="*"){for(var h in l.supported_types){if(mdl_in_array(l.supported_types[h],this.accepted_types)){o=true}}}}else{o=true}if(l.supported_types=="*"||o){var g=document.createElement("li");g.id="repo-"+this.client_id+"-"+l.id;var n=document.createElement("img");n.src=l.icon;n.width="16";n.height="16";var p=document.createElement("a");p.href="###";p.id="repo-call-"+this.client_id+"-"+l.id;p.appendChild(n);p.className="fp-repo-name";p.innerHTML+=" "+l.name;p.onclick=function(){var s=new RegExp("repo-call-(\\w+)-(\\d+)","i");var j=this.id.match(s);var v=j[1];var r=j[2];for(var u in repository_listing[v]){var t="repo-call-"+v+"-"+u;var q=document.getElementById(t);if(q){q.style.background="transparent"}}this.style.background="#CCC";repository_client.req(v,r,"")};g.appendChild(p);f.appendChild(g);l=null}}},this,true)};this.show=function(){this.print_listing();var f=new YAHOO.util.Element("panel-"+this.filepicker.client_id);f.get("element").innerHTML="";this.filepicker.show()};this.hide=function(){this.filepicker.hide()}}e.fp={};return e})();repository_client.req=function(g,f,d,c){repository_client.loading(g,"load");this.fp[g].viewbar.set("disabled",false);var b=repository_client.fp[g];var e=[];e.p=d;e.env=b.env;e.sesskey=moodle_cfg.sesskey;e.ctx_id=fp_config.contextid;e.client_id=g;e.repo_id=f;e.itemid=repository_client.fp[g].itemid;if(!!c){e.page=c}e.accepted_types=b.accepted_types;var a=YAHOO.util.Connect.asyncRequest("POST",moodle_cfg.wwwroot+"/repository/ws.php?action=list",this.req_cb,this.postdata(e))};repository_client.req_cb={success:function(d){var c=repository_client.parse_json(d.responseText,"req_cb");var b=repository_client.fp[c.client_id];b.viewbar.set("disabled",false);var a=new YAHOO.util.Element("panel-"+c.client_id);if(c&&c.e){a.get("element").innerHTML='
'+c.e+"
";return}b.fs=c;if(!c){return}else{if(c.iframe){repository_client.view_iframe(c.client_id)}else{if(c.login){b.viewbar.set("disabled",true);repository_client.print_login(c.client_id,c)}else{if(c.list){if(b.view_status){repository_client.view_as_list(c.client_id,c.list)}else{repository_client.view_as_icons(c.client_id,c.list)}}}}}if(c.msg){repository_client.print_msg(c.msg,c.client_id)}}};repository_client.print_msg=function(b,c){var a=new YAHOO.util.Element("panel-"+c);a.get("element").innerHTML='
'+b+"
"+a.get("element").innerHTML};repository_client.view_iframe=function(c){var a=repository_client.fp[c].fs;var b=new YAHOO.util.Element("panel-"+c);b.get("element").innerHTML='