ProviderUsingHandlerBase.php in Geocoder 8.3
File
src/ProviderUsingHandlerBase.php
View source
<?php
namespace Drupal\geocoder;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\Core\Language\LanguageManagerInterface;
use Geocoder\StatefulGeocoder;
use Geocoder\Provider\Provider;
use Drupal\geocoder_geofield\Geocoder\Provider\GeometryProviderInterface;
abstract class ProviderUsingHandlerBase extends ProviderBase {
protected $handler;
protected $handlerWrapper;
public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, CacheBackendInterface $cache_backend, LanguageManagerInterface $language_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $config_factory, $cache_backend, $language_manager);
if (empty($plugin_definition['handler'])) {
throw new InvalidPluginDefinitionException($plugin_id, "Plugin '{$plugin_id}' should define a handler.");
}
}
protected function doGeocode($source) {
if ($this
->getHandler() instanceof Provider) {
return $this
->getHandlerWrapper()
->geocode($source);
}
if ($this
->getHandler() instanceof GeometryProviderInterface) {
return $this
->getHandler()
->geocode($source);
}
return NULL;
}
protected function doReverse($latitude, $longitude) {
return $this
->getHandlerWrapper()
->reverse($latitude, $longitude);
}
protected function getHandler() {
if ($this->handler === NULL) {
$definition = $this
->getPluginDefinition();
$reflection_class = new \ReflectionClass($definition['handler']);
$this->handler = $reflection_class
->newInstanceArgs($this
->getArguments());
}
return $this->handler;
}
protected function getHandlerWrapper() : StatefulGeocoder {
if ($this->handlerWrapper === NULL) {
$this->handlerWrapper = new StatefulGeocoder($this
->getHandler(), $this->languageManager
->getCurrentLanguage()
->getId());
}
return $this->handlerWrapper;
}
protected function getArguments() : array {
$arguments = [];
foreach ($this
->getPluginDefinition()['arguments'] as $key => $argument) {
if (\is_string($key)) {
$config_name = $key;
$default_value = $argument;
}
else {
$config_name = $argument;
$default_value = NULL;
}
$arguments[] = $this->configuration[$config_name] ?? $default_value;
}
return $arguments;
}
}