]> git.mjollnir.org Git - moodle.git/commitdiff
"MDL-17391, filter repository intances by file types"
authordongsheng <dongsheng>
Mon, 8 Dec 2008 05:19:09 +0000 (05:19 +0000)
committerdongsheng <dongsheng>
Mon, 8 Dec 2008 05:19:09 +0000 (05:19 +0000)
lib/file/file_types.mm [new file with mode: 0644]
lib/filelib.php
lib/form/filemanager.php
repository/boxnet/repository.class.php
repository/flickr/repository.class.php
repository/flickr_public/repository.class.php
repository/javascript.php
repository/lib.php
repository/youtube/repository.class.php

diff --git a/lib/file/file_types.mm b/lib/file/file_types.mm
new file mode 100644 (file)
index 0000000..07f969c
--- /dev/null
@@ -0,0 +1,101 @@
+<map version="0.8.1">
+<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
+<node CREATED="1228443713170" ID="Freemind_Link_1016958583" MODIFIED="1228360017495" TEXT="Root">
+<node CREATED="1228443713170" MODIFIED="1228443713170" POSITION="right" TEXT="image">
+<node CREATED="1228443713170" MODIFIED="1228443713170" TEXT="web_image">
+<node CREATED="1228443713170" ID="Freemind_Link_750128103" MODIFIED="1228360048650" TEXT=".jpg"/>
+<node CREATED="1228443713170" ID="Freemind_Link_1840944189" MODIFIED="1228360051100" TEXT=".png"/>
+<node CREATED="1228443713170" ID="Freemind_Link_1710862996" MODIFIED="1228360052949" TEXT=".gif"/>
+</node>
+<node CREATED="1228443713170" MODIFIED="1228443713170" TEXT="non_web_image">
+<node CREATED="1228443713171" ID="Freemind_Link_481322493" MODIFIED="1228360054120" TEXT=".bmp"/>
+<node CREATED="1228443713171" ID="Freemind_Link_1948466853" MODIFIED="1228360055879" TEXT=".svg"/>
+<node CREATED="1228443713171" ID="Freemind_Link_82277447" MODIFIED="1228360058609" TEXT=".psd"/>
+</node>
+</node>
+<node CREATED="1228443713172" MODIFIED="1228443713172" POSITION="left" TEXT="audio">
+<node CREATED="1228443713172" ID="Freemind_Link_606456130" MODIFIED="1228444641257" TEXT="web_audio">
+<node CREATED="1228443713172" ID="Freemind_Link_59286792" MODIFIED="1228360024405" TEXT=".wav"/>
+<node CREATED="1228443713172" ID="Freemind_Link_618796935" MODIFIED="1228360026345" TEXT=".mp3"/>
+<node CREATED="1228443713172" ID="Freemind_Link_313976796" MODIFIED="1228360027884" TEXT=".ra"/>
+</node>
+<node CREATED="1228443713172" ID="Freemind_Link_1800832653" MODIFIED="1228444710126" TEXT="non_web_audio">
+<node CREATED="1228443713172" ID="Freemind_Link_1772266185" MODIFIED="1228360029556" TEXT=".ape"/>
+</node>
+</node>
+<node CREATED="1228443713171" ID="Freemind_Link_70165685" MODIFIED="1228443713171" POSITION="right" TEXT="video">
+<node CREATED="1228443713171" ID="Freemind_Link_164412832" MODIFIED="1228444732485" TEXT="web_video">
+<node CREATED="1228443713171" ID="Freemind_Link_1674188247" MODIFIED="1228360059808" TEXT=".flv"/>
+<node CREATED="1228443713171" ID="Freemind_Link_1109951130" MODIFIED="1228360062108" TEXT=".swf"/>
+<node CREATED="1228444776020" ID="Freemind_Link_441200481" MODIFIED="1228360063599" TEXT=".mov"/>
+<node CREATED="1228443713171" ID="Freemind_Link_1073677924" MODIFIED="1228360067059" TEXT=".rm"/>
+</node>
+<node CREATED="1228443713171" ID="Freemind_Link_1019644700" MODIFIED="1228444740884" TEXT="non_web_video">
+<node CREATED="1228443713171" ID="Freemind_Link_190589975" MODIFIED="1228360068448" TEXT=".avi"/>
+<node CREATED="1228444761093" ID="Freemind_Link_1728963308" MODIFIED="1228360070547" TEXT=".mpg"/>
+</node>
+</node>
+<node CREATED="1228443713171" ID="Freemind_Link_1159259702" MODIFIED="1228443713171" POSITION="left" TEXT="document">
+<node CREATED="1228443713171" ID="Freemind_Link_395227081" MODIFIED="1228443713171" TEXT="msoffice">
+<node CREATED="1228443713171" ID="Freemind_Link_1480546733" MODIFIED="1228360031084" TEXT=".doc"/>
+<node CREATED="1228443713171" ID="Freemind_Link_983591781" MODIFIED="1228360032344" TEXT=".ppt"/>
+<node CREATED="1228444842809" ID="Freemind_Link_922920573" MODIFIED="1228360034493" TEXT=".xls"/>
+</node>
+<node CREATED="1228443713171" MODIFIED="1228443713171" TEXT="openoffice">
+<node CREATED="1228443713171" ID="Freemind_Link_368708997" MODIFIED="1228360035753" TEXT=".odt"/>
+<node CREATED="1228443713171" ID="Freemind_Link_725490871" MODIFIED="1228360037712" TEXT=".odp"/>
+</node>
+<node CREATED="1228445046926" ID="Freemind_Link_1253224142" MODIFIED="1228445305915" TEXT="other">
+<node CREATED="1228445331815" ID="Freemind_Link_1202332406" MODIFIED="1228360039820" TEXT=".pdf"/>
+<node CREATED="1228445541872" ID="Freemind_Link_1229438606" MODIFIED="1228445547473" TEXT=".ps"/>
+</node>
+</node>
+<node CREATED="1228443713171" ID="Freemind_Link_525709024" MODIFIED="1228444608956" POSITION="right" TEXT="text">
+<node CREATED="1228443713171" ID="Freemind_Link_1252355401" MODIFIED="1228444954730" TEXT="source">
+<node CREATED="1228443713171" ID="Freemind_Link_1783454794" MODIFIED="1228360071977" TEXT=".c"/>
+<node CREATED="1228443713171" ID="Freemind_Link_603295666" MODIFIED="1228360073187" TEXT=".cpp"/>
+<node CREATED="1228443713171" ID="Freemind_Link_1939719884" MODIFIED="1228360075564" TEXT=".java"/>
+</node>
+<node CREATED="1228443713171" MODIFIED="1228443713171" TEXT="script">
+<node CREATED="1228443713171" ID="Freemind_Link_567551283" MODIFIED="1228360078936" TEXT=".php"/>
+<node CREATED="1228443713171" ID="Freemind_Link_829963573" MODIFIED="1228360081186" TEXT=".py"/>
+<node CREATED="1228443713171" ID="Freemind_Link_699741325" MODIFIED="1228360082595" TEXT=".lua"/>
+<node CREATED="1228443713171" ID="Freemind_Link_841176112" MODIFIED="1228360083825" TEXT=".rb"/>
+</node>
+<node CREATED="1228443713171" ID="Freemind_Link_466282865" MODIFIED="1228443713171" TEXT="markup">
+<node CREATED="1228443713171" ID="Freemind_Link_776860364" MODIFIED="1228360085205" TEXT=".xml"/>
+<node CREATED="1228443713171" ID="Freemind_Link_428374654" MODIFIED="1228360086825" TEXT=".html"/>
+<node CREATED="1228443713171" ID="Freemind_Link_1636201602" MODIFIED="1228360088364" TEXT=".xhtml"/>
+</node>
+<node CREATED="1228443713171" MODIFIED="1228443713171" TEXT="plaintext">
+<node CREATED="1228443713171" ID="Freemind_Link_304679617" MODIFIED="1228360090384" TEXT=".txt"/>
+<node CREATED="1228443713171" ID="Freemind_Link_988584709" MODIFIED="1228360091764" TEXT=".log"/>
+<node CREATED="1228443713171" ID="Freemind_Link_778232964" MODIFIED="1228360093272" TEXT=".csv"/>
+</node>
+</node>
+<node CREATED="1228444010861" ID="Freemind_Link_329759178" MODIFIED="1228444605452" POSITION="left" TEXT="moodle">
+<node CREATED="1228444424511" ID="Freemind_Link_864349088" MODIFIED="1228444427093" TEXT=".mb.zip"/>
+<node CREATED="1228444437566" ID="Freemind_Link_1509389480" MODIFIED="1228444447148" TEXT=".ld.zip"/>
+</node>
+<node CREATED="1228443713172" ID="Freemind_Link_907467024" MODIFIED="1228443933119" POSITION="right" TEXT="archive">
+<node CREATED="1228443713172" ID="Freemind_Link_637157755" MODIFIED="1228360096144" TEXT=".rar"/>
+<node CREATED="1228443713172" ID="Freemind_Link_628673054" MODIFIED="1228360097913" TEXT=".cab"/>
+<node CREATED="1228443713172" ID="Freemind_Link_1141513740" MODIFIED="1228360100154" TEXT=".iso"/>
+<node CREATED="1228443713172" ID="Freemind_Link_1269400334" MODIFIED="1228360101353" TEXT=".img"/>
+<node CREATED="1228443713172" ID="Freemind_Link_1973736841" MODIFIED="1228360102583" TEXT=".tar.gz"/>
+<node CREATED="1228444535473" ID="Freemind_Link_1525022758" MODIFIED="1228360105150" TEXT=".zip"/>
+</node>
+<node CREATED="1228443713172" ID="Freemind_Link_1332471247" MODIFIED="1228443713172" POSITION="left" TEXT="application">
+<node CREATED="1228443713172" MODIFIED="1228443713172" TEXT="windows">
+<node CREATED="1228443713172" ID="Freemind_Link_1154060414" MODIFIED="1228360041512" TEXT=".exe"/>
+<node CREATED="1228443713172" ID="Freemind_Link_1578063867" MODIFIED="1228360043052" TEXT=".dll"/>
+</node>
+<node CREATED="1228443713172" MODIFIED="1228443713172" TEXT="linux">
+<node CREATED="1228443713172" ID="Freemind_Link_68848485" MODIFIED="1228360045021" TEXT=".bin"/>
+</node>
+<node CREATED="1228443713172" ID="Freemind_Link_317684862" MODIFIED="1228443713172" TEXT="mac">
+<node CREATED="1228443920469" ID="_" MODIFIED="1228443922520" TEXT=".app"/>
+</node>
+</node>
+</node>
+</map>
index 0a6b0aa8b50867b6f2177718545c6ced9cae8daa..91f3e0a3e6ec10de9438589df5ab0f0f8a2f2b01 100644 (file)
@@ -2049,3 +2049,65 @@ class curl_cache {
         }
     }
 }
