X-Git-Url: https://dev.renevier.net/?a=blobdiff_plain;ds=sidebyside;f=application%2Fcontrollers%2FGeomController.php;h=1a860b66c968e4eaeb9805037a1698ea1237f63a;hb=482c3abbceb9818ee12c355c5d96d15077c04736;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; // <-- vim syntax goes crazy
+ $data .= '';
+ $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; // <-- vim syntax goes crazy
+ $data .= '';
+ $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);
+ }
+
}