function geolocation_update_8202 in Geolocation Field 8.3
Same name and namespace in other branches
- 8.2 geolocation.install \geolocation_update_8202()
Move specific map field formatters to generic one.
File
- ./
geolocation.install, line 22 - 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;
}
}
}
}
}
if (\Drupal::entityTypeManager()
->hasDefinition('view')) {
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();
}