diff --git a/core/modules/views/views.install b/core/modules/views/views.install index faae2ba..5615747 100644 --- a/core/modules/views/views.install +++ b/core/modules/views/views.install @@ -24,6 +24,15 @@ function views_update_8001(&$sandbox) { $config_factory = \Drupal::configFactory(); $ids = []; $message = NULL; + $ago_formats = [ + 'time ago', + 'time hence', + 'time span', + 'raw time ago', + 'raw time hence', + 'raw time span', + 'inverse time span', + ]; foreach ($config_factory->listAll('views.view.') as $view_config_name) { $view = $config_factory->getEditable($view_config_name); @@ -45,35 +54,47 @@ function views_update_8001(&$sandbox) { // Save off the base part of the config path we are updating. $base = "display.$display_name.display_options.fields.$field_name"; - if ($date_format === 'time ago') { + if (in_array($date_format, $ago_formats)) { // Update the field to use the Field API formatter. $view->set($base . '.plugin_id', 'field'); $view->set($base . '.type', 'timestamp_ago'); - // Add the new settings - $view->set($base . '.settings.future_format', '@interval hence'); - $view->set($base . '.settings.past_format', '@interval ago'); - $view->set($base . '.settings.granularity', 2); - } - elseif ($date_format === 'raw time ago') { - // Update the field to use the Field API formatter. - $view->set($base . '.plugin_id', 'field'); - $view->set($base . '.type', 'timestamp_ago'); - - // Add the new settings - $view->set($base . '.settings.future_format', '@interval'); - $view->set($base . '.settings.past_format', '@interval'); - $view->set($base . '.settings.granularity', 2); + // Ensure the granularity is an integer, which is defined in the + // field.formatter.settings.timestamp_ago schema. + $granularity = is_numeric($custom_date_format) ? (int) $custom_date_format : 2; + + // Add the new settings. + if ($date_format === 'time ago' || $date_format === 'time hence' || $date_format === 'time span') { + $view->set($base . '.settings.future_format', '@interval hence'); + $view->set($base . '.settings.past_format', '@interval ago'); + $view->set($base . '.settings.granularity', $granularity); + } + elseif ($date_format === 'raw time ago' || $date_format === 'raw time hence') { + $view->set($base . '.settings.future_format', '@interval'); + $view->set($base . '.settings.past_format', '@interval'); + $view->set($base . '.settings.granularity', $granularity); + } + elseif ($date_format === 'raw time span') { + $view->set($base . '.settings.future_format', '@interval'); + $view->set($base . '.settings.past_format', '-@interval'); + $view->set($base . '.settings.granularity', $granularity); + } + elseif ($date_format === 'inverse time span') { + $view->set($base . '.settings.future_format', '-@interval'); + $view->set($base . '.settings.past_format', '@interval'); + $view->set($base . '.settings.granularity', $granularity); + } } else { // Update the field to use the Field API formatter. $view->set($base . '.plugin_id', 'field'); $view->set($base . '.type', 'timestamp'); - // Add the new settings - $view->set($base . '.settings.date_format', $date_format); - $view->set($base . '.settings.custom_date_format', $custom_date_format); - $view->set($base . '.settings.timezone', $timezone); + // Add the new settings, and make sure everything is a string + // to conform with the field.formatter.settings.timestamp schema. + $view->set($base . '.settings.date_format', (string) $date_format); + $view->set($base . '.settings.custom_date_format', (string) $custom_date_format); + $view->set($base . '.settings.timezone', (string) $timezone); } // Remove the old settings.