+class file_type_to_ext {
+    public function __construct($file = '') {
+        global $CFG;
+        if (empty($file)) {
+            $this->file = $CFG->libdir.'/file/file_types.mm';
+        } else {
+            $this->file = $file;
+        }
+        $this->tree = array();
+        $this->result = array();
+    }
+    private function _browse_nodes($parent, $types) {
+        $key = (string)$parent['TEXT'];
+        if(isset($parent->node)) {
+            $this->tree[$key] = array();
+            if (in_array((string)$parent['TEXT'], $types)) {
+                $this->_select_nodes($parent, $this->result);
+            } else {
+                foreach($parent->node as $v){
+                    $this->_browse_nodes($v, $types);
+                }
+            }
+        } else {
+            $this->tree[] = $key;
+        }
+    }
+    private function _select_nodes($parent){
+        if(isset($parent->node)) {
+            foreach($parent->node as $v){
+                $this->_select_nodes($v, $this->result);
+            }
+        } else {
+            $this->result[] = (string)$parent['TEXT'];
+        }
+    }
+
+    public function get_file_ext($types) {
+        $this->result = array();
+        if (in_array('*', $types)) {
+            return '*';
+        }
+        foreach ($types as $key=>$value){
+            if (strpos($value, '.') !== false) {
+                $this->result[] = $value;
+                unset($types[$key]);
+            }
+        }
+        if (file_exists($this->file)) {
+            $xml = simplexml_load_file($this->file);
+            foreach($xml->node->node as $v){
+                if (in_array((string)$v['TEXT'], $types)) {
+                    $this->_select_nodes($v);
+                } else {
+                    $this->_browse_nodes($v, $types);
+                }
+            }
+        } else {
+            exit('Failed to open test.xml.');
+        }
+        return $this->result;
+    }
+}
index 295a317f749b4a8724902dd94f940e100ee9c132..bc1ff41d92077853719c940cc08a7281e63ac853 100644 (file)
@@ -16,6 +16,16 @@ class MoodleQuickForm_filemanager extends HTML_QuickForm_element {
                 $this->_options[$name] = $value;
             }
         }
