iId = $iID; $this->sClass = $sClass; $this->sType = $sType; $this->iOperator = $iOperator; } public function getId() { 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->hasOperator() && $oPosition->isPhrase('') && ($this->iOperator != \Nominatim\Operator::NONE || (!$oSearch->hasAddress() && !$oSearch->hasHousenumber() && !$oSearch->hasCountry())); } /** * 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 SearchDescription[] List of derived search descriptions. */ public function extendSearch($oSearch, $oPosition) { $iSearchCost = 0; $iOp = $this->iOperator; if ($iOp == \Nominatim\Operator::NONE) { if ($oPosition->isFirstToken() || $oSearch->hasName() || $oSearch->getContext()->isBoundedSearch() ) { $iOp = \Nominatim\Operator::NAME; $iSearchCost += 3; } else { $iOp = \Nominatim\Operator::NEAR; $iSearchCost += 4; if (!$oPosition->isFirstToken()) { $iSearchCost += 3; } } } elseif ($oPosition->isFirstToken()) { $iSearchCost += 2; } elseif ($oPosition->isLastToken()) { $iSearchCost += 4; } else { $iSearchCost += 6; } if ($oSearch->hasHousenumber()) { $iSearchCost ++; } $oNewSearch = $oSearch->clone($iSearchCost); $oNewSearch->setPoiSearch($iOp, $this->sClass, $this->sType); return array($oNewSearch); } public function debugInfo() { return array( 'ID' => $this->iId, 'Type' => 'special term', 'Info' => array( 'class' => $this->sClass, 'type' => $this->sType, 'operator' => \Nominatim\Operator::toString($this->iOperator) ) ); } public function debugCode() { return 'S'; } }