diff --git a/lib/Geocode.php b/lib/Geocode.php index a7558bea..bd0f5b62 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -732,6 +732,8 @@ class Geocode // If the token is valid if (isset($aValidTokens[' '.$sToken])) { + // TODO variable should go into aCurrentSearch + $bHavePostcode = false; foreach ($aValidTokens[' '.$sToken] as $aSearchTerm) { $aSearch = $aCurrentSearch; $aSearch['iSearchRank']++; @@ -744,9 +746,9 @@ class Geocode } if ($aSearch['iSearchRank'] < $this->iMaxRank) $aNewWordsetSearches[] = $aSearch; } - } elseif ($sPhraseType == 'postalcode' || ($aSearchTerm['class'] == 'place' && $aSearchTerm['type'] == 'postcode')) { + } elseif (($sPhraseType == '' || $sPhraseType == 'postalcode') && $aSearchTerm['class'] == 'place' && $aSearchTerm['type'] == 'postcode') { // We need to try the case where the postal code is the primary element (i.e. no way to tell if it is (postalcode, city) OR (city, postalcode) so try both - if ($aSearch['sPostcode'] === '' && $aSearch['sHouseNumber'] === '' && + if (!$bHavePostcode && $aSearch['sPostcode'] === '' && $aSearch['sHouseNumber'] === '' && isset($aSearchTerm['word']) && $aSearchTerm['word'] && strpos($sNormQuery, $this->normTerm($aSearchTerm['word'])) !== false) { // If we have structured search or this is the first term, // make the postcode the primary search element. @@ -754,8 +756,9 @@ class Geocode $aNewSearch = $aSearch; $aNewSearch['sOperator'] = 'postcode'; $aNewSearch['aAddress'] = array_merge($aNewSearch['aAddress'], $aNewSearch['aName']); - $aNewSearch['aName'][$aSearchTerm['word_id']] = $aSearchTerm['word']; + $aNewSearch['aName'] = array($aSearchTerm['word_id'] => $aSearchTerm['word']); if ($aSearch['iSearchRank'] < $this->iMaxRank) $aNewWordsetSearches[] = $aNewSearch; + $bHavePostcode = true; } // If we have a structured search or this is not the first term,