]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-php/TokenPostcode.php
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / lib-php / TokenPostcode.php
index 563fe7faa36b9f94ad3d83b81db5a973d26cae6d..f0dbd4571676ac59b0030b91a5bd9700ad9b3860 100644 (file)
@@ -1,4 +1,12 @@
 <?php
+/**
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * This file is part of Nominatim. (https://nominatim.org)
+ *
+ * Copyright (C) 2022 by the Nominatim developer community.
+ * For a full list of authors see the git log.
+ */
 
 namespace Nominatim\Token;
 
@@ -9,7 +17,7 @@ class Postcode
 {
     /// Database word id, if available.
     private $iId;
-    /// Full nomralized postcode (upper cased).
+    /// Full normalized postcode (upper cased).
     private $sPostcode;
     // Optional country code the postcode belongs to (currently unused).
     private $sCountryCode;
@@ -26,6 +34,22 @@ class Postcode
         return $this->iId;
     }
 
+    /**
+     * Check if the token can be added to the given search.
+     * Derive new searches by adding this token to an existing search.
+     *
+     * @param object  $oSearch      Partial search description derived so far.
+     * @param object  $oPosition    Description of the token position within
+                                    the query.
+     *
+     * @return True if the token is compatible with the search configuration
+     *         given the position.
+     */
+    public function isExtendable($oSearch, $oPosition)
+    {
+        return !$oSearch->hasPostcode() && $oPosition->maybePhrase('postalcode');
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -39,10 +63,6 @@ class Postcode
     {
         $aNewSearches = array();
 
-        if ($oSearch->hasPostcode() || !$oPosition->maybePhrase('postalcode')) {
-            return $aNewSearches;
-        }
-
         // If we have structured search or this is the first term,
         // make the postcode the primary search element.
         if ($oSearch->hasOperator(\Nominatim\Operator::NONE) && $oPosition->isFirstToken()) {