Differences Between: [Versions 310 and 403] [Versions 311 and 403] [Versions 39 and 403] [Versions 400 and 403]
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 * @package core 9 * @subpackage mnet 10 * @author Donal McMullan donal@catalyst.net.nz 11 * @version 0.0.1 12 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License 13 * @package mnet 14 */ 15 require(__DIR__.'/../../config.php'); 16 require_once $CFG->dirroot.'/mnet/xmlrpc/client.php'; 17 require_once($CFG->libdir.'/adminlib.php'); 18 include_once($CFG->dirroot.'/mnet/lib.php'); 19 20 if ($CFG->mnet_dispatcher_mode === 'off') { 21 throw new \moodle_exception('mnetdisabled', 'mnet'); 22 } 23 24 admin_externalpage_setup('mnettestclient'); 25 26 error_reporting(DEBUG_ALL); 27 28 echo $OUTPUT->header(); 29 if (!extension_loaded('openssl')) { 30 throw new \moodle_exception('requiresopenssl', 'mnet', '', null, true); 31 } 32 33 // optional drilling down parameters 34 $hostid = optional_param('hostid', 0, PARAM_INT); 35 $servicename = optional_param('servicename', '', PARAM_SAFEDIR); 36 $methodid = optional_param('method', 0, PARAM_INT); 37 38 $hosts = $DB->get_records('mnet_host'); 39 $moodleapplicationid = $DB->get_field('mnet_application', 'id', array('name' => 'moodle')); 40 41 $url = new moodle_url('/admin/mnet/testclient.php'); 42 $PAGE->set_url($url); 43 44 echo $OUTPUT->heading(get_string('hostlist', 'mnet')); 45 foreach ($hosts as $id => $host) { 46 if (empty($host->wwwroot) || $host->wwwroot == $CFG->wwwroot) { 47 continue; 48 } 49 $newurl = new moodle_url($url, array('hostid' => $host->id)); 50 echo '<p>' . html_writer::link($newurl, $host->wwwroot) . '</p>'; 51 } 52 53 if (!empty($hostid) && array_key_exists($hostid, $hosts)) { 54 $host = $hosts[$hostid]; 55 if ($host->applicationid != $moodleapplicationid) { 56 echo $OUTPUT->notification(get_string('notmoodleapplication', 'mnet')); 57 } 58 $mnet_peer = new mnet_peer(); 59 $mnet_peer->set_wwwroot($host->wwwroot); 60 61 $mnet_request = new mnet_xmlrpc_client(); 62 63 $mnet_request->set_method('system/listServices'); 64 $mnet_request->send($mnet_peer); 65 66 $services = $mnet_request->response; 67 $yesno = array('No', 'Yes'); 68 $servicenames = array(); 69 70 echo $OUTPUT->heading(get_string('servicesavailableonhost', 'mnet', $host->wwwroot)); 71 72 if (!empty($mnet_request->error)) { 73 echo $OUTPUT->heading(get_string('error'), 3); 74 echo html_writer::alist($mnet_request->error); 75 $services = array(); 76 } 77 78 $table = new html_table(); 79 $table->head = array( 80 get_string('serviceid', 'mnet'), 81 get_string('service', 'mnet'), 82 get_string('version', 'mnet'), 83 get_string('theypublish', 'mnet'), 84 get_string('theysubscribe', 'mnet'), 85 get_string('options', 'mnet'), 86 ); 87 $table->data = array(); 88 89 $yesno = array(get_string('no'), get_string('yes')); 90 91 // this query is horrible and has to be remapped afterwards, because of the non-uniqueness 92 // of the remoterep service (it has two plugins so far that use it) 93 // it's possible to get a unique list back using a subquery with LIMIT but that would break oracle 94 // so it's best to just do this small query and then remap the results afterwards 95 $sql = ' 96 SELECT DISTINCT 97 ' . $DB->sql_concat('r.plugintype', "'_'", 'r.pluginname', "'_'", 's.name') . ' AS uniqueid, 98 s.name, 99 r.plugintype, 100 r.pluginname 101 FROM 102 {mnet_service} s 103 JOIN {mnet_remote_service2rpc} s2r ON s2r.serviceid = s.id 104 JOIN {mnet_remote_rpc} r ON r.id = s2r.rpcid'; 105 106 $serviceinfo = array(); 107 108 foreach ($DB->get_records_sql($sql) as $result) { 109 $serviceinfo[$result->name] = $result->plugintype . '_' . $result->pluginname; 110 } 111 112 foreach ($services as $id => $servicedata) { 113 if (array_key_exists($servicedata['name'], $serviceinfo)) { 114 $service = $serviceinfo[$servicedata['name']]; 115 $servicedata['humanname'] = get_string($servicedata['name'].'_name', $service); 116 } else { 117 $servicedata['humanname'] = get_string('unknown', 'mnet'); 118 } 119 $newurl = new moodle_url($url, array('hostid' => $host->id, 'servicename' => $servicedata['name'])); 120 $table->data[] = array( 121 $servicedata['name'], 122 $servicedata['humanname'], 123 $servicedata['apiversion'], 124 $yesno[$servicedata['publish']], 125 $yesno[$servicedata['subscribe']], 126 html_writer::link($newurl, get_string('listservices', 'mnet')) 127 ); 128 129 } 130 echo html_writer::table($table); 131 132 133 $mnet_request = new mnet_xmlrpc_client(); 134 $mnet_request->set_method('system/listMethods'); 135 if (isset($servicename) && array_key_exists($servicename, $serviceinfo)) { 136 echo $OUTPUT->heading(get_string('methodsavailableonhostinservice', 'mnet', (object)array('host' => $host->wwwroot, 'service' => $servicename))); 137 $service = $serviceinfo[$servicename]; 138 $mnet_request->add_param($servicename, 'string'); 139 } else { 140 echo $OUTPUT->heading(get_string('methodsavailableonhost', 'mnet', $host->wwwroot)); 141 } 142 143 $mnet_request->send($mnet_peer); 144 $methods = $mnet_request->response; 145 146 if (!empty($mnet_request->error)) { 147 echo $OUTPUT->heading(get_string('error'), 3); 148 echo html_writer::alist($mnet_request->error); 149 $methods = array(); 150 } 151 152 $table = new html_table(); 153 $table->head = array( 154 get_string('method', 'mnet'), 155 get_string('options', 'mnet'), 156 ); 157 $table->data = array(); 158 159 foreach ($methods as $id => $method) { 160 $params = array('hostid' => $host->id, 'method' => $id+1); 161 if (isset($servicename)) { 162 $params['servicename'] = $servicename; 163 } 164 $newurl = new moodle_url($url, $params); 165 $table->data[] = array( 166 $method, 167 html_writer::link($newurl, get_string('inspect', 'mnet')) 168 ); 169 } 170 echo html_writer::table($table); 171 172 if (isset($methodid) && array_key_exists($methodid-1, $methods)) { 173 $method = $methods[$methodid-1]; 174 175 $mnet_request = new mnet_xmlrpc_client(); 176 $mnet_request->set_method('system/methodSignature'); 177 $mnet_request->add_param($method, 'string'); 178 $mnet_request->send($mnet_peer); 179 $signature = $mnet_request->response; 180 181 echo $OUTPUT->heading(get_string('methodsignature', 'mnet', $method)); 182 183 if (!empty($mnet_request->error)) { 184 echo $OUTPUT->heading(get_string('error'), 3); 185 echo html_writer::alist($mnet_request->error); 186 $signature = array(); 187 } 188 189 $table = new html_table(); 190 $table->head = array( 191 get_string('position', 'mnet'), 192 get_string('name', 'mnet'), 193 get_string('type', 'mnet'), 194 get_string('description', 'mnet'), 195 ); 196 $table->data = array(); 197 198 $params = $signature['parameters']; 199 foreach ($params as $pos => $details) { 200 $table->data[] = array( 201 $pos, 202 $details['name'], 203 $details['type'], 204 $details['description'], 205 ); 206 } 207 $table->data[] = array( 208 get_string('returnvalue', 'mnet'), 209 '', 210 $signature['return']['type'], 211 $signature['return']['description'] 212 ); 213 214 echo html_writer::table($table); 215 216 $mnet_request->set_method('system/methodHelp'); 217 $mnet_request->add_param($method, 'string'); 218 $mnet_request->send($mnet_peer); 219 $help = $mnet_request->response; 220 221 echo $OUTPUT->heading(get_string('methodhelp', 'mnet', $method)); 222 echo(str_replace('\n', '<br />',$help)); 223 } 224 } 225 226 echo $OUTPUT->footer(); 227 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body