View source
<?php
function geocoder_services_services_capabilities() {
$object = array();
foreach (\Drupal\geocoder\Geocoder::getPlugins() as $type => $plugin) {
$object[$type] = array_keys($plugin);
}
return $object;
}
function geocoder_services_geocoder_geocode_callback($plugin_id, $data, $output) {
geocoder_services_check_request($plugin_id, $output);
if ($addressCollection = \Drupal\geocoder\Geocoder::geocode($plugin_id, $data)) {
$data = array(
'count' => $addressCollection
->count(),
);
foreach ($addressCollection as $address) {
$data['collection'][] = array(
'raw' => $address
->toArray(),
'formatted' => \Drupal\geocoder\Geocoder::getPlugin('Dumper', $output)
->dump($address),
);
}
}
else {
$data = array(
'count' => 0,
);
}
return $data;
}
function geocoder_services_geocoder_reverse_callback($plugin_id, $data, $output) {
geocoder_services_check_request($plugin_id, $output);
list($latitude, $longitude) = explode(',', $data, 2);
if ($addressCollection = \Drupal\geocoder\Geocoder::reverse($plugin_id, $latitude, $longitude)) {
$data = array(
'count' => $addressCollection
->count(),
);
foreach ($addressCollection as $address) {
$data['collection'][] = array(
'raw' => $address
->toArray(),
'formatted' => \Drupal\geocoder\Geocoder::getPlugin('Dumper', $output)
->dump($address),
);
}
}
else {
$data = array(
'count' => 0,
);
}
return $data;
}
function geocoder_services_services_access($plugin_id, $data, $output) {
return geocoder_services_check_perms($plugin_id);
}
function geocoder_services_services_capabilities_ac() {
return TRUE;
}
function geocoder_services_check_request($plugin_id, $output) {
$plugin_id = drupal_strtolower($plugin_id);
if (!geocoder_services_check_perms($plugin_id)) {
drupal_access_denied();
drupal_exit();
}
if (!\Drupal\geocoder\Geocoder::getPluginManager()
->hasDefinition($plugin_id)) {
drupal_set_message(t('Could not find provider plugin @plugin_id', array(
'@plugin_id' => $plugin_id,
)), 'error');
drupal_not_found();
drupal_exit();
}
if (!\Drupal\geocoder\Geocoder::getPluginManager()
->hasDefinition($output)) {
drupal_set_message(t('Could not find dumper plugin @plugin_id', array(
'@plugin_id' => $output,
)), 'error');
drupal_not_found();
drupal_exit();
}
}
function geocoder_services_check_perms($plugin_id) {
return user_access('bypass_geocoder_services_access') || user_access('geocoder_services_plugin_' . $plugin_id);
}