MDL-22950 adding new component column to the files table, unfortunately this change...
[moodle.git] / repository / repository_callback.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
19 /**
20  * The Web service script that is called from the filepicker front end
21  *
22  * @since 2.0
23  * @package moodlecore
24  * @subpackage repository
25  * @copyright 2009 Dongsheng Cai <dongsheng@moodle.com>
26  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
27  */
29 require_once(dirname(dirname(__FILE__)).'/config.php');
30 require_once(dirname(dirname(__FILE__)).'/lib/filelib.php');
31 require_once(dirname(__FILE__).'/lib.php');
33 require_login();
35 /// Parameters
37 $repo_id   = required_param('repo_id', PARAM_INT);           // Repository ID
39 $client_id = optional_param('client_id', '', PARAM_RAW);        // Client ID
40 $contextid = optional_param('ctx_id', SYSCONTEXTID, PARAM_INT); // Context ID
42 /// Headers to make it not cacheable
43 header('Cache-Control: no-cache, must-revalidate');
44 header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
46 /// Check permissions
47 if (repository::check_context($contextid)) { //TODO: this is weird (skodak)
48     print_error('nopermissiontoaccess', 'repository');
49 }
51 /// Wait as long as it takes for this script to finish
52 set_time_limit(0);
54 /// Get repository instance information
55 $sql = 'SELECT i.name, i.typeid, r.type FROM {repository} r, {repository_instances} i '.
56        'WHERE i.id=? AND i.typeid=r.id';
58 $repository = $DB->get_record_sql($sql, array($repo_id), '*', MUST_EXIST);
60 $type = $repository->type;
62 if (file_exists($CFG->dirroot.'/repository/'.$type.'/repository.class.php')) {
63     require_once($CFG->dirroot.'/repository/'.$type.'/repository.class.php');
64     $classname = 'repository_' . $type;
65     $repo = new $classname($repo_id, $contextid, array('ajax'=>true, 'name'=>$repository->name, 'type'=>$type, 'client_id'=>$client_id)); //TODO: this is very weird constructor! (skodak)
66 } else {
67     print_error('invalidplugin', 'repository', $type);
68 }
70 // post callback
71 $repo->callback();
72 // call opener window to refresh repository
73 // the callback url should be something like this:
74 // http://xx.moodle.com/repository/repository_callback.php?repo_id=1&sid=xxx
75 // sid is the attached auth token from external source
76 // If Moodle is working on HTTPS mode, then we are not allowed to access
77 // parent window, in this case, we need to alert user to refresh the repository
78 // manually.
79 $strhttpsbug = get_string('cannotaccessparentwin', 'repository');
80 $strrefreshnonjs = get_string('refreshnonjsfilepicker', 'repository');
81 $js =<<<EOD
82 <html>
83 <head>
84     <script type="text/javascript">
85     if(window.opener){
86         window.opener.M.core_filepicker.active_filepicker.list();
87         window.close();
88     } else {
89         alert("{$strhttpsbug }");
90     }
91     </script>
92 </head>
93 <body>
94     <noscript>
95     {$strrefreshnonjs}
96     </noscript>
97 </body>
98 </html>
99 EOD;
101 die($js);