View source
<?php
namespace Drupal\geocoder;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Config\ConfigFactoryInterface;
class Geocoder implements GeocoderInterface {
protected $config;
protected $providerPluginManager;
public function __construct(ConfigFactoryInterface $config_factory, ProviderPluginManager $provider_plugin_manager) {
$this->config = $config_factory
->get('geocoder.settings');
$this->providerPluginManager = $provider_plugin_manager;
}
public function geocode($data, array $plugins, array $options = []) {
$plugins_options = $this->config
->get('plugins_options') ?: [];
$plugins_options = NestedArray::mergeDeep($plugins_options, $options);
foreach ($plugins as $plugin_id) {
$plugins_options += [
$plugin_id => [],
];
try {
$provider = $this->providerPluginManager
->createInstance($plugin_id, $plugins_options[$plugin_id]);
return $provider
->geocode($data);
} catch (\Exception $e) {
static::log($e
->getMessage());
}
}
return FALSE;
}
public function reverse($latitude, $longitude, array $plugins, array $options = []) {
$plugins_options = $this->config
->get('plugins_options');
$plugins_options = NestedArray::mergeDeep($plugins_options, $options);
foreach ($plugins as $plugin_id) {
$plugins_options += [
$plugin_id => [],
];
try {
$provider = $this->providerPluginManager
->createInstance($plugin_id, $plugins_options[$plugin_id]);
return $provider
->reverse($latitude, $longitude);
} catch (\Exception $e) {
static::log($e
->getMessage());
}
}
return FALSE;
}
public static function log($message) {
\Drupal::logger('geocoder')
->warning($message);
}
}