annotate core/modules/datetime_range/datetime_range.post_update.php @ 4:a9cd425dd02b

Update, including to Drupal core 8.6.10
author Chris Cannam
date Thu, 28 Feb 2019 13:11:55 +0000
parents c75dbcec494b
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /**
Chris@0 4 * @file
Chris@0 5 * Post-update functions for Datetime Range module.
Chris@0 6 */
Chris@0 7
Chris@4 8 use Drupal\views\Views;
Chris@4 9
Chris@0 10 /**
Chris@0 11 * Clear caches to ensure schema changes are read.
Chris@0 12 */
Chris@0 13 function datetime_range_post_update_translatable_separator() {
Chris@0 14 // Empty post-update hook to cause a cache rebuild.
Chris@0 15 }
Chris@4 16
Chris@4 17 /**
Chris@4 18 * Update existing views using datetime_range fields.
Chris@4 19 */
Chris@4 20 function datetime_range_post_update_views_string_plugin_id() {
Chris@4 21
Chris@4 22 /* @var \Drupal\views\Entity\View[] $views */
Chris@4 23 $views = \Drupal::entityTypeManager()->getStorage('view')->loadMultiple();
Chris@4 24 $config_factory = \Drupal::configFactory();
Chris@4 25 $message = NULL;
Chris@4 26 $ids = [];
Chris@4 27
Chris@4 28 foreach ($views as $view) {
Chris@4 29 $displays = $view->get('display');
Chris@4 30 $needs_bc_layer_update = FALSE;
Chris@4 31
Chris@4 32 foreach ($displays as $display_name => $display) {
Chris@4 33
Chris@4 34 // Check if datetime_range filters need updates.
Chris@4 35 if (!$needs_bc_layer_update && isset($display['display_options']['filters'])) {
Chris@4 36 foreach ($display['display_options']['filters'] as $field_name => $filter) {
Chris@4 37 if ($filter['plugin_id'] == 'string') {
Chris@4 38
Chris@4 39 // Get field config.
Chris@4 40 $filter_views_data = Views::viewsData()->get($filter['table'])[$filter['field']]['filter'];
Chris@4 41 if (!isset($filter_views_data['entity_type']) || !isset($filter_views_data['field_name'])) {
Chris@4 42 continue;
Chris@4 43 }
Chris@4 44 $field_storage_name = 'field.storage.' . $filter_views_data['entity_type'] . '.' . $filter_views_data['field_name'];
Chris@4 45 $field_configuration = $config_factory->get($field_storage_name);
Chris@4 46
Chris@4 47 if ($field_configuration->get('type') == 'daterange') {
Chris@4 48 // Trigger the BC layer control.
Chris@4 49 $needs_bc_layer_update = TRUE;
Chris@4 50 continue 2;
Chris@4 51 }
Chris@4 52 }
Chris@4 53 }
Chris@4 54 }
Chris@4 55
Chris@4 56 // Check if datetime_range sort handlers need updates.
Chris@4 57 if (!$needs_bc_layer_update && isset($display['display_options']['sorts'])) {
Chris@4 58 foreach ($display['display_options']['sorts'] as $field_name => $sort) {
Chris@4 59 if ($sort['plugin_id'] == 'standard') {
Chris@4 60
Chris@4 61 // Get field config.
Chris@4 62 $sort_views_data = Views::viewsData()->get($sort['table'])[$sort['field']]['sort'];
Chris@4 63 if (!isset($sort_views_data['entity_type']) || !isset($sort_views_data['field_name'])) {
Chris@4 64 continue;
Chris@4 65 }
Chris@4 66 $field_storage_name = 'field.storage.' . $sort_views_data['entity_type'] . '.' . $sort_views_data['field_name'];
Chris@4 67 $field_configuration = $config_factory->get($field_storage_name);
Chris@4 68
Chris@4 69 if ($field_configuration->get('type') == 'daterange') {
Chris@4 70 // Trigger the BC layer control.
Chris@4 71 $needs_bc_layer_update = TRUE;
Chris@4 72 continue 2;
Chris@4 73 }
Chris@4 74 }
Chris@4 75 }
Chris@4 76 }
Chris@4 77 }
Chris@4 78
Chris@4 79 // If current view needs BC layer updates save it and the hook view_presave
Chris@4 80 // will do the rest.
Chris@4 81 if ($needs_bc_layer_update) {
Chris@4 82 $view->save();
Chris@4 83 $ids[] = $view->id();
Chris@4 84 }
Chris@4 85 }
Chris@4 86
Chris@4 87 if (!empty($ids)) {
Chris@4 88 $message = \Drupal::translation()->translate('Updated datetime_range filter/sort plugins for views: @ids', ['@ids' => implode(', ', array_unique($ids))]);
Chris@4 89 }
Chris@4 90
Chris@4 91 return $message;
Chris@4 92 }