From e133476c355c07dd08a4203dd3f85e96c03105ff Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Thu, 17 Mar 2022 11:02:02 +0100 Subject: [PATCH] merge linked names correctly into namedetails Convert the '_place_*' entries back to normal entries before returning them in the 'namedetails' section. If the name field is duplicated, kept the '_place_*' notation. This preserves the previous behaviour before _place_ names were introduces but adds the additional names from the linked place for reference. --- lib-php/PlaceLookup.php | 35 ++++++++++++++++++++++++------- test/bdd/db/query/linking.feature | 12 +++++++---- test/bdd/steps/http_responses.py | 3 +++ 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/lib-php/PlaceLookup.php b/lib-php/PlaceLookup.php index 120f5543..715f1ced 100644 --- a/lib-php/PlaceLookup.php +++ b/lib-php/PlaceLookup.php @@ -452,11 +452,7 @@ class PlaceLookup } if ($this->bNameDetails) { - if ($aPlace['names']) { - $aPlace['sNameDetails'] = json_decode($aPlace['names']); - } else { - $aPlace['sNameDetails'] = (object) array(); - } + $aPlace['sNameDetails'] = $this->extractNames($aPlace['names']); } $aPlace['addresstype'] = ClassTypes\getLabelTag( @@ -479,6 +475,33 @@ class PlaceLookup return $aResults; } + + private function extractNames($sNames) + { + if (!$sNames) { + return (object) array(); + } + + $aFullNames = json_decode($sNames); + $aNames = array(); + + foreach ($aFullNames as $sKey => $sValue) { + if (strpos($sKey, '_place_') === 0) { + $sSubKey = substr($sKey, 7); + if (array_key_exists($sSubKey, $aFullNames)) { + $aNames[$sKey] = $sValue; + } else { + $aNames[$sSubKey] = $sValue; + } + } else { + $aNames[$sKey] = $sValue; + } + } + + return $aNames; + } + + /* returns an array which will contain the keys * aBoundingBox * and may also contain one or more of the keys @@ -489,8 +512,6 @@ class PlaceLookup * lat * lon */ - - public function getOutlines($iPlaceID, $fLon = null, $fLat = null, $fRadius = null, $fLonReverse = null, $fLatReverse = null) { diff --git a/test/bdd/db/query/linking.feature b/test/bdd/db/query/linking.feature index cf1fa20c..bd8e1da0 100644 --- a/test/bdd/db/query/linking.feature +++ b/test/bdd/db/query/linking.feature @@ -17,9 +17,11 @@ Feature: Searching linked places | object | linked_place_id | | N2 | R13 | When sending search query "Vario" + | namedetails | + | 1 | Then results contain - | osm | display_name | - | R13 | Garbo | + | osm | display_name | namedetails | + | R13 | Garbo | "name": "Garbo", "name:it": "Vario" | When sending search query "Vario" | accept-language | | it | @@ -43,9 +45,11 @@ Feature: Searching linked places | object | linked_place_id | | N2 | R13 | When sending search query "Vario" + | namedetails | + | 1 | Then results contain - | osm | display_name | - | R13 | Garbo | + | osm | display_name | namedetails | + | R13 | Garbo | "name": "Garbo", "_place_name": "Vario" | When sending search query "Garbo" Then results contain | osm | display_name | diff --git a/test/bdd/steps/http_responses.py b/test/bdd/steps/http_responses.py index 035838a5..3b9f59eb 100644 --- a/test/bdd/steps/http_responses.py +++ b/test/bdd/steps/http_responses.py @@ -102,6 +102,9 @@ class GenericResponse: elif value.startswith("^"): assert re.fullmatch(value, self.result[idx][field]), \ BadRowValueAssert(self, idx, field, value) + elif isinstance(self.result[idx][field], OrderedDict): + assert self.result[idx][field] == eval('{' + value + '}'), \ + BadRowValueAssert(self, idx, field, value) else: assert str(self.result[idx][field]) == str(value), \ BadRowValueAssert(self, idx, field, value) -- 2.39.5