mnet MDL-21261 mnet overhaul - adding and removing files I missed in the last big...
[moodle.git] / admin / mnet / testclient.php
1 <?php
2 /**
3  * A service browser for remote Moodles
4  *
5  * This script 'remotely' executes the reflection methods on a remote Moodle,
6  * and publishes the details of the available services
7  *
8  * @author  Donal McMullan  donal@catalyst.net.nz
9  * @version 0.0.1
10  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
11  * @package mnet
12  */
13 require_once(dirname(dirname(dirname(__FILE__))) . '/config.php');
14 require_once $CFG->dirroot.'/mnet/xmlrpc/client.php';
15 require_once($CFG->libdir.'/adminlib.php');
16 include_once($CFG->dirroot.'/mnet/lib.php');
18 if ($CFG->mnet_dispatcher_mode === 'off') {
19     print_error('mnetdisabled', 'mnet');
20 }
22 require_login();
23 admin_externalpage_setup('mnettestclient');
25 $context = get_context_instance(CONTEXT_SYSTEM);
26 require_capability('moodle/site:config', $context);
28 error_reporting(E_ALL);
30 admin_externalpage_print_header();
31 if (!extension_loaded('openssl')) {
32     print_error('requiresopenssl', 'mnet', '', NULL, true);
33 }
35 // optional drilling down parameters
36 $hostid = optional_param('hostid', 0, PARAM_INT);
37 $servicename = optional_param('servicename', '', PARAM_SAFEDIR);
38 $methodid = optional_param('method', 0, PARAM_INT);
40 $hosts = $DB->get_records('mnet_host');
41 $moodleapplicationid = $DB->get_field('mnet_application', 'id', array('name' => 'moodle'));
43 $url = new moodle_url('/admin/mnet/testclient.php');
44 $PAGE->set_url($url);
46 echo $OUTPUT->heading(get_string('hostlist', 'mnet'));
47 foreach ($hosts as $id => $host) {
48     if (empty($host->wwwroot) || $host->wwwroot == $CFG->wwwroot) {
49         continue;
50     }
51     $newurl = new moodle_url($url, array('hostid' => $host->id));
52     echo '<p>' . $OUTPUT->link($newurl, $host->wwwroot) . '</p>';
53 }
55 if (!empty($hostid) && array_key_exists($hostid, $hosts)) {
56     $host = $hosts[$hostid];
57     if ($host->applicationid != $moodleapplicationid) {
58         echo $OUTPUT->notification(get_string('notmoodleapplication', 'mnet'));
59     }
60     $mnet_peer = new mnet_peer();
61     $mnet_peer->set_wwwroot($host->wwwroot);
63     $mnet_request = new mnet_xmlrpc_client();
65     $mnet_request->set_method('system/listServices');
66     $mnet_request->send($mnet_peer);
67     $services = $mnet_request->response;
68     $yesno = array('No', 'Yes');
69     $servicenames = array();
71     echo $OUTPUT->heading(get_string('servicesavailableonhost', 'mnet', $host->wwwroot));
73     $table = new html_table();
74     $table->head = array(
75         get_string('serviceid', 'mnet'),
76         get_string('service', 'mnet'),
77         get_string('version', 'mnet'),
78         get_string('theypublish', 'mnet'),
79         get_string('theysubscribe', 'mnet'),
80         get_string('options', 'mnet'),
81     );
82     $table->data = array();
83     $sql = 'SELECT s.name, min(r.plugintype) AS plugintype, min(r.pluginname) AS pluginname
84         FROM {mnet_service} s
85         JOIN {mnet_service2rpc} s2r ON s2r.serviceid = s.id
86         JOIN {mnet_rpc} r ON r.id = s2r.rpcid
87         GROUP BY s.name';
89     $yesno = array(get_string('no'), get_string('yes'));
91     $serviceinfo = $DB->get_records_sql($sql);
92     foreach ($services as $id => $servicedata) {
93         if (array_key_exists($servicedata['name'], $serviceinfo)) {
94             $service = $serviceinfo[$servicedata['name']];
95             $servicedata['humanname'] = get_string($servicedata['name'].'_name', $service->plugintype . '_' . $service->pluginname);
96         } else {
97             $servicedata['humanname'] = get_string('unknown', 'mnet');
98         }
99         $newurl = new moodle_url($url, array('hostid' => $host->id, 'servicename' => $servicedata['name']));
100         $table->data[] = array(
101             $servicedata['name'],
102             $servicedata['humanname'],
103             $servicedata['apiversion'],
104             $yesno[$servicedata['publish']],
105             $yesno[$servicedata['subscribe']],
106             $OUTPUT->link($newurl, get_string('listservices', 'mnet'))
107         );
109     }
110     echo $OUTPUT->table($table);
113     $mnet_request->set_method('system/listMethods');
114     if (isset($servicename) && array_key_exists($servicename, $serviceinfo)) {
115         echo $OUTPUT->heading(get_string('methodsavailableonhostinservice', 'mnet', array('host' => $host->wwwroot, 'service' => $servicename)));
116         $service = $serviceinfo[$servicename];
117         $mnet_request->add_param($servicename, 'string');
118     } else {
119         echo $OUTPUT->heading(get_string('methodsavailableonhost', 'mnet', $host->wwwroot));
120     }
122     $mnet_request->send($mnet_peer);
123     $methods = $mnet_request->response;
126     $table = new html_table();
127     $table->head = array(
128         get_string('method', 'mnet'),
129         get_string('options', 'mnet'),
130     );
131     $table->data = array();
133     foreach ($methods as $id => $method) {
134         $params = array('hostid' => $host->id, 'method' => $id);
135         if (isset($servicename)) {
136             $params['servicename'] = $servicename;
137         }
138         $newurl = new moodle_url($url, $params);
139         $table->data[] = array(
140             $method,
141             $OUTPUT->link($newurl, get_string('inspect', 'mnet'))
142         );
143     }
144     echo $OUTPUT->table($table);
146     if (isset($methodid) && array_key_exists($methodid, $methods)) {
147         $method = $methods[$methodid];
149         $mnet_request = new mnet_xmlrpc_client();
150         $mnet_request->set_method('system/methodSignature');
151         $mnet_request->add_param($method, 'string');
152         $mnet_request->send($mnet_peer);
153         $signature = $mnet_request->response;
155         echo $OUTPUT->heading(get_string('methodsignature', 'mnet', $method));
157         $table = new html_table();
158         $table->head = array(
159             get_string('position', 'mnet'),
160             get_string('name', 'mnet'),
161             get_string('type', 'mnet'),
162             get_string('description', 'mnet'),
163         );
164         $table->data = array();
166         $params = $signature['parameters'];
167         foreach ($params as $pos => $details) {
168             $table->data[] = array(
169                 $pos,
170                 $details['name'],
171                 $details['type'],
172                 $details['description'],
173             );
174         }
175         $table->data[] = array(
176             get_string('returnvalue', 'mnet'),
177             '',
178             $signature['return']['type'],
179             $signature['return']['description']
180         );
182         echo $OUTPUT->table($table);
184         $mnet_request->set_method('system/methodHelp');
185         $mnet_request->add_param($method, 'string');
186         $mnet_request->send($mnet_peer);
187         $help = $mnet_request->response;
189         echo $OUTPUT->heading(get_string('methodhelp', 'mnet', $method));
190         echo(str_replace('\n', '<br />',$help));
191     }
194 echo $OUTPUT->footer();
195 ?>