+        if (!empty($options['filetypes'])) {
+            $this->filetypes = $options['filetypes'];
+        } else {
+            $this->filetypes = '*';
+        }
+        if (!empty($options['returnvalue'])) {
+            $this->returnvalue = $options['returnvalue'];
+        } else {
+            $this->returnvalue = '*';
+        }
         if (!empty($options['maxbytes'])) {
             $this->_options['maxbytes'] = get_max_upload_file_size($CFG->maxbytes, $options['maxbytes']);
         }
@@ -159,7 +169,7 @@ class MoodleQuickForm_filemanager extends HTML_QuickForm_element {
             $context = get_context_instance(CONTEXT_COURSE, $COURSE->id);
         }
 
-        $repo_info = repository_get_client($context);
+        $repo_info = repository_get_client($context, $this->filetypes, $this->returnvalue);
         $suffix = $repo_info['suffix'];
 
         $html = $this->_get_draftfiles($draftitemid, $suffix);
index 29127d66e62ecc21f750adf981f6888649d76c54..1a0b698ab725298918b5fa6adf54d7f216cb4323 100755 (executable)
@@ -239,4 +239,4 @@ class repository_boxnet extends repository {
         $mform->addElement('static', null, '',  get_string('information','repository_boxnet'));
     }
 }
