public function GeolocationMap::preRenderMap in Geolocation Field 8.2
Same name and namespace in other branches
- 8.3 src/Element/GeolocationMap.php \Drupal\geolocation\Element\GeolocationMap::preRenderMap()
Map element.
Parameters
array $render_array: Element.
Return value
array Renderable map.
File
- src/
Element/ GeolocationMap.php, line 79
Class
- GeolocationMap
- Provides a render element to display a geolocation map.
Namespace
Drupal\geolocation\ElementCode
public function preRenderMap(array $render_array) {
$render_array['#theme'] = 'geolocation_map_wrapper';
if (empty($render_array['#attributes'])) {
$render_array['#attributes'] = [];
}
if (empty($render_array['#id'])) {
$render_array['#id'] = uniqid();
}
if (empty($render_array['#maptype'])) {
if (\Drupal::moduleHandler()
->moduleExists('geolocation_google_maps')) {
$render_array['#maptype'] = 'google_maps';
}
elseif (\Drupal::moduleHandler()
->moduleExists('geolocation_leaflet')) {
$render_array['#maptype'] = 'leaflet';
}
}
$map_provider = $this->mapProviderManager
->getMapProvider($render_array['#maptype']);
if (empty($map_provider)) {
return $render_array;
}
$map_settings = [];
if (!empty($render_array['#settings']) && is_array($render_array['#settings'])) {
$map_settings = $render_array['#settings'];
}
$render_array = BubbleableMetadata::mergeAttachments([
'#attached' => [
'library' => [
'geolocation/geolocation.map',
],
],
], $render_array);
foreach (Element::children($render_array) as $child) {
$render_array['#children'][$child] = $render_array[$child];
unset($render_array[$child]);
}
$render_array['#attributes'] = new Attribute($render_array['#attributes']);
$render_array['#attributes']
->addClass('geolocation-map-wrapper');
$render_array['#attributes']
->setAttribute('id', $render_array['#id']);
$render_array['#attributes']
->setAttribute('data-map-type', $render_array['#maptype']);
if (!empty($render_array['#centre']['lat']) && !empty($render_array['#centre']['lng'])) {
$render_array['#attributes']
->setAttribute('data-centre-lat', $render_array['#centre']['lat']);
$render_array['#attributes']
->setAttribute('data-centre-lng', $render_array['#centre']['lng']);
}
if (!empty($render_array['#centre']['lat_north_east']) && !empty($render_array['#centre']['lng_north_east']) && !empty($render_array['#centre']['lat_south_west']) && !empty($render_array['#centre']['lng_south_west'])) {
$render_array['#attributes']
->setAttribute('data-centre-lat-north-east', $render_array['#centre']['lat_north_east']);
$render_array['#attributes']
->setAttribute('data-centre-lng-north-east', $render_array['#centre']['lng_north_east']);
$render_array['#attributes']
->setAttribute('data-centre-lat-south-west', $render_array['#centre']['lat_south_west']);
$render_array['#attributes']
->setAttribute('data-centre-lng-south-west', $render_array['#centre']['lng_south_west']);
}
if (!empty($render_array['#controls'])) {
uasort($render_array['#controls'], [
SortArray::class,
'sortByWeightProperty',
]);
}
if (!empty($render_array['#children'])) {
uasort($render_array['#children'], [
SortArray::class,
'sortByWeightProperty',
]);
}
$context = [];
if (!empty($render_array['#context'])) {
$context = $render_array['#context'];
}
$render_array = $map_provider
->alterRenderArray($render_array, $map_settings, $context);
return $render_array;
}