1.8 * @date 02/12/2007 * @version 2.x * * Allows adding a parent tracker in any xmlrpc accessible or local Moodle * where an issue may be forwarded. * * To forward an issue to a parent tracker in a remote Moodle, the resolver must have an * mnet account at that location. */ if (!defined('MOODLE_INTERNAL')) { die('Direct access to this script is forbidden.'); /// It must be included from view.php in mod/tracker } include_once $CFG->dirroot.'/mnet/xmlrpc/client.php'; include_once $CFG->dirroot.'/mod/tracker/rpclib.php'; echo "
"; echo $OUTPUT->box_start('center', '100%', '', '', 'generalbox', 'bugreport'); /// gets current parent information echo $OUTPUT->heading(get_string('currentbinding', 'tracker')); $localid = 0; $remoteid = 0; if (!empty($tracker->parent)){ if (is_numeric($tracker->parent)){ // tracker is local in this Moodle $parent = tracker_rpc_get_infos($tracker->parent, true); $localid = $tracker->parent; $parent_mnet = $DB->get_record('mnet_host', array('wwwroot' => $CFG->wwwroot)); } else { // tracker is remote list($remoteid, $mnet_host) = explode('@', $tracker->parent); // get network tracker properties $rpcclient = new mnet_xmlrpc_client(); $rpcclient->set_method('mod/tracker/rpclib.php/tracker_rpc_get_infos'); $rpcclient->add_param($remoteid, 'int'); $parent_mnet = new mnet_peer(); $parent_mnet->set_wwwroot($mnet_host); if (!empty($parent_mnet->wwwroot)) { if (!$rpcclient->send($parent_mnet)) { print_error('errorremote', 'tracker', implode("
", $rpcclient->error)); } $parent = json_decode($rpcclient->response); // fix a bug in XML-RPC transfer of arrays if (is_object($parent->elements)) { $parent->elements = get_object_vars($parent->elements); } } else { $tracker->parent = ''; } } } if (!empty($tracker->parent)) { ?>
: wwwroot); echo "({$parent_mnet->ip_address})"; } else { echo get_string('nomnet', 'tracker'); } ?>
: name) ?>
: ".get_string('knownelements', 'tracker').":
"; if (!empty($parent->elements)){ $child = tracker_rpc_get_infos($tracker->id, true); if (!tracker_display_elementmatch($child, $parent)) { echo $OUTPUT->notification(get_string('unmatchingelements', 'tracker')); } } else { echo $OUTPUT->notification(get_string('emptydefinition', 'tracker')); } ?>
heading(get_string('selectparent', 'tracker')); $localtrackersmenu = $DB->get_records_menu('tracker', null, '', 'id,name'); unset($localtrackersmenu[$tracker->id]); // we should not bind to ourselves $step = optional_param('step', 0, PARAM_INT) + 1; switch ($step) { case 1 : { $remote_hosts = $DB->get_records_select('mnet_host', "applicationid = 1 AND deleted = 0"); $options = array(); if (!empty($remote_hosts)) { foreach ($remote_hosts as $host) { if (empty($host->wwwroot)) continue; // Avoid "all hosts" as remote. if ($host->wwwroot == $CFG->wwwroot) continue; // Avoid ourself as remote. $options[$host->id] = $host->wwwroot; } } } break; case 2 : { $remotehostid = required_param('remotehost', PARAM_INT); // get available trackers there using RPC $userroot = $DB->get_field('mnet_host', 'wwwroot', array('id' => $USER->mnethostid)); $rpcclient = new mnet_xmlrpc_client(); $rpcclient->set_method('mod/tracker/rpclib.php/tracker_rpc_get_instances'); $rpcclient->add_param($USER->username, 'string'); $rpcclient->add_param($userroot, 'string'); $parent_mnet = new mnet_peer(); $remotehost = $DB->get_field('mnet_host', 'wwwroot', array('id' => $remotehostid)); $parent_mnet->set_wwwroot($remotehost); $response = $rpcclient->send($parent_mnet); $remotetrackers = json_decode($rpcclient->response); if (!empty($remotetrackers)){ if ($remotetrackers->status == 200){ foreach($remotetrackers->trackers as $tracker){ $trackersmenu["{$tracker->id}@{$remotehost}"] = $tracker->name; } if (debugging() && !empty($remotetrackers->report)){ print_object($remotetrackers->report); } } else { echo $OUTPUT->notification($remotetrackers->error); } } else { echo "RPC failure :"; print_object($rpcclient->error); } } break; default: { $step = 0; } } ?>
: 'choose'), array('onchange' => "submitform('bindlocalparent')")); } ?>
: 'choose'), array('onchange' => "submitform('bindremoteparent')")); } } else { echo $remotehost; } ?>
: 'choose'), array('onchange' => "submitform('bindremoteparent')")); } ?>

box_end(); ?>