geolocation.install in Geolocation Field 8.3
Same filename and directory in other branches
Sth sth dark side.
File
geolocation.installView source
<?php
/**
* @file
* Sth sth dark side.
*/
/**
* 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();
}
/**
* 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;
}
}
}
}
}
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();
}
/**
* Move centre behavior to new format in views.
*/
function geolocation_update_8203(&$sandbox) {
if (!\Drupal::entityTypeManager()
->hasDefinition('view')) {
return;
}
\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
Name | 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. |