From b318bb6db234b627ff1c814faef0a0a0fcd81bf9 Mon Sep 17 00:00:00 2001 From: dongsheng Date: Wed, 26 Nov 2008 03:26:33 +0000 Subject: [PATCH] REPOSITORY/MDL-13766 pass mimetype and return value type to file picker to filter repository instances --- lib/editor/tinymce/tinymce.js.php | 3 +-- lib/form/filepicker.php | 6 +++-- lib/weblib.php | 2 +- repository/javascript.php | 11 ++++---- repository/lib.php | 42 ++++++++++++++++++++++++++++++- 5 files changed, 53 insertions(+), 11 deletions(-) diff --git a/lib/editor/tinymce/tinymce.js.php b/lib/editor/tinymce/tinymce.js.php index 8c03ad3744..61fdaf808b 100644 --- a/lib/editor/tinymce/tinymce.js.php +++ b/lib/editor/tinymce/tinymce.js.php @@ -92,7 +92,6 @@ $output .= <<filetypes = $filetypes; + $this->returnvalue = $returnvalue; parent::HTML_QuickForm_input($elementName, $elementLabel, $attributes); } @@ -70,7 +72,7 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input { } else { $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); } - $repository_info = repository_get_client($context); + $repository_info = repository_get_client($context, $this->filetypes, $this->returnvalue); $suffix = $repository_info['suffix']; $id = $this->_attributes['id']; diff --git a/lib/weblib.php b/lib/weblib.php index e87756f777..80954a606f 100644 --- a/lib/weblib.php +++ b/lib/weblib.php @@ -5119,7 +5119,7 @@ function print_textarea($usehtmleditor, $rows, $cols, $width, $height, $name, $v } else { $ctx = $COURSE->context; } - $ret = repository_get_client($ctx); + $ret = repository_get_client($ctx, null, true, null, array('image', 'media'), '*'); $str .= $ret['css'].$ret['js']; $suffix = $ret['suffix']; $str .= '
'; diff --git a/repository/javascript.php b/repository/javascript.php index c5fea04a98..7fd7452b6c 100644 --- a/repository/javascript.php +++ b/repository/javascript.php @@ -11,7 +11,7 @@ * @param object $context the context * @return array */ -function repository_get_client($context) { +function repository_get_client($context, $filetypes = '*', $returnvalue = '*') { global $CFG, $USER; $suffix = uniqid(); $sesskey = sesskey(); @@ -966,7 +966,7 @@ return _client; EOD; $user_context = get_context_instance(CONTEXT_USER, $USER->id); -$repos = repository_get_instances(array($user_context, $context, get_system_context())); +$repos = repository_get_instances(array($user_context, $context, get_system_context()), null, true, null, $filetypes, $returnvalue); foreach ($repos as $repo) { $info = $repo->ajax_info(); $js .= "\r\n"; @@ -980,11 +980,12 @@ function openpicker_$suffix(params) { if(!repository_client_$suffix.instance) { repository_client_$suffix.env = params.env; repository_client_$suffix.target = params.target; - if(params.type) { - repository_client_$suffix.filetype = params.filetype; + if(params.mimetype) { + repository_client_$suffix.mimetype = params.mimetype; } else { - repository_client_$suffix.filetype = 'all'; + repository_client_$suffix.mimetype = '*'; } + alert(repository_client_$suffix.mimetype); repository_client_$suffix.instance = new repository_client_$suffix(); repository_client_$suffix.instance.create_picker(); if(params.callback) { diff --git a/repository/lib.php b/repository/lib.php index 3d5abb91af..ba7be14011 100644 --- a/repository/lib.php +++ b/repository/lib.php @@ -663,6 +663,26 @@ abstract class repository { } } + /** + * what kind of files will be in this repository? + * @return array return '*' means this repository support any files, otherwise + * return mimetypes of files, it can be an array + */ + public function supported_mimetype() { + // return array('text/plain', 'image/gif'); + return '*'; + } + + /** + * does it return a file url or a item_id + * @return string + */ + public function supported_return_value() { + // return 'link'; + // return 'ref_id'; + return '*'; + } + /** * Provide repository instance information for Ajax * @global object $CFG @@ -1088,9 +1108,11 @@ function repository_get_editable_types($context = null) { * @param boolean $onlyvisible if visible == true, return visible instances only, * otherwise, return all instances * @param string $type a type name to retrieve + * @param string $filetypes supported file types + * @param string $returnvalue supportted returned value * @return array repository instances */ -function repository_get_instances($contexts=array(), $userid = null, $onlyvisible = true, $type=null) { +function repository_get_instances($contexts=array(), $userid = null, $onlyvisible = true, $type=null, $filetypes = '*', $returnvalue = '*') { global $DB, $CFG, $USER; $params = array(); @@ -1140,6 +1162,24 @@ function repository_get_instances($contexts=array(), $userid = null, $onlyvisibl $classname = 'repository_' . $repo->repositorytype;// $repository = new $classname($repo->id, $repo->contextid, $options, $repo->readonly); + if ($filetypes !== '*' and $repository->supported_mimetype() !== '*') { + $mimetypes = $repository->supported_mimetype(); + $is_supported = false; + foreach ($mimetypes as $type) { + if (in_array($type, $filetypes)) { + $is_supported = true; + } + } + if (!$is_supported) { + continue; + } + } + if ($returnvalue !== '*' and $repository->supported_return_value() !== '*') { + $tmp = $repository->supported_return_value(); + if ($tmp == $returnvalue) { + continue; + } + } if (!$onlyvisible || ($repository->is_visible() && !$repository->disabled)) { $ret[] = $repository; } -- 2.39.5