You are here

geolocation.install in Geolocation Field 8.2

Sth sth dark side.

File

geolocation.install
View source
<?php

/**
 * @file
 * Sth sth dark side.
 */

/**
 * {@inheritdoc}
 *
 * Enable Google Maps module by default.
 */
function geolocation_update_8201(&$sandbox) {

  // Enable geolocation_google_maps.
  if (!\Drupal::service('module_handler')
    ->moduleExists('geolocation_google_maps')) {
    \Drupal::service('module_installer')
      ->install([
      'geolocation_google_maps',
    ]);
  }
  drupal_flush_all_caches();
}

/**
 * {@inheritdoc}
 *
 * Move specific map field formatters to generic one.
 */
function geolocation_update_8202(&$sandbox) {
  \Drupal::service('plugin.cache_clearer')
    ->clearCachedDefinitions();

  /** @var \Drupal\Core\Entity\EntityFieldManager $entity_field_manager */
  $entity_field_manager = \Drupal::service('entity_field.manager');
  $geolocation_fields = $entity_field_manager
    ->getFieldMapByFieldType('geolocation');
  $displays_to_save = [];
  $displays_settings_to_save = [];
  foreach ($geolocation_fields as $entity_type => $fields) {
    foreach ($fields as $field_name => $field) {
      foreach ($field['bundles'] as $bundle) {

        /** @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface[] $entity_view_displays */
        $entity_view_displays = \Drupal::entityTypeManager()
          ->getStorage('entity_view_display')
          ->loadByProperties([
          'targetEntityType' => $entity_type,
          'bundle' => $bundle,
        ]);
        foreach ($entity_view_displays as $entity_view_display_id => $entity_view_display) {
          $displays_to_save[$entity_view_display_id] = $entity_view_display;
          $content_settings = $entity_view_display
            ->get('content');
          if (empty($content_settings[$field_name])) {
            continue;
          }
          switch ($content_settings[$field_name]['type']) {
            case 'geolocation_map':
              if (empty($content_settings[$field_name]['settings']['google_map_settings'])) {
                continue 2;
              }
              $content_settings[$field_name]['settings']['map_provider_id'] = 'google_maps';
              $content_settings[$field_name]['settings']['map_provider_settings'] = (array) $content_settings[$field_name]['settings']['google_map_settings'];
              unset($content_settings[$field_name]['settings']['google_map_settings']);
              if (empty($displays_settings_to_save[$entity_view_display_id])) {
                $displays_settings_to_save[$entity_view_display_id] = $content_settings;
              }
              else {
                $displays_settings_to_save[$entity_view_display_id][$field_name] = $content_settings[$field_name];
              }
              break;
            case 'geolocation_leaflet_map':
              $content_settings[$field_name]['type'] = 'geolocation_map';
              $content_settings[$field_name]['settings']['map_provider_id'] = 'leaflet';
              $content_settings[$field_name]['settings']['map_provider_settings'] = (array) $content_settings[$field_name]['settings']['leaflet_settings'];
              unset($content_settings[$field_name]['settings']['leaflet_settings']);
              if (empty($displays_settings_to_save[$entity_view_display_id])) {
                $displays_settings_to_save[$entity_view_display_id] = $content_settings;
              }
              else {
                $displays_settings_to_save[$entity_view_display_id] = array_replace_recursive($displays_settings_to_save[$entity_view_display_id], $content_settings);
              }
              break;
          }
        }
      }
    }
  }
  foreach (\Drupal::entityTypeManager()
    ->getStorage('view')
    ->loadMultiple() as $views_id => $view) {
    $resave_view = FALSE;

    /* @var \Drupal\views\Entity\View $view */
    $displays = $view
      ->get('display');
    foreach ($displays as $display_id => $display) {
      if (empty($display['display_options']['style']['type'])) {
        continue;
      }
      switch ($display['display_options']['style']['type']) {
        case 'maps_common':
          if (empty($display['display_options']['style']['options']['google_map_settings'])) {
            continue 2;
          }
          $displays[$display_id]['display_options']['style']['options']['map_provider_id'] = 'google_maps';
          $displays[$display_id]['display_options']['style']['options']['map_provider_settings'] = $display['display_options']['style']['options']['google_map_settings'];
          unset($displays[$display_id]['display_options']['style']['options']['google_map_settings']);
          $resave_view = TRUE;
          break;
        case 'google_static_common_map':
          if (empty($display['display_options']['style']['options']['google_static_maps_settings'])) {
            continue 2;
          }
          $displays[$display_id]['display_options']['style']['options']['map_provider_id'] = 'google_static_maps';
          $displays[$display_id]['display_options']['style']['options']['map_provider_settings'] = $display['display_options']['style']['options']['google_static_maps_settings'];
          $displays[$display_id]['display_options']['style']['type'] = 'maps_common';
          unset($displays[$display_id]['display_options']['style']['options']['google_static_maps_settings']);
          $resave_view = TRUE;
          break;
        case 'geolocation_leaflet':
          if (empty($display['display_options']['style']['options']['leaflet_settings'])) {
            continue 2;
          }
          $displays[$display_id]['display_options']['style']['options']['map_provider_id'] = 'leaflet';
          $displays[$display_id]['display_options']['style']['options']['map_provider_settings'] = $display['display_options']['style']['options']['leaflet_settings'];
          $displays[$display_id]['display_options']['style']['type'] = 'maps_common';
          unset($displays[$display_id]['display_options']['style']['options']['leaflet_settings']);
          $resave_view = TRUE;
          break;
      }
    }
    if ($resave_view) {
      $view
        ->set('display', $displays);
      $view
        ->save();
    }
  }
  foreach ($displays_to_save as $entity_view_display_id => $entity_view_display) {
    if (!empty($displays_settings_to_save[$entity_view_display_id])) {
      $entity_view_display
        ->set('content', $displays_settings_to_save[$entity_view_display_id]);
      $entity_view_display
        ->save();
    }
  }
  drupal_flush_all_caches();
}

