From 09f16616388490578ddebdb1d8be5ae545cd1d64 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Thu, 23 Mar 2017 00:16:58 +0100 Subject: [PATCH] move moreURL computation into Geocode and include all params Fixes #678. --- lib/Geocode.php | 67 +++++++++++++++++------------- lib/template/search-html.php | 5 +-- lib/template/search-json.php | 2 +- lib/template/search-jsonv2.php | 2 +- lib/template/search-xml.php | 15 +++---- test/bdd/api/search/simple.feature | 6 +-- website/search.php | 20 ++++----- 7 files changed, 58 insertions(+), 59 deletions(-) diff --git a/lib/Geocode.php b/lib/Geocode.php index 58922035..971eb85d 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -67,19 +67,45 @@ class Geocode $this->aLangPrefOrder = $aLangPref; } - public function getIncludeAddressDetails() + public function getMoreUrlParams() { - return $this->bIncludeAddressDetails; - } + if ($this->aStructuredQuery) { + $aParams = $this->aStructuredQuery; + } else { + $aParams = array('q' => $this->sQuery); + } - public function getIncludeExtraTags() - { - return $this->bIncludeExtraTags; - } + if ($this->aExcludePlaceIDs) { + $aParams['exclude_place_ids'] = implode(',', $this->aExcludePlaceIDs); + } - public function getIncludeNameDetails() - { - return $this->bIncludeNameDetails; + if ($this->bIncludeAddressDetails) $aParams['addressdetails'] = '1'; + if ($this->bIncludeExtraTags) $aParams['extratags'] = '1'; + if ($this->bIncludeNameDetails) $aParams['namedetails'] = '1'; + + if ($this->bIncludePolygonAsPoints) $aParams['polygon'] = '1'; + if ($this->bIncludePolygonAsText) $aParams['polygon_text'] = '1'; + if ($this->bIncludePolygonAsGeoJSON) $aParams['polygon_geojson'] = '1'; + if ($this->bIncludePolygonAsKML) $aParams['polygon_kml'] = '1'; + if ($this->bIncludePolygonAsSVG) $aParams['polygon_svg'] = '1'; + + if ($this->fPolygonSimplificationThreshold > 0.0) { + $aParams['polygon_threshold'] = $this->fPolygonSimplificationThreshold; + } + + if ($this->bBoundedSearch) $aParams['bounded'] = '1'; + if (!$this->bDeDupe) $aParams['dedupe'] = '0'; + + if ($this->aCountryCodes) { + $aParams['countrycodes'] = implode(',', $this->aCountryCodes); + } + + if ($this->aViewBox) { + $aParams['viewbox'] = $this->aViewBox[0].','.$this->aViewBox[3] + .','.$this->aViewBox[2].','.$this->aViewBox[1]; + } + + return $aParams; } public function setIncludePolygonAsPoints($b = true) @@ -121,23 +147,6 @@ class Geocode $this->iLimit = $iLimit + min($iLimit, 10); } - public function getExcludedPlaceIDs() - { - return $this->aExcludePlaceIDs; - } - - - public function getCountryCodes() - { - return $this->aCountryCodes; - } - - public function getViewBoxString() - { - if (!$this->aViewBox) return null; - return $this->aViewBox[0].','.$this->aViewBox[3].','.$this->aViewBox[2].','.$this->aViewBox[1]; - } - public function setFeatureType($sFeatureType) { switch ($sFeatureType) { @@ -341,7 +350,7 @@ class Geocode return true; } - public function setStructuredQuery($sAmentiy = false, $sStreet = false, $sCity = false, $sCounty = false, $sState = false, $sCountry = false, $sPostalCode = false) + public function setStructuredQuery($sAmenity = false, $sStreet = false, $sCity = false, $sCounty = false, $sState = false, $sCountry = false, $sPostalCode = false) { $this->sQuery = false; @@ -353,7 +362,7 @@ class Geocode $this->aStructuredQuery = array(); $this->sAllowedTypesSQLList = ''; - $this->loadStructuredAddressElement($sAmentiy, 'amenity', 26, 30, false); + $this->loadStructuredAddressElement($sAmenity, 'amenity', 26, 30, false); $this->loadStructuredAddressElement($sStreet, 'street', 26, 30, false); $this->loadStructuredAddressElement($sCity, 'city', 14, 24, false); $this->loadStructuredAddressElement($sCounty, 'county', 9, 13, false); diff --git a/lib/template/search-html.php b/lib/template/search-html.php index 115f1813..37a6ce4a 100644 --- a/lib/template/search-html.php +++ b/lib/template/search-html.php @@ -17,12 +17,11 @@
- - +
- > + >
diff --git a/lib/template/search-json.php b/lib/template/search-json.php index ee2b4bd2..50009bc3 100644 --- a/lib/template/search-json.php +++ b/lib/template/search-json.php @@ -20,7 +20,7 @@ foreach($aSearchResults as $iResNum => $aPointDetails) { $aPlace['boundingbox'] = $aPointDetails['aBoundingBox']; - if (isset($aPointDetails['aPolyPoints']) && $bShowPolygons) + if (isset($aPointDetails['aPolyPoints'])) { $aPlace['polygonpoints'] = $aPointDetails['aPolyPoints']; } diff --git a/lib/template/search-jsonv2.php b/lib/template/search-jsonv2.php index 35538797..d550a7e6 100644 --- a/lib/template/search-jsonv2.php +++ b/lib/template/search-jsonv2.php @@ -19,7 +19,7 @@ foreach($aSearchResults as $iResNum => $aPointDetails) { $aPlace['boundingbox'] = $aPointDetails['aBoundingBox']; - if (isset($aPointDetails['aPolyPoints']) && $bShowPolygons) + if (isset($aPointDetails['aPolyPoints'])) { $aPlace['polygonpoints'] = $aPointDetails['aPolyPoints']; } diff --git a/lib/template/search-xml.php b/lib/template/search-xml.php index 80091b0a..80414fce 100644 --- a/lib/template/search-xml.php +++ b/lib/template/search-xml.php @@ -10,16 +10,13 @@ echo (isset($sXmlRootTag)?$sXmlRootTag:'searchresults'); echo " timestamp='".date(DATE_RFC822)."'"; echo " attribution='Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright'"; echo " querystring='".htmlspecialchars($sQuery, ENT_QUOTES)."'"; -if ($sViewBox) echo " viewbox='".htmlspecialchars($sViewBox, ENT_QUOTES)."'"; -echo " polygon='".($bShowPolygons?'true':'false')."'"; -if (sizeof($aExcludePlaceIDs)) +if (isset($aMoreParams['viewbox'])) echo " viewbox='".htmlspecialchars($aMoreParams['viewbox'], ENT_QUOTES)."'"; +echo " polygon='".(isset($aMoreParams['polygon'])?'true':'false')."'"; +if (isset($aMoreParams['exclude_place_ids'])) { - echo " exclude_place_ids='".htmlspecialchars(join(',',$aExcludePlaceIDs))."'"; -} -if ($sMoreURL) -{ - echo " more_url='".htmlspecialchars($sMoreURL)."'"; + echo " exclude_place_ids='".htmlspecialchars($aMoreParams['exclude_place_ids'])."'"; } +echo " more_url='".htmlspecialchars($sMoreURL)."'"; echo ">\n"; foreach($aSearchResults as $iResNum => $aResult) @@ -39,7 +36,7 @@ foreach($aSearchResults as $iResNum => $aResult) echo join(',',$aResult['aBoundingBox']); echo '"'; - if ($bShowPolygons && isset($aResult['aPolyPoints'])) + if (isset($aResult['aPolyPoints'])) { echo ' polygonpoints=\''; echo json_encode($aResult['aPolyPoints']); diff --git a/test/bdd/api/search/simple.feature b/test/bdd/api/search/simple.feature index b986d8a7..aa8c8ce8 100644 --- a/test/bdd/api/search/simple.feature +++ b/test/bdd/api/search/simple.feature @@ -89,7 +89,7 @@ Feature: Simple Tests | attr | value | | querystring | xnznxvcx | | polygon | false | - | more_url | .*format=xml.*q=xnznxvcx.* | + | more_url | .*q=xnznxvcx.*format=xml | Scenario: Empty XML search with special XML characters When sending xml search query "xfdghn&zxn"xvbyxcssdex" @@ -97,7 +97,7 @@ Feature: Simple Tests | attr | value | | querystring | xfdghn&zxn"xvbyxcssdex | | polygon | false | - | more_url | .*format=xml.*q=xfdghn%26zxn%22xvbyx%3Cvxx%3Ecssdex.* | + | more_url | .*q=xfdghn%26zxn%22xvbyx%3Cvxx%3Ecssdex.*format=xml | Scenario: Empty XML search with viewbox When sending xml search query "xnznxvcx" @@ -225,4 +225,4 @@ Feature: Simple Tests | pl,1,,invalid,undefined,%3Cb%3E,bo,, | Then result header contains | attr | value | - | more_url | .*&countrycodes=pl,bo&.* | + | more_url | .*&countrycodes=pl%2Cbo&.* | diff --git a/website/search.php b/website/search.php index a4dbd64a..4952465e 100755 --- a/website/search.php +++ b/website/search.php @@ -99,19 +99,13 @@ if ($sOutputFormat=='html') { logEnd($oDB, $hLog, sizeof($aSearchResults)); $sQuery = $oGeocode->getQueryString(); -$sViewBox = $oGeocode->getViewBoxString(); -$bShowPolygons = (isset($_GET['polygon']) && $_GET['polygon']); -$aExcludePlaceIDs = $oGeocode->getExcludedPlaceIDs(); - -$sMoreURL = CONST_Website_BaseURL.'search.php?format='.$sOutputFormat.'&exclude_place_ids='.join(',', $aExcludePlaceIDs); -if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) $sMoreURL .= '&accept-language='.$_SERVER["HTTP_ACCEPT_LANGUAGE"]; -if ($bShowPolygons) $sMoreURL .= '&polygon=1'; -if ($oGeocode->getIncludeAddressDetails()) $sMoreURL .= '&addressdetails=1'; -if ($oGeocode->getIncludeExtraTags()) $sMoreURL .= '&extratags=1'; -if ($oGeocode->getIncludeNameDetails()) $sMoreURL .= '&namedetails=1'; -if ($oGeocode->getCountryCodes()) $sMoreURL .= '&countrycodes='.join(',', $oGeocode->getCountryCodes()); -if ($sViewBox) $sMoreURL .= '&viewbox='.urlencode($sViewBox); -$sMoreURL .= '&q='.urlencode($sQuery); + +$aMoreParams = $oGeocode->getMoreUrlParams(); +if ($sOutputFormat != 'html') $aMoreParams['format'] = $sOutputFormat; +if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { + $aMoreParams['accept-language'] = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; +} +$sMoreURL = CONST_Website_BaseURL.'search.php?'.http_build_query($aMoreParams); if (CONST_Debug) exit; -- 2.39.5