<?php
require_once 'globals.inc';
require_once 'api/api_functions.php';
if (isset($func) && !empty($func)) {
if (!in_array($func, array_keys($api))) {
echo "Unknown function";
exit;
}
// include the appropriate function
require_once "{$api[$func]}";
require_once "api/util_convert.php";
// SQL query wrapper function
function sql() {/*{{{*/
if (!$_REQUEST['query']) {
echo "<b>ERROR: Missing parameters.</b>\n";
return false;
}
// allow only SELECT, SHOW or DESCRIBE queries
$allowed = "^(select|show|describe)";
if (!eregi($allowed, trim($_REQUEST['query']))) {
echo "<b>ERROR: Only 'SELECT', 'SHOW', or 'DESCRIBE' queries are allowed.</b>\n";
return false;
}
$result = sqlquery(MDB_DATA_DSN, $_REQUEST['query']);
if (is_object($result) && DB::isError($result)) {
echo "<b>ERROR ".$result->getCode().": ".$result->getMessage()."</b>\n";
return false;
}
$format = isset($_REQUEST['format']) ? strtolower($_REQUEST['format']) : "csv";
switch ($format) {
case "wddx" :
$out = wddx_serialize_value($result);
break;
case "serialize" :
$out = serialize($result);
break;
case "table" :
$out = toTable($result);
break;
case "csv" :
default :
$fields = array_keys($result[0]);
$out = toCSV($fields);
for ($i=0; $i < count($result); $i++) {
$out .= toCSV(array_values($result[$i]));
}
break;
}
echo $out;
return true;
}/*}}}*/
// wrapper function to get PDB ids for a given metal
function metallopdb() {/*{{{*/
if (!$_REQUEST['metal']) {
echo "<b>ERROR: Missing parameters.</b>\n";
return false;
}
$metal = strtolower($_REQUEST['metal']);
$mode = isset($_REQUEST['mode']) ? strtolower($_REQUEST['mode']) : 'first';
$count = isset($_REQUEST['count']) ? intval($_REQUEST['count']) : 5;
$format = isset($_REQUEST['format']) ? strtolower($_REQUEST['format']) : 'csv';
$result = getPDBFromMetal($metal, $mode, $count);
if (is_object($result) && DB::isError($result)) {
echo "<b>ERROR ".$result->getCode().": ".$result->getMessage()."</b>\n";
return false;
}
if ($result == false) {
echo "";
return false;
}
switch ($format) {
case "wddx" :
header("Content-type: text/xml");
echo wddx_serialize_value($result);
break;
case "serialize" :
header("Content-type: text/plain");
echo serialize($result);
break;
case "rss" :
header("Content-type: text/xml");
echo toRSS($result,$GLOBALS['server_remote']);
break;
case "csv" :
default :
header("Content-type: text/plain");
$fields = array_keys($result[0]);
$out = toCSV($fields);
for ($i=0; $i < count($result); $i++) {
$out .= toCSV(array_values($result[$i]));
}
echo $out;
break;
}
return true;
}/*}}}*/
// execute the api wrapper function
$output = $func();
} else {
// show introspection
require_once "general.lib";
function get_content_ts() {/*{{{*/
return -1;
}/*}}}*/
function get_content() {/*{{{*/
$content = lib_content("__default");
$content['name'] = $_SERVER['PHP_SELF'];
$content['title'] = 'MDB - Web API (introspection)';
$content['page_title'] = 'MDB - Web API (introspection)';
$apidesc = "<div align='center'>\n";
$apidesc .= "<table width='90%' border='0' cellpadding='5'>\n";
foreach ($GLOBALS['apidoc'] as $func=>$doc) {
if ($func == "get")
continue;
$apidesc .= "<tr><td>\n";
$apidesc .= "<table border='0' width='100%' cellpadding='0' cellspacing='0'>\n";
$apidesc .= "<tr><td bgcolor='#000000'>\n";
$apidesc .= "<table border='0' width='100%' cellspacing='1' cellpadding='5'>\n";
$apidesc .= "<tr bgcolor='#eeeeee'>\n";
$apidesc .= "<th align='center'><i>Function</i>:<br /> $func</th>\n";
$apidesc .= "<th align='left'>\n<i>Parameters</i>:<ul>\n";
foreach ($GLOBALS['apiparams'][$func] as $param=>$desc)
$apidesc .= "<li>$param: $desc</li>\n";
$apidesc .= "</ul>\n</th>\n";
$apidesc .= "</tr>\n<tr bgcolor='#ddffff'>\n<td colspan='2'>";
$apidesc .= "<p><b>Description:</b><br />";
$apidesc .= htmlspecialchars($doc)."</p>\n</td>\n</tr>\n";
$apidesc .= "</table>\n</td></tr></table>\n</td></tr>\n";
}
$apidesc .= "</table></div>\n";
$content['body'] = $apidesc;
$content['timestamp'] = -1;
$content['page_img'] = 'MDB Web API:/images/api.png:/services/api/index.php';
return $content;
}/*}}}*/
require_once "dochandler.lib";
}
?>