/**
 * {@inheritdoc}
 *
 * Move centre behavior to new format in views.
 */
function geolocation_update_8203(&$sandbox) {
  \Drupal::service('plugin.cache_clearer')
    ->clearCachedDefinitions();
  foreach (\Drupal::entityTypeManager()
    ->getStorage('view')
    ->loadMultiple() as $views_id => $view) {
    $resave_view = FALSE;

    /* @var \Drupal\views\Entity\View $view */
    $displays = $view
      ->get('display');
    foreach ($displays as $display_id => $display) {
      if (!empty($display['display_options']['style']['type']) && $display['display_options']['style']['type'] == 'maps_common') {
        if (empty($display['display_options']['style']['options']['centre'])) {
          continue;
        }
        foreach ($display['display_options']['style']['options']['centre'] as $options_id => $value) {
          switch ($options_id) {
            case 'fixed_value':
            case 'freeogeoip':
              $displays[$display_id]['display_options']['style']['options']['centre'][$options_id]['map_center_id'] = 'location_plugins';
              break;
            default:
              if (substr($options_id, 0, 16) == 'boundary_filter_') {
                $displays[$display_id]['display_options']['style']['options']['centre'][$options_id]['map_center_id'] = 'views_boundary_filter';
              }
              else {
                $displays[$display_id]['display_options']['style']['options']['centre'][$options_id]['map_center_id'] = $options_id;
              }
          }
        }
        $resave_view = TRUE;
      }
    }
    if ($resave_view) {
      $view
        ->set('display', $displays);
      $view
        ->save();
    }
  }
  drupal_flush_all_caches();
}

Functions

Namesort descending Description
geolocation_update_8201 Enable Google Maps module by default.
geolocation_update_8202 Move specific map field formatters to generic one.
geolocation_update_8203 Move centre behavior to new format in views.