Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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
?>