function doInfo($command, $options, $params) { if (sizeof($params) != 1) { return $this->raiseError("No channel specified"); } $reg =& $this->config->getRegistry(); $channel = strtolower($params[0]); if ($reg->channelExists($channel)) { $chan = $reg->getChannel($channel); if (PEAR::isError($chan)) { return $this->raiseError($chan); } } else { if (strpos($channel, '://')) { $downloader =& $this->getDownloader(); $tmpdir = $this->config->get('temp_dir'); PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); $loc = $downloader->downloadHttp($channel, $this->ui, $tmpdir); PEAR::staticPopErrorHandling(); if (PEAR::isError($loc)) { return $this->raiseError('Cannot open "' . $channel . '" (' . $loc->getMessage() . ')'); } else { $contents = implode('', file($loc)); } } else { if (file_exists($params[0])) { $fp = fopen($params[0], 'r'); if (!$fp) { return $this->raiseError('Cannot open "' . $params[0] . '"'); } } else { return $this->raiseError('Unknown channel "' . $channel . '"'); } $contents = ''; while (!feof($fp)) { $contents .= fread($fp, 1024); } fclose($fp); } if (!class_exists('PEAR_ChannelFile')) { require_once 'PEAR/ChannelFile.php'; } $chan = new PEAR_ChannelFile(); $chan->fromXmlString($contents); $chan->validate(); if ($errs = $chan->getErrors(true)) { foreach ($errs as $err) { $this->ui->outputData($err['level'] . ': ' . $err['message']); } return $this->raiseError('Channel file "' . $params[0] . '" is not valid'); } } if ($chan) { $channel = $chan->getName(); $caption = 'Channel ' . $channel . ' Information:'; $data1 = array('caption' => $caption, 'border' => true); $data1['data']['server'] = array('Name and Server', $chan->getName()); if ($chan->getAlias() != $chan->getName()) { $data1['data']['alias'] = array('Alias', $chan->getAlias()); } $data1['data']['summary'] = array('Summary', $chan->getSummary()); $validate = $chan->getValidationPackage(); $data1['data']['vpackage'] = array('Validation Package Name', $validate['_content']); $data1['data']['vpackageversion'] = array('Validation Package Version', $validate['attribs']['version']); $d = array(); $d['main'] = $data1; $data['data'] = array(); $data['caption'] = 'Server Capabilities'; $data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base'); $capabilities = $chan->getFunctions('xmlrpc'); $soaps = $chan->getFunctions('soap'); if ($capabilities || $soaps || $chan->supportsREST()) { if ($capabilities) { if (!isset($capabilities[0])) { $capabilities = array($capabilities); } foreach ($capabilities as $protocol) { $data['data'][] = array('xmlrpc', $protocol['attribs']['version'], $protocol['_content']); } } if ($soaps) { if (!isset($soaps[0])) { $soaps = array($soaps); } foreach ($soaps as $protocol) { $data['data'][] = array('soap', $protocol['attribs']['version'], $protocol['_content']); } } if ($chan->supportsREST()) { $funcs = $chan->getFunctions('rest'); if (!isset($funcs[0])) { $funcs = array($funcs); } foreach ($funcs as $protocol) { $data['data'][] = array('rest', $protocol['attribs']['type'], $protocol['_content']); } } } else { $data['data'][] = array('No supported protocols'); } $d['protocols'] = $data; $data['data'] = array(); $mirrors = $chan->getMirrors(); if ($mirrors) { $data['caption'] = 'Channel ' . $channel . ' Mirrors:'; unset($data['headline']); foreach ($mirrors as $mirror) { $data['data'][] = array($mirror['attribs']['host']); $d['mirrors'] = $data; } foreach ($mirrors as $i => $mirror) { $data['data'] = array(); $data['caption'] = 'Mirror ' . $mirror['attribs']['host'] . ' Capabilities'; $data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base'); $capabilities = $chan->getFunctions('xmlrpc', $mirror['attribs']['host']); $soaps = $chan->getFunctions('soap', $mirror['attribs']['host']); if ($capabilities || $soaps || $chan->supportsREST($mirror['attribs']['host'])) { if ($capabilities) { if (!isset($capabilities[0])) { $capabilities = array($capabilities); } foreach ($capabilities as $protocol) { $data['data'][] = array('xmlrpc', $protocol['attribs']['version'], $protocol['_content']); } } if ($soaps) { if (!isset($soaps[0])) { $soaps = array($soaps); } foreach ($soaps as $protocol) { $data['data'][] = array('soap', $protocol['attribs']['version'], $protocol['_content']); } } if ($chan->supportsREST($mirror['attribs']['host'])) { $funcs = $chan->getFunctions('rest', $mirror['attribs']['host']); if (!isset($funcs[0])) { $funcs = array($funcs); } foreach ($funcs as $protocol) { $data['data'][] = array('rest', $protocol['attribs']['type'], $protocol['_content']); } } } else { $data['data'][] = array('No supported protocols'); } $d['mirrorprotocols' . $i] = $data; } } $this->ui->outputData($d, 'channel-info'); } else { return $this->raiseError('Serious error: Channel "' . $params[0] . '" has a corrupted registry entry'); } }