X-Git-Url: https://dev.renevier.net/?a=blobdiff_plain;f=application%2Fcontrollers%2FGeomController.php;h=1a860b66c968e4eaeb9805037a1698ea1237f63a;hb=0fb09adccd5c3b305d56f1b267dbd3bf836fd17f;hp=70acf763e073aa8984d42561c83f0093175eb061;hpb=a64d41557a62ec6051d7fa08d1ba941e089aa5c2;p=syj.git diff --git a/application/controllers/GeomController.php b/application/controllers/GeomController.php index 70acf76..1a860b6 100644 --- a/application/controllers/GeomController.php +++ b/application/controllers/GeomController.php @@ -1,5 +1,5 @@ getResponse(); $idx = $request->idx; + $pathMapper = new Syj_Model_PathMapper(); $path = new Syj_Model_Path(); $api = $this->_helper->SyjApi; + $ext = ""; + $parts = explode('.', $idx); + if (count($parts) >= 2) { + $ext = end($parts); + if (in_array($ext, array('kml', 'gpx', 'json'))) { + $idx = implode('.', explode('.', $idx, -1)); + } else { + $ext = ""; + } + } + if (!$pathMapper->find($idx, $path)) { if ($pathMapper->hasexisted($idx)) { $api->setCode(410); @@ -24,12 +36,63 @@ class GeomController extends Zend_Controller_Action return; } - $data = array('geom' => (string)$path->geom, - 'title' => (string)$path->displayTitle); + switch ($ext) { + case 'kml': + $this->kml($path); + break; + case 'gpx': + $this->gpx($path); + break; + case 'json': + default: + $this->json($path); + return; + break; + } + } + + protected function kml(Syj_Model_Path $path) { + $data = '' . PHP_EOL; // '; + $data .= ''; if ($path->creator) { - $data['creator'] = (string)$path->creator->pseudo; + $data .= '' + . htmlspecialchars($path->creator->pseudo, ENT_COMPAT, "UTF-8") + . ''; } + $data .= '' . htmlspecialchars($path->displayTitle, ENT_COMPAT, "UTF-8") . ''; + $data .= $path->geom->toKML(); + $data .= ''; + $data .= ''; - $api->setCheckIfNoneMatch(true)->setBody(json_encode($data)); + $api = $this->_helper->SyjApi; + $api->setCheckIfNoneMatch(true)->setContentType('application/vnd.google-earth.kml+xml')->setBody($data); } + + protected function gpx(Syj_Model_Path $path) { + $data = '' . PHP_EOL; // '; + $data .= ''; + if ($path->creator) { + $data .= '' . htmlspecialchars($path->creator->pseudo, ENT_COMPAT, "UTF-8") . ''; + } + $data .= '' . htmlspecialchars($path->displayTitle, ENT_COMPAT, "UTF-8") . ''; + $data .= $path->geom->toGPX(); + $data .= ''; + $data .= ''; + + $api = $this->_helper->SyjApi; + $api->setCheckIfNoneMatch(true)->setContentType('application/octet-stream')->setBody($data); + } + + protected function json(Syj_Model_Path $path) { + $data = json_decode($path->geom->toGeoJSON()); + $data->title = (string)$path->displayTitle; + if ($path->creator) { + $data->creator = (string)$path->creator->pseudo; + } + $api = $this->_helper->SyjApi; + $api->setCheckIfNoneMatch(true)->setBodyJson($data); + } + }