public function put() { if (parent::put() != false) { try { $xml = new SimpleXMLElement($this->getData()); } catch (Exception $e) { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; return false; } $xmli = $xml->xpath('//appdb:request'); if (count($xmli) === 0) { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = "No request element provided"; return false; } $apiroutes = new SimpleXMLElement(APPLICATION_PATH . "/apiroutes.xml", 0, true); $ret = array(); foreach ($xmli as $x) { $routeXslt = null; $username = null; $userid = null; $passwd = null; $apikey = null; $sessionid = null; $src = null; $srv = null; $cid = null; if (trim($apikey) == '') { $apikey = $this->getParam("apikey"); } $method = strval($x->attributes()->method); switch (strtolower($method)) { case "get": $method = RestMethodEnum::RM_GET; break; case "put": $method = RestMethodEnum::RM_PUT; break; case "post": $method = RestMethodEnum::RM_POST; break; case "delete": $method = RestMethodEnum::RM_DELETE; break; case "options": $method = RestMethodEnum::RM_OPTIONS; break; default: $method = false; break; } if ($method === false) { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = "Invalid value in request `method' attribute"; return false; } $reqID = strval($x->attributes()->id); if ($reqID == "") { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = "Missing request `id' attribute"; return false; } $username = strval($x->attributes()->username); if (trim($username) == '') { $username = $this->getParam("username"); } $userid = strval($x->attributes()->userid); if (trim($userid) == '') { $userid = $this->getParam("userid"); } $passwd = strval($x->attributes()->passwd); if (trim($passwd) == '') { $passwd = $this->getParam("passwd"); } $apikey = strval($x->attributes()->apikey); if (trim($apikey) == '') { $apikey = $this->getParam("apikey"); } $sessionid = $this->getParam("sessionid"); $src = $this->getParam("src"); $cid = $this->getParam("cid"); $srv = $this->getParam("remoteaddr"); $res = strval($x->attributes()->resource); if ($res != '') { if (substr($res, 0, 1) == "/") { $res = substr($res, 1); } $pars = array(); $rx = RestBroker::matchResource($res, $apiroutes, $pars); if (!is_null($rx)) { try { $resclass = strval($rx->resource); if ($username != '') { $pars["username"] = $username; } if ($userid != '') { $pars["userid"] = $userid; } if ($passwd != '') { $pars["passwd"] = $passwd; } if ($apikey != '') { $pars["apikey"] = $apikey; } if ($sessionid != '') { $pars["sessionid"] = $sessionid; } if ($src != '') { $pars["src"] = $src; } if ($cid != '') { $pars["cid"] = $cid; } if ($srv != '') { $pars["remoteaddr"] = $srv; } $xparams = $x->xpath("appdb:param"); foreach ($xparams as $xparam) { $pname = strval($xparam->attributes()->name); if ($pname != '') { $pars[$pname] = strval($xparam); } else { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = "Missing `name' attribute in `param' element for request `" . $reqID . "'"; return false; } } $res = new $resclass($pars); $fmt = $rx->xpath("format"); if (count($fmt) > 0) { foreach ($fmt as $f) { if (strval($f) === "xml") { if (strval($f->attributes()->xslt) != '') { $routeXslt = strval($f->attributes()->xslt); } break; } } } } catch (Exception $e) { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = "Error initializing resource specified for request `" . $reqID . "'"; return false; } } else { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = "Invalid resource specified for request `" . $reqID . "'"; return false; } } else { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = "No resource of empty resource specified for request `" . $reqID . "'"; return false; } $s_method = strtolower(RestMethodEnum::toString($method)); $_res = $res->{$s_method}(); if ($_res !== false) { if ($_res->isFragment()) { $res = $_res->finalize(); } else { $res = $_res; } } else { $this->_error = $res->_error; $this->_extError = $res->_extError; return false; } if (!is_null($routeXslt)) { $res = $res->transform(RestAPIHelper::getFolder(RestFolderEnum::FE_XSL_FOLDER) . $routeXslt); } $ret[] = '<appdb:reply id="' . $reqID . '">' . "\n" . $res . "\n" . '</appdb:reply>'; } $ret = new XMLRestResponse($ret, $this); $ret = '<appdb:broker ' . implode(" ", RestAPIHelper::namespaces()) . ' ' . '>' . "\n" . $ret . "\n" . '</appdb:broker>'; return new XMLRestResponse($ret, $this); } else { return false; } }
public static function responseHead($datatype, $type = null, $count = null, $pageLength = null, $pageOffset = null, $error = null, $exterror = null, $reqTime = null) { $resTime = microtime(true); if (is_null($type)) { $type = "entry"; } db()->setFetchMode(Zend_Db::FETCH_NUM); try { $cacheState = db()->query("SELECT data FROM config WHERE var = 'cache_build_count';")->fetchAll(); $cacheState = $cacheState[0]; $cacheState = $cacheState[0]; } catch (Exception $e) { /*do nothing*/ } try { $permsState = db()->query("SELECT data FROM config WHERE var = 'permissions_cache_dirty';")->fetchAll(); $permsState = $permsState[0]; $permsState = $permsState[0]; } catch (Exception $e) { /*do nothing*/ } return '<appdb:appdb ' . implode(" ", RestAPIHelper::namespaces()) . ' ' . 'datatype="' . $datatype . '" ' . 'type="' . $type . '" ' . ($type === "list" ? 'count="' . ($count === null ? 0 : $count) . '" ' : '') . ($type === "list" && !is_null($pageLength) ? 'pagelength="' . $pageLength . '" ' : '') . ($type === "list" && !is_null($pageOffset) ? 'pageoffset="' . $pageOffset . '" ' : '') . ($error != "" ? 'error="' . RestErrorEnum::toString($error) . '" ' : '') . ($error != "" ? 'errornum="' . $error . '" ' : '') . ($exterror != "" ? 'errordesc="' . htmlentities($exterror, ENT_QUOTES | ENT_XML1 | ENT_DISALLOWED, "UTF-8") . '" ' : '') . 'host="' . $_SERVER['APPLICATION_UI_HOSTNAME'] . '" ' . 'apihost="' . $_SERVER['APPLICATION_API_HOSTNAME'] . '" ' . 'cacheState="' . $cacheState . '" ' . 'permsState="' . $permsState . '" ' . 'requestedOn="' . sprintf("%.3f", $reqTime) . '" ' . 'deliveredOn="' . sprintf("%.3f", $resTime) . '" ' . 'processingTime="' . sprintf("%.3f", $resTime - $reqTime) . '" ' . 'version="' . RestAPIHelper::VERSION . '" >'; }