Chris@0: getStorage('view')->loadMultiple(); Chris@4: $config_factory = \Drupal::configFactory(); Chris@4: $message = NULL; Chris@4: $ids = []; Chris@4: Chris@4: foreach ($views as $view) { Chris@4: $displays = $view->get('display'); Chris@4: $needs_bc_layer_update = FALSE; Chris@4: Chris@4: foreach ($displays as $display_name => $display) { Chris@4: Chris@4: // Check if datetime_range filters need updates. Chris@4: if (!$needs_bc_layer_update && isset($display['display_options']['filters'])) { Chris@4: foreach ($display['display_options']['filters'] as $field_name => $filter) { Chris@4: if ($filter['plugin_id'] == 'string') { Chris@4: Chris@4: // Get field config. Chris@4: $filter_views_data = Views::viewsData()->get($filter['table'])[$filter['field']]['filter']; Chris@4: if (!isset($filter_views_data['entity_type']) || !isset($filter_views_data['field_name'])) { Chris@4: continue; Chris@4: } Chris@4: $field_storage_name = 'field.storage.' . $filter_views_data['entity_type'] . '.' . $filter_views_data['field_name']; Chris@4: $field_configuration = $config_factory->get($field_storage_name); Chris@4: Chris@4: if ($field_configuration->get('type') == 'daterange') { Chris@4: // Trigger the BC layer control. Chris@4: $needs_bc_layer_update = TRUE; Chris@4: continue 2; Chris@4: } Chris@4: } Chris@4: } Chris@4: } Chris@4: Chris@4: // Check if datetime_range sort handlers need updates. Chris@4: if (!$needs_bc_layer_update && isset($display['display_options']['sorts'])) { Chris@4: foreach ($display['display_options']['sorts'] as $field_name => $sort) { Chris@4: if ($sort['plugin_id'] == 'standard') { Chris@4: Chris@4: // Get field config. Chris@4: $sort_views_data = Views::viewsData()->get($sort['table'])[$sort['field']]['sort']; Chris@4: if (!isset($sort_views_data['entity_type']) || !isset($sort_views_data['field_name'])) { Chris@4: continue; Chris@4: } Chris@4: $field_storage_name = 'field.storage.' . $sort_views_data['entity_type'] . '.' . $sort_views_data['field_name']; Chris@4: $field_configuration = $config_factory->get($field_storage_name); Chris@4: Chris@4: if ($field_configuration->get('type') == 'daterange') { Chris@4: // Trigger the BC layer control. Chris@4: $needs_bc_layer_update = TRUE; Chris@4: continue 2; Chris@4: } Chris@4: } Chris@4: } Chris@4: } Chris@4: } Chris@4: Chris@4: // If current view needs BC layer updates save it and the hook view_presave Chris@4: // will do the rest. Chris@4: if ($needs_bc_layer_update) { Chris@4: $view->save(); Chris@4: $ids[] = $view->id(); Chris@4: } Chris@4: } Chris@4: Chris@4: if (!empty($ids)) { Chris@4: $message = \Drupal::translation()->translate('Updated datetime_range filter/sort plugins for views: @ids', ['@ids' => implode(', ', array_unique($ids))]); Chris@4: } Chris@4: Chris@4: return $message; Chris@4: }