171
171
require_once $CFG->dirroot . '/mnet/xmlrpc/client.php';
173
173
// check remote login permissions
174
if (! has_capability('moodle/site:mnetlogintoremote', get_context_instance(CONTEXT_SYSTEM, SITEID))
174
if (! has_capability('moodle/site:mnetlogintoremote', get_context_instance(CONTEXT_SYSTEM))
175
175
or is_mnet_remote_user($USER)
176
176
or $USER->username == 'guest'
177
177
or empty($USER->id)) {
178
error(get_string('notpermittedtojump', 'mnet'));
178
print_error('notpermittedtojump', 'mnet');
181
181
// check for SSO publish permission first
182
182
if ($this->has_service($mnethostid, 'sso_sp') == false) {
183
error(get_string('hostnotconfiguredforsso', 'mnet'));
183
print_error('hostnotconfiguredforsso', 'mnet');
186
186
// set RPC timeout to 30 seconds if not configured
285
285
$firsttime = false;
287
287
// get the local record for the remote user
288
$localuser = get_record('user', 'username', $remoteuser->username, 'mnethostid', $remotehost->id);
288
$localuser = get_record('user', 'username', addslashes($remoteuser->username), 'mnethostid', $remotehost->id);
290
290
// add the remote user to the database if necessary, and if allowed
291
291
// TODO: refactor into a separate function
292
if (! $localuser->id) {
292
if (empty($localuser) || ! $localuser->id) {
293
293
if (empty($this->config->auto_add_remote_users)) {
294
error(get_string('nolocaluser', 'mnet'));
294
print_error('nolocaluser', 'mnet');
296
296
$remoteuser->mnethostid = $remotehost->id;
297
297
if (! insert_record('user', addslashes_object($remoteuser))) {
298
error(get_string('databaseerror', 'mnet'));
298
print_error('databaseerror', 'mnet');
300
300
$firsttime = true;
301
301
if (! $localuser = get_record('user', 'username', addslashes($remoteuser->username), 'mnethostid', $remotehost->id)) {
302
error(get_string('nolocaluser', 'mnet'));
302
print_error('nolocaluser', 'mnet');
771
772
join("\n", $mnet_request->error));
786
c.fullname as coursename,
787
c.modinfo as modinfo,
790
{$CFG->prefix}user u,
792
{$CFG->prefix}course c
795
u.mnethostid = '$mnethostid' AND
796
l.id > '".$mnet_request->response['last log id']."' AND
801
$results = get_records_sql($query);
803
if (false == $results) continue;
807
foreach($results as $result) {
808
if (!empty($result->modinfo) && !empty($result->cmid)) {
809
$modinfo = unserialize($result->modinfo);
810
unset($result->modinfo);
777
mhostlogs.remoteid, mhostlogs.time, mhostlogs.userid, mhostlogs.ip,
778
mhostlogs.course, mhostlogs.module, mhostlogs.cmid, mhostlogs.action,
779
mhostlogs.url, mhostlogs.info, mhostlogs.username, c.fullname as coursename,
784
l.id as remoteid, l.time, l.userid, l.ip, l.course, l.module, l.cmid,
785
l.action, l.url, l.info, u.username
787
' . $CFG->prefix . 'user u
788
INNER JOIN ' . $CFG->prefix . 'log l on l.userid = u.id
790
u.mnethostid = ' . $mnethostid . '
791
AND l.id > ' . $mnet_request->response['last log id'] . '
792
ORDER BY remoteid ASC
795
INNER JOIN ' . $CFG->prefix . 'course c on c.id = mhostlogs.course
796
ORDER by mhostlogs.remoteid ASC';
798
$mnethostlogs = get_records_sql($mnethostlogssql);
800
if ($mnethostlogs == false) {
804
$processedlogs = array();
806
foreach($mnethostlogs as $hostlog) {
807
// Extract the name of the relevant module instance from the
808
// course modinfo if possible.
809
if (!empty($hostlog->modinfo) && !empty($hostlog->cmid)) {
810
$modinfo = unserialize($hostlog->modinfo);
811
unset($hostlog->modinfo);
811
812
$modulearray = array();
812
813
foreach($modinfo as $module) {
813
814
$modulearray[$module->cm] = urldecode($module->name);
815
$result->resource_name = $modulearray[$result->cmid];
816
$hostlog->resource_name = $modulearray[$hostlog->cmid];
817
$result->resource_name = '';
818
$hostlog->resource_name = '';
821
'remoteid' => $result->remoteid,
822
'time' => $result->time,
823
'userid' => $result->userid,
825
'course' => $result->course,
826
'coursename' => $result->coursename,
827
'module' => $result->module,
828
'cmid' => $result->cmid,
829
'action' => $result->action,
830
'url' => $result->url,
831
'info' => $result->info,
832
'resource_name' => $result->resource_name,
833
'username' => $result->username
821
$processedlogs[] = array (
822
'remoteid' => $hostlog->remoteid,
823
'time' => $hostlog->time,
824
'userid' => $hostlog->userid,
825
'ip' => $hostlog->ip,
826
'course' => $hostlog->course,
827
'coursename' => $hostlog->coursename,
828
'module' => $hostlog->module,
829
'cmid' => $hostlog->cmid,
830
'action' => $hostlog->action,
831
'url' => $hostlog->url,
832
'info' => $hostlog->info,
833
'resource_name' => $hostlog->resource_name,
834
'username' => $hostlog->username
839
840
$mnet_request = new mnet_xmlrpc_client();
840
841
$mnet_request->set_method('auth/mnet/auth.php/refresh_log');
842
843
// set $token and $useragent parameters
843
$mnet_request->add_param($param);
844
$mnet_request->add_param($processedlogs);
845
846
if ($mnet_request->send($mnet_peer) === true) {
846
847
if ($mnet_request->response['code'] > 0) {