-?>
\ No newline at end of file
+?>
index 1bca8df60130ae2d967bf2a5f3495bb27305d027..9ced3f1f9b466a419f24fa5b72fea9c985e9d85b 100755 (executable)
@@ -292,4 +292,7 @@ class repository_flickr extends repository {
     public static function get_type_option_names() {
         return array('api_key', 'secret');
     }
+    public function supported_filetypes() {
+        return array('web_image');
+    }
 }
index fa571597e8d027365538901f64eb6e42e805cc1a..5b4efe8cfc1ff68c0b241f08fcdf9bf58f30d532 100644 (file)
@@ -338,5 +338,7 @@ class repository_flickr_public extends repository {
 
         repository::static_function('flickr_public','create', 'flickr_public', 0, get_system_context(), array('name' => get_string('repositoryname', 'repository_flickr_public'),'email_address' => null),1);
     }
+    public function supported_filetypes() {
+        return array('web_image');
+    }
 }
-
index 2e320f1f6ad145b1c03228e0992313c2531e854a..33ed7bb2c5bdd2dee62f8230c73b3dc73b829425 100644 (file)
@@ -981,7 +981,10 @@ return _client;
 EOD;
 
 $user_context = get_context_instance(CONTEXT_USER, $USER->id);
-$repos = repository::get_instances(array($user_context, $context, get_system_context()));
+if (is_array($filetypes) && in_array('*', $filetypes)) {
+    $filetypes = '*';
+}
+$repos = repository::get_instances(array($user_context, $context, get_system_context()), null, true, null, $filetypes, $returnvalue);
 $js .= "\r\n".'repository_client_'.$suffix.'repos=[];'."\r\n";
 foreach ($repos as $repo) {
     $info = $repo->ajax_info();
index 832f4a3859364c348a482e9cbc58e7ed137bf2ab..30321bf50bec63d42344f91406268af96c662635 100644 (file)
@@ -557,7 +557,7 @@ abstract class repository {
      * @param string $type a type name to retrieve
      * @return array repository instances
      */
-    public static function get_instances($contexts=array(), $userid = null, $onlyvisible = true, $type=null) {
+    public static function get_instances($contexts=array(), $userid = null, $onlyvisible = true, $type=null, $filetypes = '*', $returnvalue = '*') {
         global $DB, $CFG, $USER;
 
         $params = array();
@@ -605,10 +605,30 @@ abstract class repository {
             $options['type']    = $repo->repositorytype;
             $options['typeid']  = $repo->typeid;
             $classname = 'repository_' . $repo->repositorytype;//
+            $is_supported = true;
 
             $repository = new $classname($repo->id, $repo->contextid, $options, $repo->readonly);
+            $ft = new file_type_to_ext();
+            if ($filetypes !== '*' and $repository->supported_filetypes() !== '*') {
+                $filetypes = $ft->get_file_ext($filetypes);
+                $supported_filetypes = $ft->get_file_ext($repository->supported_filetypes());
+                $is_supported = false;
+                foreach  ($supported_filetypes as $type) {
+                    if (in_array($type, $filetypes)) {
+                        $is_supported = true;
+                    }
+                }
+            }
+            if ($returnvalue !== '*' and $repository->supported_return_value() !== '*') {
+                $tmp = $repository->supported_return_value();
+                if ($tmp != $returnvalue) {
+                    $is_supported = false;
+                }
+            }
             if (!$onlyvisible || ($repository->is_visible() && !$repository->disabled)) {
-                $ret[] = $repository;
+                if ($is_supported) {
+                    $ret[] = $repository;
+                }
             }
         }
         return $ret;
@@ -1226,7 +1246,7 @@ abstract class repository {
      * @return array return '*' means this repository support any files, otherwise
      *               return mimetypes of files, it can be an array
      */
-    public function supported_mimetype() {
+    public function supported_filetypes() {
         // return array('text/plain', 'image/gif');
         return '*';
     }
@@ -1238,7 +1258,7 @@ abstract class repository {
     public function supported_return_value() {
         // return 'link';
         // return 'ref_id';
-        return '*';
+        return 'ref_id';
     }
 
     /**
index 40f2e4d9bd8a65dcfa37ddcb1a647156ef6ab727..efb0c8e338be5592d2ebcca8ddd3cc1c65bebac1 100644 (file)
@@ -83,4 +83,12 @@ class repository_youtube extends repository {
             return $ret;
         }
     }
+    public function supported_return_value() {
+        // return 'link';
+        // return 'ref_id';
+        return 'link';
+    }
+    public function supported_filetypes() {
+        return array('web_video');
+    }
 }