You are here

function geolocation_update_8202 in Geolocation Field 8.2

Same name and namespace in other branches
  1. 8.3 geolocation.install \geolocation_update_8202()

Move specific map field formatters to generic one.

File

./geolocation.install, line 26
Sth sth dark side.

Code

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