address_suggestion-1.0.3/src/Plugin/AddressProvider/TomTom.php
src/Plugin/AddressProvider/TomTom.php
<?php
namespace Drupal\address_suggestion\Plugin\AddressProvider;
use Drupal\address_suggestion\AddressProviderBase;
use Drupal\Component\Serialization\Json;
/**
* Defines a Tomtom plugin for address_suggestion.
*
* @package Drupal\address_suggestion\Plugin\AddressProvider
*
* @AddressProvider(
* id = "tomtom",
* label = @Translation("Tomtom api"),
* api = "https://api.tomtom.com/search/2/geocode/"
* )
*/
class TomTom extends AddressProviderBase {
/**
* {@inheritDoc}
*/
public function processQuery($string, $settings) {
$results = [];
$url = !empty($settings['endpoint']) ? $settings['endpoint'] : $settings['api'];
if (empty($string) && empty($settings['api_key'])) {
return $results;
}
$query = [
'key' => $settings['api_key'],
];
if (!empty($settings['countryName'])) {
$string .= ' ' . $settings['countryName'];
}
if (!empty($settings['country'])) {
$country = $settings['country'];
}
$url .= $string . '.json';
$response = $this->client->request('GET', $url, [
'query' => $query,
]);
$content = Json::decode($response->getBody());
if (empty($content["results"])) {
return $results;
}
if (!empty($content['results'])) {
// Some country have format Street number street name.
$countryFormatSpecial = ['FR', 'CA', 'IE', 'IN', 'IL', 'HK', 'MY', 'OM',
'NZ', 'PH', 'SA', 'SE', 'SG', 'LK', 'TH', 'UK', 'US', 'VN',
];
foreach ($content["results"] as $key => $result) {
if (empty($component = $result['address'])) {
continue;
}
$results[$key]["street_name"] = $component["streetName"] ?? '';
$streetNumber = $component['streetNumber'] ?? '';
if (!empty($streetNumber) && !empty($component['streetName'])) {
if (!empty($country) && in_array($country, $countryFormatSpecial)) {
$results[$key]['street_name'] = $streetNumber . ' ' . $component['streetName'];
}
else {
$results[$key]['street_name'] = $component['streetName'] . ', ' . $streetNumber;
}
}
$results[$key]["town_name"] = $component["localName"] ?? '';
$results[$key]["administrative_area"] = $component["countrySecondarySubdivision"] ?? '';
$results[$key]["zip_code"] = $component["postalCode"] ?? '';
$results[$key]["value"] = $results[$key]["label"] = $component["freeformAddress"] ?? '';
if (!empty($result['position'])) {
$results[$key]['location'] = [
'longitude' => $result['position']['lon'],
'latitude' => $result['position']['lat'],
];
}
$results[$key]['country_code'] = $component["countryCode"] ?? $settings['country'];
}
}
return $results;
}
}
