3 header("Cache-Control: no-cache, must-revalidate");
4 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
5 require_once('../config.php');
6 require_once('../lib/filelib.php');
7 require_once('lib.php');
9 $p = optional_param('p', '', PARAM_INT);
10 // opened in editor or moodleform
11 $env = optional_param('env', 'form', PARAM_ALPHA);
13 $file = optional_param('file', '', PARAM_RAW);
14 // rename the file name
15 $title = optional_param('title', '', PARAM_FILE);
16 $action = optional_param('action', '', PARAM_ALPHA);
17 $search = optional_param('s', '', PARAM_CLEANHTML);
19 $repo_id = optional_param('repo_id', 1, PARAM_INT);
20 $ctx_id = optional_param('ctx_id', SITEID, PARAM_INT);
24 if (!repository_check_context($ctx_id)) {
26 $err->e = get_string('nopermissiontoaccess', 'repository');
27 die(json_encode($err));
31 * walk an array to attach repository ID
33 function attach_repository_id(&$value, $key, $id){
34 $value['repo_id'] = $id;
38 * these actions are requested without repository ID
43 $repos = repository_get_instances(array(get_context_instance_by_id($ctx_id), get_system_context()));
45 foreach($repos as $repo){
46 if ($repo->global_search()) {
48 $ret = $repo->get_listing(null, $search);
49 array_walk($ret['list'], 'attach_repository_id', $repo->id);
50 $tmp = array_merge($list, $ret['list']);
52 } catch (repository_exception $e) {
54 $err->e = $e->getMessage();
55 die(json_encode($err));
59 die(json_encode(array('list'=>$list)));
63 $cache = new curl_cache;
69 // Get repository instance information
70 $sql = 'SELECT i.name, i.typeid, r.type FROM {repository} r, {repository_instances} i WHERE i.id='.$repo_id.' AND i.typeid=r.id';
71 if(!$repository = $DB->get_record_sql($sql)) {
73 $err->e = get_string('invalidrepositoryid', 'repository');
74 die(json_encode($err));
76 $type = $repository->type;
79 if(file_exists($CFG->dirroot.'/repository/'.
80 $type.'/repository.class.php'))
82 require_once($CFG->dirroot.'/repository/'.
83 $type.'/repository.class.php');
84 $classname = 'repository_' . $type;
86 $repo = new $classname($repo_id, $ctx_id, array('ajax'=>true, 'name'=>$repository->name));
87 } catch (repository_exception $e){
89 $err->e = $e->getMessage();
90 die(json_encode($err));
94 $err->e = get_string('invalidplugin', 'repository');
95 die(json_encode($err));
101 echo json_encode($repo->print_login());
102 } catch (repository_exception $e){
104 $err->e = $e->getMessage();
105 die(json_encode($err));
109 // call opener window to refresh repository
110 // the callback url should be something like this:
111 // http://xx.moodle.com/repository/ws.php?action=callback&repo_id=1&sid=xxx
112 // sid is the attached auth token from external source
114 <html><head><script type="text/javascript">
115 window.opener.repository_callback($repo_id);
116 </script><body></body></html>
123 echo json_encode($repo->get_listing($p));
124 } else if(!empty($search)) {
125 echo json_encode($repo->get_listing('', $search));
127 echo json_encode($repo->get_listing());
129 } catch (repository_exception $e) {
131 $err->e = $e->getMessage();
132 die(json_encode($err));
136 $path = $repo->get_file($file, $title);
137 $itemid = (int)substr(hexdec(uniqid()), 0, 9)+rand(1,100);
139 $info = repository_move_to_filepool($path, $title, $itemid);
141 echo json_encode($info);
142 } elseif($env == 'editor') {
143 echo json_encode($info);
146 } catch (repository_exception $e){
148 $err->e = $e->getMessage();
149 die(json_encode($err));
150 } catch (Exception $e) {
152 $err->e = $e->getMessage();
153 die(json_encode($err));
158 echo json_encode($repo->get_listing());
159 } catch (repository_exception $e){
161 $err->e = $e->getMessage();
162 die(json_encode($err));