address_suggestion-1.0.3/src/Plugin/AddressProvider/VNPost.php

src/Plugin/AddressProvider/VNPost.php
<?php

namespace Drupal\address_suggestion\Plugin\AddressProvider;

use Drupal\address_suggestion\AddressProviderBase;
use Drupal\Component\Serialization\Json;

/**
 * Defines a Vietnam post plugin for address_suggestion.
 *
 * @package Drupal\address_suggestion\Plugin\AddressProvider
 * @AddressProvider(
 *   id = "vnpost",
 *   label = @Translation("Vietnam post"),
 *   api = "https://maps.vnpost.vn/api/autocomplete",
 * )
 */
class VNPost extends AddressProviderBase {

  /**
   * {@inheritDoc}
   */
  public function processQuery($string, $settings) {
    $results = [];

    $token = $settings['api_key'];
    if (empty($string) && empty($token)) {
      return $results;
    }
    $url = !empty($settings['endpoint']) ? $settings['endpoint'] : $settings['api'];
    $size = !empty($settings['limit']) ? $settings['limit'] : 10;
    $query = [
      'apikey' => $token,
      'api-version' => '1.1',
      'layers' => 'address',
      'size' => $size,
      'text' => $string,
    ];
    $url .= '?' . http_build_query($query);
    $response = $this->client->request('GET', $url);
    $content = Json::decode($response->getBody());
    $subdivisions = \Drupal::service('address.subdivision_repository')
      ->getList(['VN'], 'vi');
    $province = array_flip($subdivisions);
    if (!empty($content['code']) && $content['code'] == 'OK') {
      foreach ($content['data']["features"] as $key => $feature) {
        $properties = $feature["properties"];
        $city = '';
        if (strpos($properties["region"], 'Hồ Chí Minh') === FALSE) {
          $city = str_replace(['Thành Phố '], '', $properties["region"]);
        }
        // Exception 'Hồ Chí Minh'.
        $results[$key]['street_name'] = $properties["label"] ?? '';
        $results[$key]['town_name'] = $properties["county"] ?? '';
        $results[$key]['district'] = $properties["locality"] ?? '';
        if (!empty($province[$city])) {
          $results[$key]['state'] = $province[$city];
        }
        $results[$key]['zip_code'] = $properties["postcode"] ?? '';
        $results[$key]['name'] = $properties["name"];
        $results[$key]["value"] = $results[$key]['label'] = $properties["label"];
        $results[$key]['location'] = [
          'longitude' => $feature["geometry"]["coordinates"][0],
          'latitude' => $feature["geometry"]["coordinates"][1],
        ];
        $results[$key]['country_code'] = $settings['country'] ?? 'VN';
      }
    }

    return $results;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc