]> git.openstreetmap.org Git - nominatim.git/blob - lib-php/TokenCountry.php
factor out check if a token fits current search
[nominatim.git] / lib-php / TokenCountry.php
1 <?php
2
3 namespace Nominatim\Token;
4
5 /**
6  * A country token.
7  */
8 class Country
9 {
10     /// Database word id, if available.
11     private $iId;
12     /// Two-letter country code (lower-cased).
13     private $sCountryCode;
14
15     public function __construct($iId, $sCountryCode)
16     {
17         $this->iId = $iId;
18         $this->sCountryCode = $sCountryCode;
19     }
20
21     public function getId()
22     {
23         return $this->iId;
24     }
25
26     /**
27      * Check if the token can be added to the given search.
28      * Derive new searches by adding this token to an existing search.
29      *
30      * @param object  $oSearch      Partial search description derived so far.
31      * @param object  $oPosition    Description of the token position within
32                                     the query.
33      *
34      * @return True if the token is compatible with the search configuration
35      *         given the position.
36      */
37     public function isExtendable($oSearch, $oPosition)
38     {
39         return !$oSearch->hasCountry() && $oPosition->maybePhrase('country');
40     }
41
42     /**
43      * Derive new searches by adding this token to an existing search.
44      *
45      * @param object  $oSearch      Partial search description derived so far.
46      * @param object  $oPosition    Description of the token position within
47                                     the query.
48      *
49      * @return SearchDescription[] List of derived search descriptions.
50      */
51     public function extendSearch($oSearch, $oPosition)
52     {
53         $oNewSearch = $oSearch->clone($oPosition->isLastToken() ? 1 : 6);
54         $oNewSearch->setCountry($this->sCountryCode);
55
56         return array($oNewSearch);
57     }
58
59     public function debugInfo()
60     {
61         return array(
62                 'ID' => $this->iId,
63                 'Type' => 'country',
64                 'Info' => $this->sCountryCode
65                );
66     }
67
68     public function debugCode()
69     {
70         return 'C';
71     }
72 }