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@17
|
8 use Drupal\views\Views;
|
Chris@17
|
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@17
|
16
|
Chris@17
|
17 /**
|
Chris@17
|
18 * Update existing views using datetime_range fields.
|
Chris@17
|
19 */
|
Chris@17
|
20 function datetime_range_post_update_views_string_plugin_id() {
|
Chris@17
|
21
|
Chris@17
|
22 /* @var \Drupal\views\Entity\View[] $views */
|
Chris@17
|
23 $views = \Drupal::entityTypeManager()->getStorage('view')->loadMultiple();
|
Chris@17
|
24 $config_factory = \Drupal::configFactory();
|
Chris@17
|
25 $message = NULL;
|
Chris@17
|
26 $ids = [];
|
Chris@17
|
27
|
Chris@17
|
28 foreach ($views as $view) {
|
Chris@17
|
29 $displays = $view->get('display');
|
Chris@17
|
30 $needs_bc_layer_update = FALSE;
|
Chris@17
|
31
|
Chris@17
|
32 foreach ($displays as $display_name => $display) {
|
Chris@17
|
33
|
Chris@17
|
34 // Check if datetime_range filters need updates.
|
Chris@17
|
35 if (!$needs_bc_layer_update && isset($display['display_options']['filters'])) {
|
Chris@17
|
36 foreach ($display['display_options']['filters'] as $field_name => $filter) {
|
Chris@17
|
37 if ($filter['plugin_id'] == 'string') {
|
Chris@17
|
38
|
Chris@17
|
39 // Get field config.
|
Chris@17
|
40 $filter_views_data = Views::viewsData()->get($filter['table'])[$filter['field']]['filter'];
|
Chris@17
|
41 if (!isset($filter_views_data['entity_type']) || !isset($filter_views_data['field_name'])) {
|
Chris@17
|
42 continue;
|
Chris@17
|
43 }
|
Chris@17
|
44 $field_storage_name = 'field.storage.' . $filter_views_data['entity_type'] . '.' . $filter_views_data['field_name'];
|
Chris@17
|
45 $field_configuration = $config_factory->get($field_storage_name);
|
Chris@17
|
46
|
Chris@17
|
47 if ($field_configuration->get('type') == 'daterange') {
|
Chris@17
|
48 // Trigger the BC layer control.
|
Chris@17
|
49 $needs_bc_layer_update = TRUE;
|
Chris@17
|
50 continue 2;
|
Chris@17
|
51 }
|
Chris@17
|
52 }
|
Chris@17
|
53 }
|
Chris@17
|
54 }
|
Chris@17
|
55
|
Chris@17
|
56 // Check if datetime_range sort handlers need updates.
|
Chris@17
|
57 if (!$needs_bc_layer_update && isset($display['display_options']['sorts'])) {
|
Chris@17
|
58 foreach ($display['display_options']['sorts'] as $field_name => $sort) {
|
Chris@17
|
59 if ($sort['plugin_id'] == 'standard') {
|
Chris@17
|
60
|
Chris@17
|
61 // Get field config.
|
Chris@17
|
62 $sort_views_data = Views::viewsData()->get($sort['table'])[$sort['field']]['sort'];
|
Chris@17
|
63 if (!isset($sort_views_data['entity_type']) || !isset($sort_views_data['field_name'])) {
|
Chris@17
|
64 continue;
|
Chris@17
|
65 }
|
Chris@17
|
66 $field_storage_name = 'field.storage.' . $sort_views_data['entity_type'] . '.' . $sort_views_data['field_name'];
|
Chris@17
|
67 $field_configuration = $config_factory->get($field_storage_name);
|
Chris@17
|
68
|
Chris@17
|
69 if ($field_configuration->get('type') == 'daterange') {
|
Chris@17
|
70 // Trigger the BC layer control.
|
Chris@17
|
71 $needs_bc_layer_update = TRUE;
|
Chris@17
|
72 continue 2;
|
Chris@17
|
73 }
|
Chris@17
|
74 }
|
Chris@17
|
75 }
|
Chris@17
|
76 }
|
Chris@17
|
77 }
|
Chris@17
|
78
|
Chris@17
|
79 // If current view needs BC layer updates save it and the hook view_presave
|
Chris@17
|
80 // will do the rest.
|
Chris@17
|
81 if ($needs_bc_layer_update) {
|
Chris@17
|
82 $view->save();
|
Chris@17
|
83 $ids[] = $view->id();
|
Chris@17
|
84 }
|
Chris@17
|
85 }
|
Chris@17
|
86
|
Chris@17
|
87 if (!empty($ids)) {
|
Chris@17
|
88 $message = \Drupal::translation()->translate('Updated datetime_range filter/sort plugins for views: @ids', ['@ids' => implode(', ', array_unique($ids))]);
|
Chris@17
|
89 }
|
Chris@17
|
90
|
Chris@17
|
91 return $message;
|
Chris@17
|
92 }
|