function geolocation_tokens in Geolocation Field 8.2
Same name and namespace in other branches
- 8.3 geolocation.tokens.inc \geolocation_tokens()
Implements hook_tokens().
File
- ./
geolocation.tokens.inc, line 64 - Token integration geolocation field type.
Code
function geolocation_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
$replacements = [];
if (!empty($data['field_property'])) {
foreach ($tokens as $token => $original) {
$delta = 0;
$parts = explode(':', $token);
if (is_numeric($parts[0])) {
if (count($parts) > 1) {
$delta = $parts[0];
$property_name = $parts[1];
}
else {
continue;
}
}
else {
$property_name = $parts[0];
}
if (!isset($data[$data['field_name']][$delta])) {
continue;
}
/** @var \Drupal\geolocation\Plugin\Field\FieldType\GeolocationItem $item */
$item = $data[$data['field_name']][$delta];
switch ($property_name) {
case 'lng_sex':
$replacements[$original] = $item::decimalToSexagesimal($item
->get('lng')
->getValue());
break;
case 'lat_sex':
$replacements[$original] = $item::decimalToSexagesimal($item
->get('lat')
->getValue());
break;
case 'data':
// Handle data tokens.
$metadata = $item
->get('data')
->getValue();
if (is_array($metadata) || $metadata instanceof \Traversable) {
foreach ($metadata as $key => $value) {
try {
// Maybe there is values inside the values.
if (is_array($value) || $value instanceof \Traversable) {
foreach ($value as $deepkey => $deepvalue) {
if (is_string($deepvalue)) {
$replacements[$token . ':' . $key . ':' . $deepkey . ']'] = (string) $deepvalue;
}
}
}
else {
$replacements[$token . ':' . $key . ']'] = (string) $value;
}
} catch (\Exception $e) {
watchdog_exception('geolocation', $e);
}
}
}
break;
}
}
}
return $replacements;
}