diff --git a/geoapi/api/Api.php b/geoapi/api/Api.php index 0bb32b1..9e02459 100644 --- a/geoapi/api/Api.php +++ b/geoapi/api/Api.php @@ -23,15 +23,18 @@ abstract class Api extends \Slim\Slim { /** * Default-Constructor */ - public function __construct() { + public function __construct() { $this->connect(); parent::__construct(); + $this->contentType("Content-type: application/xml;charset=utf-8"); } /** * Default-DeConstructor */ public function __destruct() { + $this->sqlManager->closeConnection(); + unset($this->sqlManager); $this->sqlManager = null; } diff --git a/geoapi/api/PisApi.php b/geoapi/api/PisApi.php new file mode 100644 index 0000000..085bbcd --- /dev/null +++ b/geoapi/api/PisApi.php @@ -0,0 +1,74 @@ +sqlManager = new \database\PisSqlManager(); + parent::__construct(); + } + + /** + * Default-DeConstructor + */ + public function __destruct() { + parent::__destruct(); + } + + /** + * Method start a pis-query + * @param array $queryArgs + * @return query result as xml + */ + public function sendPisQuery($queryArgs) { + $pidList = $this->removeEmptyItmes($queryArgs); + if (count($pidList) < $this->maxPid) { + $result = $this->sqlManager->sendPisQuery($pidList); + return \utiliy\XmlManager::arrayToPisXml($result); + } + return NULL; + } + + /** + * Method remove all empty string + * @param array $queryArgs + * @return array + */ + private function removeEmptyItmes($queryArgs) { + foreach ($queryArgs as $key => $value) { + if (empty($value)) { + unset($queryArgs[$key]); + } + } + return $queryArgs; + } + +} + +?> diff --git a/geoapi/api/SpsApi.php b/geoapi/api/SpsApi.php index 0a8fb94..0cf23de 100644 --- a/geoapi/api/SpsApi.php +++ b/geoapi/api/SpsApi.php @@ -14,6 +14,30 @@ require_once PATH_API . "/Api.php"; */ class SpsApi extends Api { + /** + * Route string for the alias paramter + * @var string + */ + public static $routeParameterAlias = "/alias/:alias"; + + /** + * Route string for the alias paramter + * @var string + */ + public static $routeParameterDomain = "/domain/:domain"; + + /** + * Route string for the Longitude paramter + * @var string + */ + public static $routeParameterLongitude= "/longitude/:longitude"; + + /** + * Route string for the latitude paramter + * @var string + */ + public static $routeParameterLatitude = "/latitude/:latitude"; + /** * Keyword for alias arguments * @var string @@ -73,8 +97,8 @@ class SpsApi extends Api { * @var float */ private $minLat = -180; - - /** + + /** * maximum value of longitude * @var float */ @@ -107,7 +131,7 @@ class SpsApi extends Api { * @param array $queryArgs * @return querry result as xml */ - public function sendSpsAliasQuery($queryArgs = array()) { + public function sendSpsAliasQuery($queryArgs) { $result = $this->sqlManager->sendSpsAliasQuery($queryArgs); return \utiliy\XmlManager::arrayToSpsXml($result); } @@ -117,7 +141,7 @@ class SpsApi extends Api { * @param array $queryArgs * @return querry result as xml */ - public function sendSpsCoordinateQuery($queryArgs = array()) { + public function sendSpsCoordinateQuery($queryArgs) { if (!array_key_exists(SpsApi::$keyLong, $queryArgs) || !array_key_exists(SpsApi::$keyLat, $queryArgs)) { return null; } diff --git a/geoapi/database/PisSqlManager.php b/geoapi/database/PisSqlManager.php new file mode 100644 index 0000000..4ff6a58 --- /dev/null +++ b/geoapi/database/PisSqlManager.php @@ -0,0 +1,116 @@ +selectTerm; + if ($this->validPidList($queryArgs)) { + $query .= $this->createPidWhereString($queryArgs) . $this->orderByTerm; + } else { + return null; + } + // send query + return $this->query($query); + } + + /** + * Method check if all items of the pidlist are orly digits + * @param array $poly + * @return boolean + */ + private function validPidList($pidList) { + foreach ($pidList as $value) { + + if (!ctype_digit($value) || PHP_INT_MAX < $value) { + return FALSE; + } + } + return TRUE; + } + + /** + * Method convert a pidList to a where-string + * @param array $pidList + * @return string + */ + private function createPidWhereString($pidList) { + $pidListStr = \utiliy\StringManager::$emptyString; + foreach ($pidList as $value) { + $pidListStr .= $this->pidTerm . $value . $this->orTerm; + } + $result = substr($pidListStr, 0, strlen($pidListStr) - strlen($this->orTerm)); + return $result; + } + +} + +?> diff --git a/geoapi/database/SpsSqlManager.php b/geoapi/database/SpsSqlManager.php index 1019aa3..83845ea 100644 --- a/geoapi/database/SpsSqlManager.php +++ b/geoapi/database/SpsSqlManager.php @@ -105,7 +105,7 @@ class SpsSqlManager extends SQLManager { * @param array $queryArgs * @return array [num][assoc] */ - public function sendSpsAliasQuery($queryArgs = array()) { + public function sendSpsAliasQuery($queryArgs) { // check arguments of the query if (array_key_exists(\api\SpsApi::$keyAlias, $queryArgs)) { @@ -136,7 +136,7 @@ class SpsSqlManager extends SQLManager { * @param array $queryArgs * @return array [num][assoc] */ - public function sendSpsCoordinateQuery($queryArgs = array()) { + public function sendSpsCoordinateQuery($queryArgs) { // check arguments of the query if (array_key_exists(\api\SpsApi::$keyPoly, $queryArgs)) { diff --git a/geoapi/database/SqlManager.php b/geoapi/database/SqlManager.php index a1716b0..2c10710 100644 --- a/geoapi/database/SqlManager.php +++ b/geoapi/database/SqlManager.php @@ -43,11 +43,17 @@ abstract class SqlManager { private $link; /** - * String for a and operrator + * String for an and-operrator * @var string */ protected $andTerm = " and "; + /** + * String for an or-operrator + * @var string + */ + protected $orTerm = " or "; + /** * String for quotes in a query * @var string @@ -69,6 +75,10 @@ abstract class SqlManager { */ public function __destruct() { $this->closeConnection(); + unset($this->serverAddress); + unset($this->dbName); + unset($this->userName); + unset($this->userPW); $this->serverAddress = null; $this->dbName = null; $this->userName = null; @@ -95,6 +105,7 @@ abstract class SqlManager { public function closeConnection() { if ($this->link) { mysql_close($this->link); + unset($this->link); $this->link = null; } } diff --git a/geoapi/service/pis/.htaccess b/geoapi/service/pis/.htaccess new file mode 100644 index 0000000..450c0d1 --- /dev/null +++ b/geoapi/service/pis/.htaccess @@ -0,0 +1,2 @@ +RewriteEngine on +RewriteRule ^ index.php [QSA,L] \ No newline at end of file diff --git a/geoapi/service/pis/index.php b/geoapi/service/pis/index.php new file mode 100644 index 0000000..bed4a17 --- /dev/null +++ b/geoapi/service/pis/index.php @@ -0,0 +1,14 @@ +get(\api\PisApi::$routeParameterPids, function ($pid) use ($app) { + echo $app->sendPisQuery($pid); + }); + +$app->run(); +?> diff --git a/geoapi/service/sps/index.php b/geoapi/service/sps/index.php index 21c139f..8dddc5c 100644 --- a/geoapi/service/sps/index.php +++ b/geoapi/service/sps/index.php @@ -7,27 +7,28 @@ require_once PATH_API . "/SpsApi.php"; $app = new \api\SpsApi(); // declare the get-methods -$app->get('/alias/:alias', function ($alias) use ($app) { - $args = array(); - $args[\api\SpsApi::$keyAlias] = $alias; - echo $app->sendSpsAliasQuery($args); - }); - -$app->get('/alias/:alias/domain/:domain', function ($alias, $domain) use ($app) { +// declare the get-methods +$app->get(\api\SpsApi::$routeParameterAlias, function ($alias) use ($app) { $args = array(); $args[\api\SpsApi::$keyAlias] = $alias; - $args[\api\SpsApi::$keyDomain] = $domain; echo $app->sendSpsAliasQuery($args); }); -$app->get('/longitude/:longitude/latitude/:latitude', function ($longitude, $latitude) use ($app) { +$app->get(\api\SpsApi::$routeParameterAlias . \api\SpsApi::$routeParameterDomain, function ($alias, $domain) use ($app) { + $args = array(); + $args[\api\SpsApi::$keyAlias] = $alias; + $args[\api\SpsApi::$keyDomain] = $domain; + echo $app->sendSpsAliasQuery($args); + }); + +$app->get(\api\SpsApi::$routeParameterLongitude . \api\SpsApi::$routeParameterLatitude, function ($longitude, $latitude) use ($app) { $args = array(); $args[\api\SpsApi::$keyLong] = $longitude; $args[\api\SpsApi::$keyLat] = $latitude; echo ($app->sendSpsCoordinateQuery($args)); }); -$app->get('/longitude/:longitude/latitude/:latitude/domain/:domain', function ($longitude, $latitude, $domain) use ($app) { +$app->get(\api\SpsApi::$routeParameterLongitude . \api\SpsApi::$routeParameterLatitude . \api\SpsApi::$routeParameterDomain, function ($longitude, $latitude, $domain) use ($app) { $args = array(); $args[\api\SpsApi::$keyLong] = $longitude; $args[\api\SpsApi::$keyLat] = $latitude; diff --git a/geoapi/utility/StringManager.php b/geoapi/utility/StringManager.php index d83cdfe..4a3e75a 100644 --- a/geoapi/utility/StringManager.php +++ b/geoapi/utility/StringManager.php @@ -9,7 +9,14 @@ include_once "../../global.inc.php"; * @since 25.06.2013 */ class StringManager { - + + /** + * A Constant vor an emptystring like \"\" + * @var string + */ + public static $emptyString = ""; + + /** * Method check if a certain string start with a certain sustring * @param string $haystack diff --git a/geoapi/utility/XmlManager.php b/geoapi/utility/XmlManager.php index eca7472..1e6d84a 100644 --- a/geoapi/utility/XmlManager.php +++ b/geoapi/utility/XmlManager.php @@ -23,6 +23,24 @@ class XmlManager { */ public static $placeElementName = "place"; + /** + * Name for the placeinformation element + * @var string + */ + public static $placeInfoElementName = "placeInformation"; + + /** + * Name for the placeInfoName attribute + * @var string + */ + public static $placeInfoName = "placeInformationName"; + + /** + * Name for the place element + * @var string + */ + public static $placeInfoValue = "placeInformationValue"; + /** * Name for the placeid attribute * @var string @@ -51,6 +69,34 @@ class XmlManager { return $xml->asXML(); } + /** + * Method convert an array to a response xml for the sps service + * @param array[num][assoc] $result + * @return xml-string + */ + public static function arrayToPisXml($result = array()) { + $xml = new \SimpleXMLElement(XmlManager::$defaultXmlDoc); + $actPlace = 0; + + foreach ($result as $row) { + + // fetch the place id of the row + $placeId = $row[\database\PisSqlManager::$placeId]; + + // if the id is new -> add new place element + if ($actPlace != $placeId) { + $actPlace = $placeId; + $place = $xml->addChild(XmlManager::$placeElementName); + $place->addAttribute(XmlManager::$placeIdAttrName, $placeId); + } + + // add placeinformation elment + $placeInfo = $place->addChild(XmlManager::$placeInfoElementName, utf8_encode($row[\database\PisSqlManager::$infValue])); + $placeInfo->addAttribute(XmlManager::$placeInfoName, $row[\database\PisSqlManager::$infName]); + } + return $xml->asXML(); + } + } ?>