]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-php/TokenCountry.php
Merge pull request #3169 from lonvia/tweak-search-with-frequent-names
[nominatim.git] / lib-php / TokenCountry.php
index 917ed9d25867d55834003aaf3e53720155ec0ed7..3f93f45e0fe8e5ef18ca990bcf007492e2a45370 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;
 
@@ -23,6 +31,24 @@ class Country
         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->hasCountry()
+               && $oPosition->maybePhrase('country')
+               && $oSearch->getContext()->isCountryApplicable($this->sCountryCode);
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -34,10 +60,6 @@ class Country
      */
     public function extendSearch($oSearch, $oPosition)
     {
-        if ($oSearch->hasCountry() || !$oPosition->maybePhrase('country')) {
-            return array();
-        }
-
         $oNewSearch = $oSearch->clone($oPosition->isLastToken() ? 1 : 6);
         $oNewSearch->setCountry($this->sCountryCode);