You are here

public function GeolocationMap::preRenderMap in Geolocation Field 8.2

Same name and namespace in other branches
  1. 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\Element

Code

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;
}