diff --git a/core/modules/datetime/config/schema/datetime.schema.yml b/core/modules/datetime/config/schema/datetime.schema.yml
index 4a3ed9d..b600660 100644
--- a/core/modules/datetime/config/schema/datetime.schema.yml
+++ b/core/modules/datetime/config/schema/datetime.schema.yml
@@ -92,7 +92,7 @@ field.storage_settings.daterange:
type: mapping
label: 'Date range settings'
mapping:
- daterange_type:
+ datetime_type:
type: string
label: 'Date type'
@@ -104,10 +104,10 @@ field.value.daterange:
type: mapping
label: 'Default value'
mapping:
- default_start_date_type:
+ default_date_type:
type: string
label: 'Default start date type'
- default_start_date:
+ default_date:
type: string
label: 'Default start date value'
default_end_date_type:
diff --git a/core/modules/datetime/src/DateTimeComputed.php b/core/modules/datetime/src/DateTimeComputed.php
index 1a19a7a..6b33161 100644
--- a/core/modules/datetime/src/DateTimeComputed.php
+++ b/core/modules/datetime/src/DateTimeComputed.php
@@ -43,9 +43,8 @@ public function getValue($langcode = NULL) {
/** @var \Drupal\Core\Field\FieldItemInterface $item */
$item = $this->getParent();
$value = $item->{($this->definition->getSetting('date source'))};
- $type = $item->getFieldDefinition()->getType();
- $storage_format = $item->getFieldDefinition()->getSetting($type . '_type') == 'date' ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT;
+ $storage_format = $item->getFieldDefinition()->getSetting('datetime_type') == 'date' ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT;
try {
$date = DrupalDateTime::createFromFormat($storage_format, $value, DATETIME_STORAGE_TIMEZONE);
if ($date instanceof DrupalDateTime && !$date->hasErrors()) {
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php
index 6fa9555..2be820b 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php
@@ -2,7 +2,6 @@
namespace Drupal\datetime\Plugin\Field\FieldFormatter;
-use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\datetime\Plugin\Field\FieldType\DateRangeItem;
@@ -21,7 +20,7 @@
* }
* )
*/
-class DateRangeCustomFormatter extends DateRangeFormatterBase {
+class DateRangeCustomFormatter extends DateTimeCustomFormatter {
/**
* {@inheritdoc}
@@ -29,6 +28,7 @@ class DateRangeCustomFormatter extends DateRangeFormatterBase {
public static function defaultSettings() {
return [
'date_format' => DATETIME_DATETIME_STORAGE_FORMAT,
+ 'separator' => '-',
] + parent::defaultSettings();
}
@@ -40,38 +40,23 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
$separator = $this->getSetting('separator');
foreach ($items as $delta => $item) {
- if ($item->start_date && $item->end_date) {
+ if (!empty($item->start_date) && !empty($item->end_date)) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */
$start_date = $item->start_date;
/** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */
$end_date = $item->end_date;
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE) {
- // A date without time will pick up the current time, use the default.
- datetime_date_default_time($start_date);
- datetime_date_default_time($end_date);
- }
-
- $this->setTimeZone($start_date);
- $this->setTimeZone($end_date);
-
- $start = $this->formatDate($start_date);
- $end = $this->formatDate($end_date);
- if ($start !== $end) {
- $output = $this->formatDate($start_date) . ' ' . $separator . ' ' . $this->formatDate($end_date);
+ if ($start_date->format('U') !== $end_date->format('U')) {
+ $elements[$delta] = [
+ $this->buildDate($start_date),
+ ['#plain_text' => ' ' . $separator . ' '],
+ $this->buildDate($end_date),
+ $this->defaultCacheContext(),
+ ];
}
else {
- $output = $start;
+ $elements[$delta] = $this->buildDate($start_date) + $this->defaultCacheContext();
}
-
- $elements[$delta] = [
- '#cache' => [
- 'contexts' => [
- 'timezone',
- ],
- ],
- '#plain_text' => $output,
- ];
}
}
@@ -81,23 +66,14 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
/**
* {@inheritdoc}
*/
- protected function formatDate(DrupalDateTime $date) {
- $format = $this->getSetting('date_format');
- $timezone = $this->getSetting('timezone_override') ?: $date->getTimezone()->getName();
- return $this->dateFormatter->format($date->getTimestamp(), 'custom', $format, $timezone != '' ? $timezone : NULL);
- }
-
- /**
- * {@inheritdoc}
- */
public function settingsForm(array $form, FormStateInterface $form_state) {
$form = parent::settingsForm($form, $form_state);
- $form['date_format'] = [
+ $form['separator'] = [
'#type' => 'textfield',
- '#title' => $this->t('Date/time format'),
- '#description' => $this->t('See the documentation for PHP date formats.'),
- '#default_value' => $this->getSetting('date_format'),
+ '#title' => $this->t('Date separator'),
+ '#description' => $this->t('The string to separate the start and end dates'),
+ '#default_value' => $this->getSetting('separator'),
];
return $form;
@@ -109,9 +85,9 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
public function settingsSummary() {
$summary = parent::settingsSummary();
- $date = DrupalDateTime::createFromTimestamp($this->requestStack->getCurrentRequest()->server->get('REQUEST_TIME'));
- $this->setTimeZone($date);
- $summary[] = $this->t('Format: @display', ['@display' => $this->formatDate($date)]);
+ if ($separator = $this->getSetting('separator')) {
+ $summary[] = $this->t('Separator: %separator', ['%separator' => $separator]);
+ }
return $summary;
}
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeDefaultFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeDefaultFormatter.php
index 24eb436..2655315 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeDefaultFormatter.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeDefaultFormatter.php
@@ -2,7 +2,6 @@
namespace Drupal\datetime\Plugin\Field\FieldFormatter;
-use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\datetime\Plugin\Field\FieldType\DateRangeItem;
@@ -22,7 +21,7 @@
* }
* )
*/
-class DateRangeDefaultFormatter extends DateRangeFormatterBase {
+class DateRangeDefaultFormatter extends DateTimeDefaultFormatter {
/**
* {@inheritdoc}
@@ -30,6 +29,7 @@ class DateRangeDefaultFormatter extends DateRangeFormatterBase {
public static function defaultSettings() {
return [
'format_type' => 'medium',
+ 'separator' => '-',
] + parent::defaultSettings();
}
@@ -41,65 +41,22 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
$separator = $this->getSetting('separator');
foreach ($items as $delta => $item) {
- if ($item->start_date && $item->end_date) {
+ if (!empty($item->start_date) && !empty($item->end_date)) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */
$start_date = $item->start_date;
/** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */
$end_date = $item->end_date;
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE) {
- // A date without time will pick up the current time, use the default.
- datetime_date_default_time($start_date);
- datetime_date_default_time($end_date);
- }
-
- // Create the ISO dates in Universal Time.
- $start_iso_date = $start_date->format("Y-m-d\TH:i:s") . 'Z';
- $end_iso_date = $end_date->format("Y-m-d\TH:i:s") . 'Z';
-
- $this->setTimeZone($start_date);
- $this->setTimeZone($end_date);
-
- // Display the dates using theme datetime.
- $elements[$delta] = [
- '#cache' => [
- 'contexts' => [
- 'timezone',
- ],
- ],
- ];
-
- $start = $this->formatDate($start_date);
- $end = $this->formatDate($end_date);
-
- if ($start !== $end) {
- $elements[$delta][] = [
- '#theme' => 'time',
- '#text' => $start,
- '#html' => FALSE,
- '#attributes' => [
- 'datetime' => $start_iso_date,
- ]
- ];
- $elements[$delta][] = ['#plain_text' => ' ' . $separator . ' '];
- $elements[$delta][] = [
- '#theme' => 'time',
- '#text' => $end,
- '#html' => FALSE,
- '#attributes' => [
- 'datetime' => $end_iso_date,
- ]
+ if ($start_date->format('U') !== $end_date->format('U')) {
+ $elements[$delta] = [
+ $this->buildDate($start_date),
+ ['#plain_text' => ' ' . $separator . ' '],
+ $this->buildDate($end_date),
+ $this->defaultCacheContext(),
];
}
else {
- $elements[$delta][] = [
- '#theme' => 'time',
- '#text' => $start,
- '#html' => FALSE,
- '#attributes' => [
- 'datetime' => $start_iso_date,
- ]
- ];
+ $elements[$delta] = $this->buildDate($start_date) + $this->defaultCacheContext();
}
if (!empty($item->_attributes)) {
@@ -117,32 +74,14 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
/**
* {@inheritdoc}
*/
- protected function formatDate(DrupalDateTime $date) {
- $format_type = $this->getSetting('format_type');
- $timezone = $this->getSetting('timezone_override') ?: $date->getTimezone()->getName();
- return $this->dateFormatter->format($date->getTimestamp(), $format_type, '', $timezone != '' ? $timezone : NULL);
- }
-
- /**
- * {@inheritdoc}
- */
public function settingsForm(array $form, FormStateInterface $form_state) {
$form = parent::settingsForm($form, $form_state);
- $format_types = $this->dateFormatStorage->loadMultiple();
- $options = [];
-
- foreach ($format_types as $type => $type_info) {
- $format = $this->dateFormatter->format(REQUEST_TIME, $type);
- $options[$type] = $type_info->label() . ' (' . $format . ')';
- }
-
- $form['format_type'] = [
- '#type' => 'select',
- '#title' => $this->t('Date format'),
- '#description' => $this->t('Choose a format for displaying the dates. Be sure to set a format appropriate for the field, i.e. omitting time for a field that only has a date.'),
- '#options' => $options,
- '#default_value' => $this->getSetting('format_type'),
+ $form['separator'] = [
+ '#type' => 'textfield',
+ '#title' => $this->t('Date separator'),
+ '#description' => $this->t('The string to separate the start and end dates'),
+ '#default_value' => $this->getSetting('separator'),
];
return $form;
@@ -154,9 +93,9 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
public function settingsSummary() {
$summary = parent::settingsSummary();
- $date = DrupalDateTime::createFromTimestamp($this->requestStack->getCurrentRequest()->server->get('REQUEST_TIME'));
- $this->setTimeZone($date);
- $summary[] = $this->t('Format: @display', ['@display' => $this->formatDate($date)]);
+ if ($separator = $this->getSetting('separator')) {
+ $summary[] = $this->t('Separator: %separator', ['%separator' => $separator]);
+ }
return $summary;
}
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeFormatterBase.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeFormatterBase.php
deleted file mode 100644
index bc2f17a..0000000
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeFormatterBase.php
+++ /dev/null
@@ -1,194 +0,0 @@
-dateFormatter = $date_formatter;
- $this->dateFormatStorage = $date_format_storage;
- $this->requestStack = $request_stack;
- }
-
- /**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
- return new static(
- $plugin_id,
- $plugin_definition,
- $configuration['field_definition'],
- $configuration['settings'],
- $configuration['label'],
- $configuration['view_mode'],
- $configuration['third_party_settings'],
- $container->get('date.formatter'),
- $container->get('entity_type.manager')->getStorage('date_format'),
- $container->get('request_stack')
- );
- }
-
- /**
- * {@inheritdoc}
- */
- public static function defaultSettings() {
- return [
- 'separator' => '-',
- 'timezone_override' => '',
- ] + parent::defaultSettings();
- }
-
- /**
- * {@inheritdoc}
- */
- public function settingsForm(array $form, FormStateInterface $form_state) {
- $form = parent::settingsForm($form, $form_state);
-
- $form['separator'] = [
- '#type' => 'textfield',
- '#title' => $this->t('Date separator'),
- '#description' => $this->t('The string to separate the start and end dates'),
- '#default_value' => $this->getSetting('separator'),
- ];
-
- $form['timezone_override'] = [
- '#type' => 'select',
- '#title' => $this->t('Time zone override'),
- '#description' => $this->t('The time zone selected here will always be used'),
- '#options' => system_time_zones(TRUE),
- '#default_value' => $this->getSetting('timezone_override'),
- ];
-
- return $form;
- }
-
- /**
- * {@inheritdoc}
- */
- public function settingsSummary() {
- $summary = parent::settingsSummary();
-
- if ($separator = $this->getSetting('separator')) {
- $summary[] = $this->t('Separator: %separator', ['%separator' => $separator]);
- }
-
- if ($override = $this->getSetting('timezone_override')) {
- $summary[] = $this->t('Time zone: @timezone', ['@timezone' => $override]);
- }
-
- return $summary;
- }
-
- /**
- * Creates a formatted date as a string.
- *
- * @param \Drupal\Core\Datetime\DrupalDateTime $date
- * The date.
- *
- * @return string
- * A formatted date range string using the chosen format.
- */
- abstract protected function formatDate(DrupalDateTime $date);
-
- /**
- * Sets the proper time zone on a DrupalDateTime object for the current user.
- *
- * A DrupalDateTime object loaded from the database will have the UTC time
- * zone applied to it. This method will apply the time zone for the current
- * user, based on system and user settings.
- *
- * @see drupal_get_user_timezone()
- *
- * @param \Drupal\Core\Datetime\DrupalDateTime $date
- * A DrupalDateTime object.
- */
- protected function setTimeZone(DrupalDateTime $date) {
- if ($this->getFieldSetting('daterange_type') === DateRangeItem::DATERANGE_TYPE_DATE) {
- // A date without time has no timezone conversion.
- $timezone = DATETIME_STORAGE_TIMEZONE;
- }
- else {
- $timezone = drupal_get_user_timezone();
- }
- $date->setTimeZone(timezone_open($timezone));
- }
-
- /**
- * Gets a settings array suitable for DrupalDateTime::format().
- *
- * @return array
- * The settings array that can be passed to DrupalDateTime::format().
- */
- protected function getFormatSettings() {
- $settings = [];
-
- if ($this->getSetting('timezone_override') != '') {
- $settings['timezone'] = $this->getSetting('timezone_override');
- }
-
- return $settings;
- }
-
-}
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangePlainFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangePlainFormatter.php
index 91c0560..e110c4d 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangePlainFormatter.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangePlainFormatter.php
@@ -2,8 +2,8 @@
namespace Drupal\datetime\Plugin\Field\FieldFormatter;
-use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
use Drupal\datetime\Plugin\Field\FieldType\DateRangeItem;
/**
@@ -20,7 +20,16 @@
* }
* )
*/
-class DateRangePlainFormatter extends DateRangeFormatterBase {
+class DateRangePlainFormatter extends DateTimePlainFormatter {
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function defaultSettings() {
+ return [
+ 'separator' => '-',
+ ] + parent::defaultSettings();
+ }
/**
* {@inheritdoc}
@@ -30,38 +39,23 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
$separator = $this->getSetting('separator');
foreach ($items as $delta => $item) {
- if ($item->start_date && $item->end_date) {
+ if (!empty($item->start_date) && !empty($item->end_date)) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */
$start_date = $item->start_date;
/** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */
$end_date = $item->end_date;
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE) {
- // A date without time will pick up the current time, use the default.
- datetime_date_default_time($start_date);
- datetime_date_default_time($end_date);
- }
-
- $this->setTimeZone($start_date);
- $this->setTimeZone($end_date);
-
- $start = $this->formatDate($start_date);
- $end = $this->formatDate($end_date);
- if ($start !== $end) {
- $output = $this->formatDate($start_date) . ' ' . $separator . ' ' . $this->formatDate($end_date);
+ if ($start_date->format('U') !== $end_date->format('U')) {
+ $elements[$delta] = [
+ $this->buildDate($start_date),
+ ['#plain_text' => ' ' . $separator . ' '],
+ $this->buildDate($end_date),
+ $this->defaultCacheContext(),
+ ];
}
else {
- $output = $start;
+ $elements[$delta] = $this->buildDate($start_date) + $this->defaultCacheContext();
}
-
- $elements[$delta] = [
- '#cache' => [
- 'contexts' => [
- 'timezone',
- ],
- ],
- '#plain_text' => $output,
- ];
}
}
@@ -71,10 +65,30 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
/**
* {@inheritdoc}
*/
- protected function formatDate(DrupalDateTime $date) {
- $format = $this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT;
- $timezone = $this->getSetting('timezone_override') ?: $date->getTimezone()->getName();
- return $this->dateFormatter->format($date->getTimestamp(), 'custom', $format, $timezone != '' ? $timezone : NULL);
+ public function settingsForm(array $form, FormStateInterface $form_state) {
+ $form = parent::settingsForm($form, $form_state);
+
+ $form['separator'] = [
+ '#type' => 'textfield',
+ '#title' => $this->t('Date separator'),
+ '#description' => $this->t('The string to separate the start and end dates'),
+ '#default_value' => $this->getSetting('separator'),
+ ];
+
+ return $form;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function settingsSummary() {
+ $summary = parent::settingsSummary();
+
+ if ($separator = $this->getSetting('separator')) {
+ $summary[] = $this->t('Separator: %separator', ['%separator' => $separator]);
+ }
+
+ return $summary;
}
}
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeCustomFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeCustomFormatter.php
index 678ddc8..f68bbe3 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeCustomFormatter.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeCustomFormatter.php
@@ -5,6 +5,7 @@
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
+use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
/**
* Plugin implementation of the 'Custom' formatter for 'datetime' fields.
@@ -35,27 +36,10 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
foreach ($items as $delta => $item) {
- $output = '';
if (!empty($item->date)) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $date */
- $date = $item->date;
-
- if ($this->getFieldSetting('datetime_type') == 'date') {
- // A date without time will pick up the current time, use the default.
- datetime_date_default_time($date);
- }
- $this->setTimeZone($date);
-
- $output = $this->formatDate($date);
+ $elements[$delta] = $this->buildDate($item->date) + $this->defaultCacheContext();
}
- $elements[$delta] = [
- '#markup' => $output,
- '#cache' => [
- 'contexts' => [
- 'timezone',
- ],
- ],
- ];
}
return $elements;
@@ -66,13 +50,30 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
*/
protected function formatDate($date) {
$format = $this->getSetting('date_format');
- $timezone = $this->getSetting('timezone_override');
+ $timezone = $this->getSetting('timezone_override') ?: $date->getTimezone()->getName();
return $this->dateFormatter->format($date->getTimestamp(), 'custom', $format, $timezone != '' ? $timezone : NULL);
}
/**
* {@inheritdoc}
*/
+ protected function buildDate($date) {
+ if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
+ // A date without time will pick up the current time, use the default.
+ datetime_date_default_time($date);
+ }
+ $this->setTimeZone($date);
+
+ $build = [
+ '#plain_text' => $this->formatDate($date),
+ ];
+
+ return $build;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
public function settingsForm(array $form, FormStateInterface $form_state) {
$form = parent::settingsForm($form, $form_state);
@@ -94,7 +95,7 @@ public function settingsSummary() {
$date = new DrupalDateTime();
$this->setTimeZone($date);
- $summary[] = $date->format($this->getSetting('date_format'), $this->getFormatSettings());
+ $summary[] = $this->t('Format: @display', ['@display' => $this->formatDate($date)]);
return $summary;
}
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php
index 03c92ae..0d3d2e8 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php
@@ -5,6 +5,7 @@
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
+use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
/**
* Plugin implementation of the 'Default' formatter for 'datetime' fields.
@@ -35,45 +36,17 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
foreach ($items as $delta => $item) {
- $output = '';
- $iso_date = '';
-
- if ($item->date) {
+ if (!empty($item->date)) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $date */
- $date = $item->date;
-
- if ($this->getFieldSetting('datetime_type') == 'date') {
- // A date without time will pick up the current time, use the default.
- datetime_date_default_time($date);
+ // Display the date using theme datetime.
+ $elements[$delta] = $this->buildDate($item->date) + $this->defaultCacheContext();
+
+ if (!empty($item->_attributes)) {
+ $elements[$delta]['#attributes'] += $item->_attributes;
+ // Unset field item attributes since they have been included in the
+ // formatter output and should not be rendered in the field template.
+ unset($item->_attributes);
}
-
- // Create the ISO date in Universal Time.
- $iso_date = $date->format("Y-m-d\TH:i:s") . 'Z';
-
- $this->setTimeZone($date);
-
- $output = $this->formatDate($date);
- }
-
- // Display the date using theme datetime.
- $elements[$delta] = array(
- '#cache' => [
- 'contexts' => [
- 'timezone',
- ],
- ],
- '#theme' => 'time',
- '#text' => $output,
- '#html' => FALSE,
- '#attributes' => array(
- 'datetime' => $iso_date,
- ),
- );
- if (!empty($item->_attributes)) {
- $elements[$delta]['#attributes'] += $item->_attributes;
- // Unset field item attributes since they have been included in the
- // formatter output and should not be rendered in the field template.
- unset($item->_attributes);
}
}
@@ -93,6 +66,32 @@ protected function formatDate($date) {
/**
* {@inheritdoc}
*/
+ protected function buildDate($date) {
+ if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
+ // A date without time will pick up the current time, use the default.
+ datetime_date_default_time($date);
+ }
+
+ // Create the ISO date in Universal Time.
+ $iso_date = $date->format("Y-m-d\TH:i:s") . 'Z';
+
+ $this->setTimeZone($date);
+
+ $build = [
+ '#theme' => 'time',
+ '#text' => $this->formatDate($date),
+ '#html' => FALSE,
+ '#attributes' => [
+ 'datetime' => $iso_date,
+ ],
+ ];
+
+ return $build;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
public function settingsForm(array $form, FormStateInterface $form_state) {
$form = parent::settingsForm($form, $form_state);
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
index be9df38..2546969 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
@@ -129,6 +129,47 @@ public function settingsSummary() {
abstract protected function formatDate($date);
/**
+ * Creates a render array from a data object.
+ *
+ * Note: the caller is responsible for setting the proper cache context, which
+ * is typically
+ * @code
+ * [
+ * '#cache' => [
+ * 'contexts' => [
+ * 'timezone',
+ * ],
+ * ]
+ * ]
+ * @endcode
+ * This is to allow this method to be used multiple times to create a render
+ * array, without creating redundant cache contexts for each element.
+ *
+ * @param \Drupal\Core\Datetime\DrupalDateTime $date
+ * A date object.
+ *
+ * @return array
+ * A render array.
+ */
+ abstract protected function buildDate($date);
+
+ /**
+ * Returns the default cache context for the formatter.
+ *
+ * @return array
+ * A render array.
+ */
+ protected function defaultCacheContext() {
+ return [
+ '#cache' => [
+ 'contexts' => [
+ 'timezone',
+ ],
+ ],
+ ];
+ }
+
+ /**
* Sets the proper time zone on a DrupalDateTime object for the current user.
*
* A DrupalDateTime object loaded from the database will have the UTC time
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimePlainFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimePlainFormatter.php
index 683d75c..0ee0da7 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimePlainFormatter.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimePlainFormatter.php
@@ -25,27 +25,10 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
foreach ($items as $delta => $item) {
- $output = '';
if (!empty($item->date)) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $date */
- $date = $item->date;
-
- if ($this->getFieldSetting('datetime_type') == 'date') {
- // A date without time will pick up the current time, use the default.
- datetime_date_default_time($date);
- }
- $this->setTimeZone($date);
-
- $output = $this->formatDate($date);
+ $elements[$delta] = $this->buildDate($item->date) + $this->defaultCacheContext();
}
- $elements[$delta] = [
- '#cache' => [
- 'contexts' => [
- 'timezone',
- ],
- ],
- '#markup' => $output,
- ];
}
return $elements;
@@ -56,8 +39,25 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
*/
protected function formatDate($date) {
$format = $this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT;
- $timezone = $this->getSetting('timezone_override');
+ $timezone = $this->getSetting('timezone_override') ?: $date->getTimezone()->getName();
return $this->dateFormatter->format($date->getTimestamp(), 'custom', $format, $timezone != '' ? $timezone : NULL);
}
+ /**
+ * {@inheritdoc}
+ */
+ protected function buildDate($date) {
+ if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
+ // A date without time will pick up the current time, use the default.
+ datetime_date_default_time($date);
+ }
+ $this->setTimeZone($date);
+
+ $build = [
+ '#plain_text' => $this->formatDate($date),
+ ];
+
+ return $build;
+ }
+
}
diff --git a/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeFieldItemList.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeFieldItemList.php
index d6dbf7d..f04efb1 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeFieldItemList.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeFieldItemList.php
@@ -11,17 +11,7 @@
/**
* Represents a configurable entity daterange field.
*/
-class DateRangeFieldItemList extends FieldItemList {
-
- /**
- * Defines the default value as now.
- */
- const DEFAULT_VALUE_NOW = 'now';
-
- /**
- * Defines the default value as relative.
- */
- const DEFAULT_VALUE_CUSTOM = 'relative';
+class DateRangeFieldItemList extends DateTimeFieldItemList {
/**
* {@inheritdoc}
@@ -30,50 +20,31 @@ public function defaultValuesForm(array &$form, FormStateInterface $form_state)
if (empty($this->getFieldDefinition()->getDefaultValueCallback())) {
$default_value = $this->getFieldDefinition()->getDefaultValueLiteral();
- $element = [
- '#parents' => ['default_value_input'],
- 'default_start_date_type' => [
- '#type' => 'select',
- '#title' => $this->t('Default start date'),
- '#description' => $this->t('Set a default value for the start date.'),
- '#default_value' => isset($default_value[0]['default_start_date_type']) ? $default_value[0]['default_start_date_type'] : '',
- '#options' => [
- static::DEFAULT_VALUE_NOW => $this->t('Current date'),
- static::DEFAULT_VALUE_CUSTOM => $this->t('Relative date'),
- ],
- '#empty_value' => '',
- ],
- 'default_start_date' => [
- '#type' => 'textfield',
- '#title' => $this->t('Relative default value'),
- '#description' => $this->t("Describe a time by reference to the current day, like '+90 days' (90 days from the day the field is created) or '+1 Saturday' (the next Saturday). See strtotime for more details."),
- '#default_value' => (isset($default_value[0]['default_start_date_type']) && $default_value[0]['default_start_date_type'] == static::DEFAULT_VALUE_CUSTOM) ? $default_value[0]['default_start_date'] : '',
- '#states' => [
- 'visible' => [
- ':input[id="edit-default-value-input-default-start-date-type"]' => ['value' => static::DEFAULT_VALUE_CUSTOM],
- ],
- ],
- ],
- 'default_end_date_type' => [
- '#type' => 'select',
- '#title' => $this->t('Default end date'),
- '#description' => $this->t('Set a default value for the end date.'),
- '#default_value' => isset($default_value[0]['default_end_date_type']) ? $default_value[0]['default_end_date_type'] : '',
- '#options' => [
- static::DEFAULT_VALUE_NOW => $this->t('Current date'),
- static::DEFAULT_VALUE_CUSTOM => $this->t('Relative date'),
- ],
- '#empty_value' => '',
+ $element = parent::defaultValuesForm($form, $form_state);
+
+ $element['default_date_type']['#title'] = $this->t('Default start date');
+ $element['default_date_type']['#description'] = $this->t('Set a default value for the start date.');
+
+ $element['default_end_date_type'] = [
+ '#type' => 'select',
+ '#title' => $this->t('Default end date'),
+ '#description' => $this->t('Set a default value for the end date.'),
+ '#default_value' => isset($default_value[0]['default_end_date_type']) ? $default_value[0]['default_end_date_type'] : '',
+ '#options' => [
+ static::DEFAULT_VALUE_NOW => $this->t('Current date'),
+ static::DEFAULT_VALUE_CUSTOM => $this->t('Relative date'),
],
- 'default_end_date' => [
- '#type' => 'textfield',
- '#title' => $this->t('Relative default value'),
- '#description' => $this->t("Describe a time by reference to the current day, like '+90 days' (90 days from the day the field is created) or '+1 Saturday' (the next Saturday). See strtotime for more details."),
- '#default_value' => (isset($default_value[0]['default_end_date_type']) && $default_value[0]['default_end_date_type'] == static::DEFAULT_VALUE_CUSTOM) ? $default_value[0]['default_end_date'] : '',
- '#states' => [
- 'visible' => [
- ':input[id="edit-default-value-input-default-end-date-type"]' => ['value' => static::DEFAULT_VALUE_CUSTOM],
- ],
+ '#empty_value' => '',
+ ];
+
+ $element['default_end_date'] = [
+ '#type' => 'textfield',
+ '#title' => $this->t('Relative default value'),
+ '#description' => $this->t("Describe a time by reference to the current day, like '+90 days' (90 days from the day the field is created) or '+1 Saturday' (the next Saturday). See strtotime for more details."),
+ '#default_value' => (isset($default_value[0]['default_end_date_type']) && $default_value[0]['default_end_date_type'] == static::DEFAULT_VALUE_CUSTOM) ? $default_value[0]['default_end_date'] : '',
+ '#states' => [
+ 'visible' => [
+ ':input[id="edit-default-value-input-default-end-date-type"]' => ['value' => static::DEFAULT_VALUE_CUSTOM],
],
],
];
@@ -86,10 +57,10 @@ public function defaultValuesForm(array &$form, FormStateInterface $form_state)
* {@inheritdoc}
*/
public function defaultValuesFormValidate(array $element, array &$form, FormStateInterface $form_state) {
- if ($form_state->getValue(['default_value_input', 'default_start_date_type']) == static::DEFAULT_VALUE_CUSTOM) {
- $is_strtotime = @strtotime($form_state->getValue(['default_value_input', 'default_start_date']));
+ if ($form_state->getValue(['default_value_input', 'default_date_type']) == static::DEFAULT_VALUE_CUSTOM) {
+ $is_strtotime = @strtotime($form_state->getValue(['default_value_input', 'default_date']));
if (!$is_strtotime) {
- $form_state->setErrorByName('default_value_input][default_start_date', $this->t('The relative start date value entered is invalid.'));
+ $form_state->setErrorByName('default_value_input][default_date', $this->t('The relative start date value entered is invalid.'));
}
}
@@ -105,9 +76,9 @@ public function defaultValuesFormValidate(array $element, array &$form, FormStat
* {@inheritdoc}
*/
public function defaultValuesFormSubmit(array $element, array &$form, FormStateInterface $form_state) {
- if ($form_state->getValue(['default_value_input', 'default_start_date_type']) && $form_state->getValue(['default_value_input', 'default_end_date_type'])) {
- if ($form_state->getValue(['default_value_input', 'default_start_date_type']) == static::DEFAULT_VALUE_NOW) {
- $form_state->setValueForElement($element['default_start_date'], static::DEFAULT_VALUE_NOW);
+ if ($form_state->getValue(['default_value_input', 'default_date_type']) || $form_state->getValue(['default_value_input', 'default_end_date_type'])) {
+ if ($form_state->getValue(['default_value_input', 'default_date_type']) == static::DEFAULT_VALUE_NOW) {
+ $form_state->setValueForElement($element['default_date'], static::DEFAULT_VALUE_NOW);
}
if ($form_state->getValue(['default_value_input', 'default_end_date_type']) == static::DEFAULT_VALUE_NOW) {
$form_state->setValueForElement($element['default_end_date'], static::DEFAULT_VALUE_NOW);
@@ -121,28 +92,36 @@ public function defaultValuesFormSubmit(array $element, array &$form, FormStateI
* {@inheritdoc}
*/
public static function processDefaultValue($default_value, FieldableEntityInterface $entity, FieldDefinitionInterface $definition) {
- $default_value = parent::processDefaultValue($default_value, $entity, $definition);
+ // Explicitly call the base class so tht we can get the default value types.
+ $default_value = FieldItemList::processDefaultValue($default_value, $entity, $definition);
- if (isset($default_value[0]['default_start_date_type']) && isset($default_value[0]['default_end_date_type'])) {
+ // Allow either the start or end date to have a default, but not the other.
+ if (!empty($default_value[0]['default_date_type']) || !empty($default_value[0]['default_end_date_type'])) {
// A default value should be in the format and timezone used for date
- // storage. All-day ranges are stored the same as date+time ranges.
- $storage_format = $definition->getSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT;
- $start_date = new DrupalDateTime($default_value[0]['default_start_date'], DATETIME_STORAGE_TIMEZONE);
- $start_value = $start_date->format($storage_format);
- $end_date = new DrupalDateTime($default_value[0]['default_end_date'], DATETIME_STORAGE_TIMEZONE);
- $end_value = $end_date->format($storage_format);
- // We only provide a default value for the first item, as do all fields.
+ // storage. All-day ranges are stored the same as date+time ranges. We
+ // only provide a default value for the first item, as do all fields.
// Otherwise, there is no way to clear out unwanted values on multiple
// value fields.
- $default_value = [
- [
- 'value' => $start_value,
- 'start_date' => $start_date,
- 'value2' => $end_value,
- 'end_date' => $end_date,
- ],
- ];
+ $storage_format = $definition->getSetting('datetime_type') == DateRangeItem::DATETIME_TYPE_DATE ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT;
+ $default_values = [[]];
+
+ if (!empty($default_value[0]['default_date_type'])) {
+ $start_date = new DrupalDateTime($default_value[0]['default_date'], DATETIME_STORAGE_TIMEZONE);
+ $start_value = $start_date->format($storage_format);
+ $default_values[0]['value'] = $start_value;
+ $default_values[0]['start_date'] = $start_date;
+ }
+
+ if (!empty($default_value[0]['default_end_date_type'])) {
+ $end_date = new DrupalDateTime($default_value[0]['default_end_date'], DATETIME_STORAGE_TIMEZONE);
+ $end_value = $end_date->format($storage_format);
+ $default_values[0]['end_value'] = $end_value;
+ $default_values[0]['end_date'] = $end_date;
+ }
+
+ $default_value = $default_values;
}
+
return $default_value;
}
diff --git a/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeItem.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeItem.php
index d95f2f9..3ab96ad 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeItem.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeItem.php
@@ -6,7 +6,6 @@
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\TypedData\DataDefinition;
-use Drupal\Core\Field\FieldItemBase;
use Drupal\datetime\DateTimeComputed;
/**
@@ -21,31 +20,12 @@
* list_class = "\Drupal\datetime\Plugin\Field\FieldType\DateRangeFieldItemList"
* )
*/
-class DateRangeItem extends FieldItemBase {
+class DateRangeItem extends DateTimeItem {
/**
- * {@inheritdoc}
- */
- public static function defaultStorageSettings() {
- return [
- 'daterange_type' => 'datetime',
- ] + parent::defaultStorageSettings();
- }
-
- /**
- * Value for the 'daterange_type' setting: store only a date.
- */
- const DATERANGE_TYPE_DATE = 'date';
-
- /**
- * Value for the 'daterange_type' setting: store a date and time.
- */
- const DATERANGE_TYPE_DATETIME = 'datetime';
-
- /**
- * Value for the 'daterange_type' setting: store a date and time.
+ * Value for the 'datetime_type' setting: store a date and time.
*/
- const DATERANGE_TYPE_ALLDAY = 'allday';
+ const DATETIME_TYPE_ALLDAY = 'allday';
/**
* {@inheritdoc}
@@ -62,7 +42,7 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel
->setClass(DateTimeComputed::class)
->setSetting('date source', 'value');
- $properties['value2'] = DataDefinition::create('datetime_iso8601')
+ $properties['end_value'] = DataDefinition::create('datetime_iso8601')
->setLabel(t('End date value'))
->setRequired(TRUE);
@@ -71,7 +51,7 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel
->setDescription(t('The computed end DateTime object.'))
->setComputed(TRUE)
->setClass(DateTimeComputed::class)
- ->setSetting('date source', 'value2');
+ ->setSetting('date source', 'end_value');
return $properties;
}
@@ -80,44 +60,26 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel
* {@inheritdoc}
*/
public static function schema(FieldStorageDefinitionInterface $field_definition) {
- return [
- 'columns' => [
- 'value' => [
- 'description' => 'The start date value.',
- 'type' => 'varchar',
- 'length' => 20,
- ],
- 'value2' => [
- 'description' => 'The end date value.',
- 'type' => 'varchar',
- 'length' => 20,
- ],
- ],
- 'indexes' => [
- 'value' => ['value'],
- 'value2' => ['value2'],
- ],
- ];
+ $schema = parent::schema($field_definition);
+
+ $schema['columns']['value']['description'] = 'The start date value.';
+
+ $schema['columns']['end_value'] = [
+ 'description' => 'The end date value.',
+ ] + $schema['columns']['value'];
+
+ $schema['indexes']['end_value'] = ['end_value'];
+
+ return $schema;
}
/**
* {@inheritdoc}
*/
public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) {
- $element = [];
-
- $element['daterange_type'] = [
- '#type' => 'select',
- '#title' => $this->t('Date type'),
- '#description' => $this->t('Choose the type of date to create.'),
- '#default_value' => $this->getSetting('daterange_type'),
- '#options' => [
- static::DATERANGE_TYPE_DATETIME => $this->t('Date and time'),
- static::DATERANGE_TYPE_DATE => $this->t('Date only'),
- static::DATERANGE_TYPE_ALLDAY => $this->t('All Day'),
- ],
- '#disabled' => $has_data,
- ];
+ $element = parent::storageSettingsForm($form, $form_state, $has_data);
+
+ $element['datetime_type']['#options'][static::DATETIME_TYPE_ALLDAY] = $this->t('All Day');
return $element;
}
@@ -126,23 +88,19 @@ public function storageSettingsForm(array &$form, FormStateInterface $form_state
* {@inheritdoc}
*/
public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
- $type = $field_definition->getSetting('daterange_type');
+ $type = $field_definition->getSetting('datetime_type');
// Just pick a date in the past year. No guidance is provided by this Field
// type.
$start = REQUEST_TIME - mt_rand(0, 86400 * 365) - 86400;
$end = $start + 86400;
- if ($type == static::DATERANGE_TYPE_DATE) {
- $values['value'] = gmdate(DATETIME_DATE_STORAGE_FORMAT, $start);
- $values['value2'] = gmdate(DATETIME_DATE_STORAGE_FORMAT, $end);
- }
- elseif ($type == static::DATERANGE_TYPE_ALLDAY) {
- $values['value'] = gmdate(DATETIME_DATE_STORAGE_FORMAT, $start);
- $values['value2'] = gmdate(DATETIME_DATE_STORAGE_FORMAT, $end);
+ if ($type == static::DATETIME_TYPE_DATETIME) {
+ $values['value'] = gmdate(DATETIME_DATETIME_STORAGE_FORMAT, $start);
+ $values['end_value'] = gmdate(DATETIME_DATETIME_STORAGE_FORMAT, $end);
}
else {
- $values['value'] = gmdate(DATETIME_DATETIME_STORAGE_FORMAT, $start);
- $values['value2'] = gmdate(DATETIME_DATETIME_STORAGE_FORMAT, $end);
+ $values['value'] = gmdate(DATETIME_DATE_STORAGE_FORMAT, $start);
+ $values['end_value'] = gmdate(DATETIME_DATE_STORAGE_FORMAT, $end);
}
return $values;
}
@@ -152,7 +110,7 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin
*/
public function isEmpty() {
$start_value = $this->get('value')->getValue();
- $end_value = $this->get('value2')->getValue();
+ $end_value = $this->get('end_value')->getValue();
return ($start_value === NULL || $start_value === '') && ($end_value === NULL || $end_value === '');
}
@@ -164,7 +122,7 @@ public function onChange($property_name, $notify = TRUE) {
if ($property_name == 'value') {
$this->start_date = NULL;
}
- elseif ($property_name == 'value2') {
+ elseif ($property_name == 'end_value') {
$this->end_date = NULL;
}
parent::onChange($property_name, $notify);
diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php
index d538f3b..65e8edd 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php
@@ -38,7 +38,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
$date_order = $this->getSetting('date_order');
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATETIME) {
+ if ($this->getFieldSetting('datetime_type') == DateRangeItem::DATETIME_TYPE_DATETIME) {
$time_type = $this->getSetting('time_type');
$increment = $this->getSetting('increment');
}
@@ -81,11 +81,11 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
'#date_part_order' => $date_part_order,
] + $element['value'];
- $element['value2'] = [
+ $element['end_value'] = [
'#type' => 'datelist',
'#date_increment' => $increment,
'#date_part_order' => $date_part_order,
- ] + $element['value2'];
+ ] + $element['end_value'];
return $element;
}
@@ -103,7 +103,7 @@ function settingsForm(array $form, FormStateInterface $form_state) {
'#options' => ['MDY' => $this->t('Month/Day/Year'), 'DMY' => $this->t('Day/Month/Year'), 'YMD' => $this->t('Year/Month/Day')],
];
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATETIME) {
+ if ($this->getFieldSetting('datetime_type') == DateRangeItem::DATETIME_TYPE_DATETIME) {
$element['time_type'] = [
'#type' => 'select',
'#title' => $this->t('Time type'),
@@ -146,7 +146,7 @@ public function settingsSummary() {
$summary = [];
$summary[] = $this->t('Date part order: @order', ['@order' => $this->getSetting('date_order')]);
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATETIME) {
+ if ($this->getFieldSetting('datetime_type') == DateRangeItem::DATETIME_TYPE_DATETIME) {
$summary[] = $this->t('Time type: @time_type', ['@time_type' => $this->getSetting('time_type')]);
$summary[] = $this->t('Time increments: @increment', ['@increment' => $this->getSetting('increment')]);
}
diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDefaultWidget.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDefaultWidget.php
index 7d5cb8c..bd311d2 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDefaultWidget.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDefaultWidget.php
@@ -60,15 +60,9 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
$element = parent::formElement($items, $delta, $element, $form, $form_state);
// Identify the type of date and time elements to use.
- switch ($this->getFieldSetting('daterange_type')) {
- case DateRangeItem::DATERANGE_TYPE_DATE:
- $date_type = 'date';
- $time_type = 'none';
- $date_format = $this->dateStorage->load('html_date')->getPattern();
- $time_format = '';
- break;
-
- case DateRangeItem::DATERANGE_TYPE_ALLDAY:
+ switch ($this->getFieldSetting('datetime_type')) {
+ case DateRangeItem::DATETIME_TYPE_DATE:
+ case DateRangeItem::DATETIME_TYPE_ALLDAY:
$date_type = 'date';
$time_type = 'none';
$date_format = $this->dateStorage->load('html_date')->getPattern();
@@ -92,7 +86,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
'#date_time_callbacks' => [],
];
- $element['value2'] += [
+ $element['end_value'] += [
'#date_date_format' => $date_format,
'#date_date_element' => $date_type,
'#date_date_callbacks' => [],
diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php
index d8349be..ce0964d 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php
@@ -4,80 +4,36 @@
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemListInterface;
-use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\datetime\Plugin\Field\FieldType\DateRangeItem;
/**
* Base class for the 'daterange_*' widgets.
*/
-class DateRangeWidgetBase extends WidgetBase {
+class DateRangeWidgetBase extends DateTimeWidgetBase {
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
- // We are nesting some sub-elements inside the parent, so we need a wrapper.
- // We also need to add another #title attribute at the top level for ease in
- // identifying this item in error messages. We do not want to display this
- // title because the actual title display is handled at a higher level by
- // the Field module.
-
- $element['#theme_wrappers'][] = 'datetime_wrapper';
- $element['#attributes']['class'][] = 'container-inline';
+ $element = parent::formElement($items, $delta, $element, $form, $form_state);
$element['#element_validate'][] = [$this, 'validateStartEnd'];
+ $element['value']['#title'] = $this->t('Start');
- $element['value'] = [
- '#title' => $this->t('Start'),
- '#type' => 'datetime',
- '#default_value' => NULL,
- '#date_increment' => 1,
- '#date_timezone' => drupal_get_user_timezone(),
- '#required' => $element['#required'],
- ];
-
- $element['value2'] = [
+ $element['end_value'] = [
'#title' => $this->t('End'),
- '#type' => 'datetime',
- '#default_value' => NULL,
- '#date_increment' => 1,
- '#date_timezone' => drupal_get_user_timezone(),
- '#required' => $element['#required'],
- ];
-
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE) {
- // A date-only field should have no timezone conversion performed, so
- // use the same timezone as for storage.
- $element['value']['#date_timezone'] = DATETIME_STORAGE_TIMEZONE;
- $element['value2']['#date_timezone'] = DATETIME_STORAGE_TIMEZONE;
- }
+ ] + $element['value'];
if ($items[$delta]->start_date) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */
$start_date = $items[$delta]->start_date;
- // The date was created and verified during field_load(), so it is safe to
- // use without further inspection.
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE) {
- // A date without time will pick up the current time, use the default
- // time.
- datetime_date_default_time($start_date);
- }
- $start_date->setTimezone(new \DateTimeZone($element['value']['#date_timezone']));
- $element['value']['#default_value'] = $start_date;
+ $element['value']['#default_value'] = $this->createDefaultValue($start_date, $element['value']['#date_timezone']);
}
if ($items[$delta]->end_date) {
- /** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */
+ /** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */
$end_date = $items[$delta]->end_date;
- // The date was created and verified during field_load(), so it is safe to
- // use without further inspection.
- if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE) {
- // A date without time will pick up the current time, use the default
- // time.
- datetime_date_default_time($end_date);
- }
- $end_date->setTimezone(new \DateTimeZone($element['value2']['#date_timezone']));
- $element['value2']['#default_value'] = $end_date;
+ $element['end_value']['#default_value'] = $this->createDefaultValue($end_date, $element['end_value']['#date_timezone']);
}
return $element;
@@ -94,16 +50,16 @@ public function massageFormValues(array $values, array $form, FormStateInterface
if (!empty($item['value']) && $item['value'] instanceof DrupalDateTime) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */
$start_date = $item['value'];
- switch ($this->getFieldSetting('daterange_type')) {
- case DateRangeItem::DATERANGE_TYPE_DATE:
+ switch ($this->getFieldSetting('datetime_type')) {
+ case DateRangeItem::DATETIME_TYPE_DATE:
// If this is a date-only field, set it to the default time so the
// timezone conversion can be reversed.
datetime_date_default_time($start_date);
$format = DATETIME_DATE_STORAGE_FORMAT;
break;
- case DateRangeItem::DATERANGE_TYPE_ALLDAY:
- // All day field start at midnight on the starting date, but are
+ case DateRangeItem::DATETIME_TYPE_ALLDAY:
+ // All day fields start at midnight on the starting date, but are
// stored like datetime fields, so we need to adjust the time.
// This function is called twice, so to prevent a double conversion
// we need to explicitly set the timezone.
@@ -121,19 +77,19 @@ public function massageFormValues(array $values, array $form, FormStateInterface
$item['value'] = $start_date->format($format);
}
- if (!empty($item['value2']) && $item['value2'] instanceof DrupalDateTime) {
+ if (!empty($item['end_value']) && $item['end_value'] instanceof DrupalDateTime) {
/** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */
- $end_date = $item['value2'];
- switch ($this->getFieldSetting('daterange_type')) {
- case DateRangeItem::DATERANGE_TYPE_DATE:
+ $end_date = $item['end_value'];
+ switch ($this->getFieldSetting('datetime_type')) {
+ case DateRangeItem::DATETIME_TYPE_DATE:
// If this is a date-only field, set it to the default time so the
// timezone conversion can be reversed.
datetime_date_default_time($end_date);
$format = DATETIME_DATE_STORAGE_FORMAT;
break;
- case DateRangeItem::DATERANGE_TYPE_ALLDAY:
- // All day field end at midnight on the end date, but are
+ case DateRangeItem::DATETIME_TYPE_ALLDAY:
+ // All day fields end at midnight on the end date, but are
// stored like datetime fields, so we need to adjust the time.
// This function is called twice, so to prevent a double conversion
// we need to explicitly set the timezone.
@@ -148,7 +104,7 @@ public function massageFormValues(array $values, array $form, FormStateInterface
}
// Adjust the date for storage.
$end_date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE));
- $item['value2'] = $end_date->format($format);
+ $item['end_value'] = $end_date->format($format);
}
}
@@ -168,7 +124,7 @@ public function massageFormValues(array $values, array $form, FormStateInterface
*/
public function validateStartEnd(&$element, FormStateInterface $form_state, &$complete_form) {
$start_date = $element['value']['#value']['object'];
- $end_date = $element['value2']['#value']['object'];
+ $end_date = $element['end_value']['#value']['object'];
if ($start_date instanceof DrupalDateTime && $end_date instanceof DrupalDateTime) {
if ($start_date->format('U') !== $end_date->format('U')) {
diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php
index aa6175a..054d3e0 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php
@@ -41,16 +41,9 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
}
if ($items[$delta]->date) {
+ /** @var \Drupal\Core\Datetime\DrupalDateTime $date */
$date = $items[$delta]->date;
- // The date was created and verified during field_load(), so it is safe to
- // use without further inspection.
- if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
- // A date without time will pick up the current time, use the default
- // time.
- datetime_date_default_time($date);
- }
- $date->setTimezone(new \DateTimeZone($element['value']['#date_timezone']));
- $element['value']['#default_value'] = $date;
+ $element['value']['#default_value'] = $this->createDefaultValue($date, $element['value']['#date_timezone']);
}
return $element;
@@ -86,4 +79,30 @@ public function massageFormValues(array $values, array $form, FormStateInterface
return $values;
}
+ /**
+ * Creates a date object for use as a default value.
+ *
+ * This will take a default value, apply the proper timezone for display in
+ * a widget, and set the default time for date-only fields.
+ *
+ * @param \Drupal\Core\Datetime\DrupalDateTime $date
+ * The UTC default date.
+ * @param string $timezone
+ * The timezone to apply.
+ *
+ * @return \Drupal\Core\Datetime\DrupalDateTime
+ * A date object for use as a default value in a field widget.
+ */
+ protected function createDefaultValue($date, $timezone) {
+ // The date was created and verified during field_load(), so it is safe to
+ // use without further inspection.
+ if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
+ // A date without time will pick up the current time, use the default
+ // time.
+ datetime_date_default_time($date);
+ }
+ $date->setTimezone(new \DateTimeZone($timezone));
+ return $date;
+ }
+
}
diff --git a/core/modules/datetime/src/Tests/DateRangeFieldTest.php b/core/modules/datetime/src/Tests/DateRangeFieldTest.php
index 7e90d90..be31cbe 100644
--- a/core/modules/datetime/src/Tests/DateRangeFieldTest.php
+++ b/core/modules/datetime/src/Tests/DateRangeFieldTest.php
@@ -105,7 +105,7 @@ protected function setUp() {
'field_name' => $field_name,
'entity_type' => 'entity_test',
'type' => 'daterange',
- 'settings' => ['daterange_type' => DateRangeItem::DATERANGE_TYPE_DATE],
+ 'settings' => ['datetime_type' => DateRangeItem::DATETIME_TYPE_DATE],
]);
$this->fieldStorage->save();
$this->field = FieldConfig::create([
@@ -151,22 +151,22 @@ public function testDateRangeField() {
$this->setSiteTimezone($timezone);
// Ensure field is set to a date-only field.
- $this->fieldStorage->setSetting('daterange_type', DateRangeItem::DATERANGE_TYPE_DATE);
+ $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_DATE);
$this->fieldStorage->save();
// Display creation form.
$this->drupalGet('entity_test/add');
$this->assertFieldByName("{$field_name}[0][value][date]", '', 'Start date element found.');
- $this->assertFieldByName("{$field_name}[0][value2][date]", '', 'End date element found.');
+ $this->assertFieldByName("{$field_name}[0][end_value][date]", '', 'End date element found.');
$this->assertFieldByXPath('//*[@id="edit-' . $field_name . '-wrapper"]/h4[contains(@class, "js-form-required")]', TRUE, 'Required markup found');
$this->assertNoFieldByName("{$field_name}[0][value][time]", '', 'Start time element not found.');
- $this->assertNoFieldByName("{$field_name}[0][value2][time]", '', 'End time element not found.');
+ $this->assertNoFieldByName("{$field_name}[0][end_value][time]", '', 'End time element not found.');
// Build up dates in the UTC timezone.
$value = '2012-12-31 00:00:00';
$start_date = new DrupalDateTime($value, 'UTC');
- $value2 = '2013-06-06 00:00:00';
- $end_date = new DrupalDateTime($value2, 'UTC');
+ $end_value = '2013-06-06 00:00:00';
+ $end_date = new DrupalDateTime($end_value, 'UTC');
// Submit a valid date and ensure it is accepted.
$date_format = DateFormat::load('html_date')->getPattern();
@@ -174,7 +174,7 @@ public function testDateRangeField() {
$edit = array(
"{$field_name}[0][value][date]" => $start_date->format($date_format),
- "{$field_name}[0][value2][date]" => $end_date->format($date_format),
+ "{$field_name}[0][end_value][date]" => $end_date->format($date_format),
);
$this->drupalPostForm(NULL, $edit, t('Save'));
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
@@ -188,7 +188,7 @@ public function testDateRangeField() {
// Verify the date doesn't change when entity is edited through the form.
$entity = EntityTest::load($id);
$this->assertEqual('2012-12-31', $entity->{$field_name}->value);
- $this->assertEqual('2013-06-06', $entity->{$field_name}->value2);
+ $this->assertEqual('2013-06-06', $entity->{$field_name}->end_value);
$this->drupalGet('entity_test/manage/' . $id . '/edit');
$this->drupalPostForm(NULL, [], t('Save'));
$this->drupalGet('entity_test/manage/' . $id . '/edit');
@@ -197,7 +197,7 @@ public function testDateRangeField() {
$this->drupalPostForm(NULL, [], t('Save'));
$entity = EntityTest::load($id);
$this->assertEqual('2012-12-31', $entity->{$field_name}->value);
- $this->assertEqual('2013-06-06', $entity->{$field_name}->value2);
+ $this->assertEqual('2013-06-06', $entity->{$field_name}->end_value);
// Formats that display a time component for date-only fields will display
// the default time, so that is applied before calculating the expected
@@ -266,21 +266,21 @@ public function testDatetimeRangeField() {
$field_name = $this->fieldStorage->getName();
// Ensure the field to a datetime field.
- $this->fieldStorage->setSetting('daterange_type', DateRangeItem::DATERANGE_TYPE_DATETIME);
+ $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_DATETIME);
$this->fieldStorage->save();
// Display creation form.
$this->drupalGet('entity_test/add');
$this->assertFieldByName("{$field_name}[0][value][date]", '', 'Start date element found.');
$this->assertFieldByName("{$field_name}[0][value][time]", '', 'Start time element found.');
- $this->assertFieldByName("{$field_name}[0][value2][date]", '', 'End date element found.');
- $this->assertFieldByName("{$field_name}[0][value2][time]", '', 'End time element found.');
+ $this->assertFieldByName("{$field_name}[0][end_value][date]", '', 'End date element found.');
+ $this->assertFieldByName("{$field_name}[0][end_value][time]", '', 'End time element found.');
// Build up dates in the UTC timezone.
$value = '2012-12-31 00:00:00';
$start_date = new DrupalDateTime($value, 'UTC');
- $value2 = '2013-06-06 00:00:00';
- $end_date = new DrupalDateTime($value2, 'UTC');
+ $end_value = '2013-06-06 00:00:00';
+ $end_date = new DrupalDateTime($end_value, 'UTC');
// Update the timezone to the system default.
$start_date->setTimezone(timezone_open(drupal_get_user_timezone()));
@@ -293,8 +293,8 @@ public function testDatetimeRangeField() {
$edit = array(
"{$field_name}[0][value][date]" => $start_date->format($date_format),
"{$field_name}[0][value][time]" => $start_date->format($time_format),
- "{$field_name}[0][value2][date]" => $end_date->format($date_format),
- "{$field_name}[0][value2][time]" => $end_date->format($time_format),
+ "{$field_name}[0][end_value][date]" => $end_date->format($date_format),
+ "{$field_name}[0][end_value][time]" => $end_date->format($time_format),
);
$this->drupalPostForm(NULL, $edit, t('Save'));
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
@@ -362,22 +362,22 @@ public function testAlldayRangeField() {
$field_name = $this->fieldStorage->getName();
// Ensure field is set to a all-day field.
- $this->fieldStorage->setSetting('daterange_type', DateRangeItem::DATERANGE_TYPE_ALLDAY);
+ $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_ALLDAY);
$this->fieldStorage->save();
// Display creation form.
$this->drupalGet('entity_test/add');
$this->assertFieldByName("{$field_name}[0][value][date]", '', 'Start date element found.');
- $this->assertFieldByName("{$field_name}[0][value2][date]", '', 'End date element found.');
+ $this->assertFieldByName("{$field_name}[0][end_value][date]", '', 'End date element found.');
$this->assertFieldByXPath('//*[@id="edit-' . $field_name . '-wrapper"]/h4[contains(@class, "js-form-required")]', TRUE, 'Required markup found');
$this->assertNoFieldByName("{$field_name}[0][value][time]", '', 'Start time element not found.');
- $this->assertNoFieldByName("{$field_name}[0][value2][time]", '', 'End time element not found.');
+ $this->assertNoFieldByName("{$field_name}[0][end_value][time]", '', 'End time element not found.');
// Build up dates in the proper timezone.
$value = '2012-12-31 00:00:00';
$start_date = new DrupalDateTime($value, timezone_open(drupal_get_user_timezone()));
- $value2 = '2013-06-06 23:59:59';
- $end_date = new DrupalDateTime($value2, timezone_open(drupal_get_user_timezone()));
+ $end_value = '2013-06-06 23:59:59';
+ $end_date = new DrupalDateTime($end_value, timezone_open(drupal_get_user_timezone()));
// Submit a valid date and ensure it is accepted.
$date_format = DateFormat::load('html_date')->getPattern();
@@ -385,7 +385,7 @@ public function testAlldayRangeField() {
$edit = array(
"{$field_name}[0][value][date]" => $start_date->format($date_format),
- "{$field_name}[0][value2][date]" => $end_date->format($date_format),
+ "{$field_name}[0][end_value][date]" => $end_date->format($date_format),
);
$this->drupalPostForm(NULL, $edit, t('Save'));
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
@@ -453,7 +453,7 @@ public function testDatelistWidget() {
$field_name = $this->fieldStorage->getName();
// Ensure field is set to a date only field.
- $this->fieldStorage->setSetting('daterange_type', DateRangeItem::DATERANGE_TYPE_DATE);
+ $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_DATE);
$this->fieldStorage->save();
// Change the widget to a datelist widget.
@@ -473,8 +473,8 @@ public function testDatelistWidget() {
// Assert that Hour and Minute Elements do not appear on Date Only
$this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value-hour\"]", NULL, 'Hour element not found on Date Only.');
$this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value-minute\"]", NULL, 'Minute element not found on Date Only.');
- $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value2-hour\"]", NULL, 'Hour element not found on Date Only.');
- $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value2-minute\"]", NULL, 'Minute element not found on Date Only.');
+ $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-end-value-hour\"]", NULL, 'Hour element not found on Date Only.');
+ $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-end-value-minute\"]", NULL, 'Minute element not found on Date Only.');
// Go to the form display page to assert that increment option does not appear on Date Only
$fieldEditUrl = 'entity_test/structure/entity_test/form-display';
@@ -486,7 +486,7 @@ public function testDatelistWidget() {
$this->assertNoFieldByXPath($xpathIncr, NULL, 'Increment element not found for Date Only.');
// Change the field is set to an all day field.
- $this->fieldStorage->setSetting('daterange_type', DateRangeItem::DATERANGE_TYPE_ALLDAY);
+ $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_ALLDAY);
$this->fieldStorage->save();
// Change the widget to a datelist widget.
@@ -506,8 +506,8 @@ public function testDatelistWidget() {
// Assert that Hour and Minute Elements do not appear on Date Only
$this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value-hour\"]", NULL, 'Hour element not found on Date Only.');
$this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value-minute\"]", NULL, 'Minute element not found on Date Only.');
- $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value2-hour\"]", NULL, 'Hour element not found on Date Only.');
- $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value2-minute\"]", NULL, 'Minute element not found on Date Only.');
+ $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-end-value-hour\"]", NULL, 'Hour element not found on Date Only.');
+ $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-end-value-minute\"]", NULL, 'Minute element not found on Date Only.');
// Go to the form display page to assert that increment option does not appear on Date Only
$fieldEditUrl = 'entity_test/structure/entity_test/form-display';
@@ -519,7 +519,7 @@ public function testDatelistWidget() {
$this->assertNoFieldByXPath($xpathIncr, NULL, 'Increment element not found for Date Only.');
// Change the field to a datetime field.
- $this->fieldStorage->setSetting('daterange_type', DateRangeItem::DATERANGE_TYPE_DATETIME);
+ $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_DATETIME);
$this->fieldStorage->save();
// Change the widget to a datelist widget.
@@ -546,7 +546,7 @@ public function testDatelistWidget() {
// Display creation form.
$this->drupalGet('entity_test/add');
- foreach (['value','value2'] as $column) {
+ foreach (['value','end-value'] as $column) {
foreach (['year', 'month', 'day', 'hour', 'minute', 'ampm'] as $element) {
$this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-$column-$element\"]", NULL, $element . ' element found.');
$this->assertOptionSelected("edit-$field_name-0-$column-$element", '', 'No ' . $element . ' selected.');
@@ -565,7 +565,7 @@ public function testDatelistWidget() {
$edit["{$field_name}[0][value][$part]"] = $value;
}
foreach ($end_date_value as $part => $value) {
- $edit["{$field_name}[0][value2][$part]"] = $value;
+ $edit["{$field_name}[0][end_value][$part]"] = $value;
}
$this->drupalPostForm(NULL, $edit, t('Save'));
@@ -580,12 +580,12 @@ public function testDatelistWidget() {
$this->assertOptionSelected("edit-$field_name-0-value-minute", '15', 'Correct minute selected.');
$this->assertOptionSelected("edit-$field_name-0-value-ampm", 'am', 'Correct ampm selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-year", '2013', 'Correct year selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-month", '1', 'Correct month selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-day", '15', 'Correct day selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-hour", '3', 'Correct hour selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-minute", '30', 'Correct minute selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-ampm", 'pm', 'Correct ampm selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-year", '2013', 'Correct year selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-month", '1', 'Correct month selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-day", '15', 'Correct day selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-hour", '3', 'Correct hour selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-minute", '30', 'Correct minute selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-ampm", 'pm', 'Correct ampm selected.');
// Test the widget using increment other than 1 and 24 hour mode.
entity_get_form_display($this->field->getTargetEntityTypeId(), $this->field->getTargetBundle(), 'default')
@@ -607,9 +607,9 @@ public function testDatelistWidget() {
$this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-hour\"]", NULL, 'Hour element found.');
$this->assertOptionSelected("edit-$field_name-0-value-hour", '', 'No hour selected.');
$this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value-ampm\"]", NULL, 'AMPM element not found.');
- $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value2-hour\"]", NULL, 'Hour element found.');
- $this->assertOptionSelected("edit-$field_name-0-value2-hour", '', 'No hour selected.');
- $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value2-ampm\"]", NULL, 'AMPM element not found.');
+ $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-end-value-hour\"]", NULL, 'Hour element found.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-hour", '', 'No hour selected.');
+ $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-end-value-ampm\"]", NULL, 'AMPM element not found.');
// Submit a valid date and ensure it is accepted.
$start_date_value = ['year' => 2012, 'month' => 12, 'day' => 31, 'hour' => 17, 'minute' => 15];
@@ -620,7 +620,7 @@ public function testDatelistWidget() {
$edit["{$field_name}[0][value][$part]"] = $value;
}
foreach ($end_date_value as $part => $value) {
- $edit["{$field_name}[0][value2][$part]"] = $value;
+ $edit["{$field_name}[0][end_value][$part]"] = $value;
}
$this->drupalPostForm(NULL, $edit, t('Save'));
@@ -634,11 +634,11 @@ public function testDatelistWidget() {
$this->assertOptionSelected("edit-$field_name-0-value-hour", '17', 'Correct hour selected.');
$this->assertOptionSelected("edit-$field_name-0-value-minute", '15', 'Correct minute selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-year", '2013', 'Correct year selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-month", '1', 'Correct month selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-day", '15', 'Correct day selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-hour", '3', 'Correct hour selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-minute", '30', 'Correct minute selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-year", '2013', 'Correct year selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-month", '1', 'Correct month selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-day", '15', 'Correct day selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-hour", '3', 'Correct hour selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-minute", '30', 'Correct minute selected.');
// Test the widget for partial completion of fields.
entity_get_form_display($this->field->getTargetEntityTypeId(), $this->field->getTargetBundle(), 'default')
@@ -666,7 +666,7 @@ public function testDatelistWidget() {
$edit["{$field_name}[0][value][$part]"] = $value;
}
foreach ($end_date_value as $part => $value) {
- $edit["{$field_name}[0][value2][$part]"] = $value;
+ $edit["{$field_name}[0][end_value][$part]"] = $value;
}
$this->drupalPostForm(NULL, $edit, t('Save'));
@@ -686,7 +686,7 @@ public function testDatelistWidget() {
$edit["{$field_name}[0][value][$part]"] = $value;
}
foreach ($end_date_value as $part => $value) {
- $edit["{$field_name}[0][value2][$part]"] = $value;
+ $edit["{$field_name}[0][end_value][$part]"] = $value;
}
$this->drupalPostForm(NULL, $edit, t('Save'));
@@ -705,13 +705,13 @@ public function testDatelistWidget() {
$edit["{$field_name}[0][value][$part]"] = $value;
}
foreach ($end_date_value as $part => $value) {
- $edit["{$field_name}[0][value2][$part]"] = $value;
+ $edit["{$field_name}[0][end_value][$part]"] = $value;
}
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertResponse(200);
$this->assertOptionSelected("edit-$field_name-0-value-minute", '0', 'Correct minute selected.');
- $this->assertOptionSelected("edit-$field_name-0-value2-minute", '0', 'Correct minute selected.');
+ $this->assertOptionSelected("edit-$field_name-0-end-value-minute", '0', 'Correct minute selected.');
}
/**
@@ -789,7 +789,7 @@ public function testDefaultValue() {
'field_name' => $field_name,
'entity_type' => 'node',
'type' => 'daterange',
- 'settings' => ['daterange_type' => DateRangeItem::DATERANGE_TYPE_DATE],
+ 'settings' => ['datetime_type' => DateRangeItem::DATETIME_TYPE_DATE],
]);
$field_storage->save();
@@ -801,23 +801,23 @@ public function testDefaultValue() {
// Set now as default_value.
$field_edit = [
- 'default_value_input[default_start_date_type]' => 'now',
+ 'default_value_input[default_date_type]' => 'now',
'default_value_input[default_end_date_type]' => 'now',
];
$this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field_name, $field_edit, t('Save settings'));
// Check that default value is selected in default value form.
$this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field_name);
- $this->assertOptionSelected('edit-default-value-input-default-start-date-type', 'now', 'The default start value is selected in instance settings page');
- $this->assertFieldByName('default_value_input[default_start_date]', '', 'The relative start default value is empty in instance settings page');
+ $this->assertOptionSelected('edit-default-value-input-default-date-type', 'now', 'The default start value is selected in instance settings page');
+ $this->assertFieldByName('default_value_input[default_date]', '', 'The relative start default value is empty in instance settings page');
$this->assertOptionSelected('edit-default-value-input-default-end-date-type', 'now', 'The default end value is selected in instance settings page');
$this->assertFieldByName('default_value_input[default_end_date]', '', 'The relative end default value is empty in instance settings page');
// Check if default_date has been stored successfully.
$config_entity = $this->config('field.field.node.date_content.' . $field_name)->get();
$this->assertEqual($config_entity['default_value'][0], [
- 'default_start_date_type' => 'now',
- 'default_start_date' => 'now',
+ 'default_date_type' => 'now',
+ 'default_date' => 'now',
'default_end_date_type' => 'now',
'default_end_date' => 'now'
], 'Default value has been stored successfully');
@@ -829,12 +829,12 @@ public function testDefaultValue() {
$new_node = Node::create(['type' => 'date_content']);
$expected_date = new DrupalDateTime('now', DATETIME_STORAGE_TIMEZONE);
$this->assertEqual($new_node->get($field_name)->offsetGet(0)->value, $expected_date->format(DATETIME_DATE_STORAGE_FORMAT));
- $this->assertEqual($new_node->get($field_name)->offsetGet(0)->value2, $expected_date->format(DATETIME_DATE_STORAGE_FORMAT));
+ $this->assertEqual($new_node->get($field_name)->offsetGet(0)->end_value, $expected_date->format(DATETIME_DATE_STORAGE_FORMAT));
// Set an invalid relative default_value to test validation.
$field_edit = [
- 'default_value_input[default_start_date_type]' => 'relative',
- 'default_value_input[default_start_date]' => 'invalid date',
+ 'default_value_input[default_date_type]' => 'relative',
+ 'default_value_input[default_date]' => 'invalid date',
'default_value_input[default_end_date_type]' => 'relative',
'default_value_input[default_end_date]' => '+1 day',
];
@@ -842,8 +842,8 @@ public function testDefaultValue() {
$this->assertText('The relative start date value entered is invalid.');
$field_edit = [
- 'default_value_input[default_start_date_type]' => 'relative',
- 'default_value_input[default_start_date]' => '+1 day',
+ 'default_value_input[default_date_type]' => 'relative',
+ 'default_value_input[default_date]' => '+1 day',
'default_value_input[default_end_date_type]' => 'relative',
'default_value_input[default_end_date]' => 'invalid date',
];
@@ -852,8 +852,8 @@ public function testDefaultValue() {
// Set a relative default_value.
$field_edit = [
- 'default_value_input[default_start_date_type]' => 'relative',
- 'default_value_input[default_start_date]' => '+45 days',
+ 'default_value_input[default_date_type]' => 'relative',
+ 'default_value_input[default_date]' => '+45 days',
'default_value_input[default_end_date_type]' => 'relative',
'default_value_input[default_end_date]' => '+90 days',
];
@@ -861,16 +861,16 @@ public function testDefaultValue() {
// Check that default value is selected in default value form.
$this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field_name);
- $this->assertOptionSelected('edit-default-value-input-default-start-date-type', 'relative', 'The default start value is selected in instance settings page');
- $this->assertFieldByName('default_value_input[default_start_date]', '+45 days', 'The relative default start value is displayed in instance settings page');
+ $this->assertOptionSelected('edit-default-value-input-default-date-type', 'relative', 'The default start value is selected in instance settings page');
+ $this->assertFieldByName('default_value_input[default_date]', '+45 days', 'The relative default start value is displayed in instance settings page');
$this->assertOptionSelected('edit-default-value-input-default-end-date-type', 'relative', 'The default end value is selected in instance settings page');
$this->assertFieldByName('default_value_input[default_end_date]', '+90 days', 'The relative default end value is displayed in instance settings page');
// Check if default_date has been stored successfully.
$config_entity = $this->config('field.field.node.date_content.' . $field_name)->get();
$this->assertEqual($config_entity['default_value'][0], [
- 'default_start_date_type' => 'relative',
- 'default_start_date' => '+45 days',
+ 'default_date_type' => 'relative',
+ 'default_date' => '+45 days',
'default_end_date_type' => 'relative',
'default_end_date' => '+90 days',
], 'Default value has been stored successfully');
@@ -883,19 +883,19 @@ public function testDefaultValue() {
$expected_start_date = new DrupalDateTime('+45 days', DATETIME_STORAGE_TIMEZONE);
$expected_end_date = new DrupalDateTime('+90 days', DATETIME_STORAGE_TIMEZONE);
$this->assertEqual($new_node->get($field_name)->offsetGet(0)->value, $expected_start_date->format(DATETIME_DATE_STORAGE_FORMAT));
- $this->assertEqual($new_node->get($field_name)->offsetGet(0)->value2, $expected_end_date->format(DATETIME_DATE_STORAGE_FORMAT));
+ $this->assertEqual($new_node->get($field_name)->offsetGet(0)->end_value, $expected_end_date->format(DATETIME_DATE_STORAGE_FORMAT));
// Remove default value.
$field_edit = [
- 'default_value_input[default_start_date_type]' => '',
+ 'default_value_input[default_date_type]' => '',
'default_value_input[default_end_date_type]' => '',
];
$this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field_name, $field_edit, t('Save settings'));
// Check that default value is selected in default value form.
$this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field_name);
- $this->assertOptionSelected('edit-default-value-input-default-start-date-type', '', 'The default start value is selected in instance settings page');
- $this->assertFieldByName('default_value_input[default_start_date]', '', 'The relative default start value is empty in instance settings page');
+ $this->assertOptionSelected('edit-default-value-input-default-date-type', '', 'The default start value is selected in instance settings page');
+ $this->assertFieldByName('default_value_input[default_date]', '', 'The relative default start value is empty in instance settings page');
$this->assertOptionSelected('edit-default-value-input-default-end-date-type', '', 'The default end value is selected in instance settings page');
$this->assertFieldByName('default_value_input[default_end_date]', '', 'The relative default end value is empty in instance settings page');
@@ -909,6 +909,38 @@ public function testDefaultValue() {
// Create a new node to check that datetime field default value is not set.
$new_node = Node::create(['type' => 'date_content']);
$this->assertNull($new_node->get($field_name)->value, 'Default value is not set');
+
+ // Set now as default_value for start date only.
+ entity_get_form_display('node', 'date_content', 'default')
+ ->setComponent($field_name, [
+ 'type' => 'datetime_default',
+ ])
+ ->save();
+
+ $expected_date = new DrupalDateTime('now', DATETIME_STORAGE_TIMEZONE);
+
+ $field_edit = [
+ 'default_value_input[default_date_type]' => 'now',
+ 'default_value_input[default_end_date_type]' => '',
+ ];
+ $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field_name, $field_edit, t('Save settings'));
+
+ // Make sure only the start value is populated on node add page.
+ $this->drupalGet('node/add/date_content');
+ $this->assertFieldByName("{$field_name}[0][value][date]", $expected_date->format(DATETIME_DATE_STORAGE_FORMAT), 'Start date element populated.');
+ $this->assertFieldByName("{$field_name}[0][end_value][date]", '', 'End date element empty.');
+
+ // Set now as default_value for end date only.
+ $field_edit = [
+ 'default_value_input[default_date_type]' => '',
+ 'default_value_input[default_end_date_type]' => 'now',
+ ];
+ $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field_name, $field_edit, t('Save settings'));
+
+ // Make sure only the start value is populated on node add page.
+ $this->drupalGet('node/add/date_content');
+ $this->assertFieldByName("{$field_name}[0][value][date]", '', 'Start date element empty.');
+ $this->assertFieldByName("{$field_name}[0][end_value][date]", $expected_date->format(DATETIME_DATE_STORAGE_FORMAT), 'End date element populated.');
}
/**
@@ -916,7 +948,7 @@ public function testDefaultValue() {
*/
public function testInvalidField() {
// Change the field to a datetime field.
- $this->fieldStorage->setSetting('daterange_type', DateRangeItem::DATERANGE_TYPE_DATETIME);
+ $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_DATETIME);
$this->fieldStorage->save();
$field_name = $this->fieldStorage->getName();
@@ -924,16 +956,16 @@ public function testInvalidField() {
$this->drupalGet('entity_test/add');
$this->assertFieldByName("{$field_name}[0][value][date]", '', 'Start date element found.');
$this->assertFieldByName("{$field_name}[0][value][time]", '', 'Start time element found.');
- $this->assertFieldByName("{$field_name}[0][value2][date]", '', 'End date element found.');
- $this->assertFieldByName("{$field_name}[0][value2][time]", '', 'End time element found.');
+ $this->assertFieldByName("{$field_name}[0][end_value][date]", '', 'End date element found.');
+ $this->assertFieldByName("{$field_name}[0][end_value][time]", '', 'End time element found.');
// Submit invalid start dates and ensure they is not accepted.
$date_value = '';
$edit = [
"{$field_name}[0][value][date]" => $date_value,
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', 'Empty start date value has been caught.');
@@ -942,8 +974,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => $date_value,
"{$field_name}[0][value][time]" => '00:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid start year value %date has been caught.', ['%date' => $date_value]));
@@ -952,8 +984,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => $date_value,
"{$field_name}[0][value][time]" => '00:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid start month value %date has been caught.', ['%date' => $date_value]));
@@ -962,8 +994,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => $date_value,
"{$field_name}[0][value][time]" => '00:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid start day value %date has been caught.', ['%date' => $date_value]));
@@ -973,8 +1005,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => $time_value,
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', 'Empty start time value has been caught.');
@@ -983,8 +1015,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => $time_value,
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid start hour value %time has been caught.', ['%time' => $time_value]));
@@ -993,8 +1025,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => $time_value,
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid start minute value %time has been caught.', ['%time' => $time_value]));
@@ -1003,8 +1035,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => $time_value,
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid start second value %time has been caught.', ['%time' => $time_value]));
@@ -1014,8 +1046,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => $date_value,
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => $date_value,
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', 'Empty end date value has been caught.');
@@ -1024,8 +1056,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => $date_value,
- "{$field_name}[0][value2][time]" => '00:00:00',
+ "{$field_name}[0][end_value][date]" => $date_value,
+ "{$field_name}[0][end_value][time]" => '00:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid end year value %date has been caught.', ['%date' => $date_value]));
@@ -1034,8 +1066,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => $date_value,
- "{$field_name}[0][value2][time]" => '00:00:00',
+ "{$field_name}[0][end_value][date]" => $date_value,
+ "{$field_name}[0][end_value][time]" => '00:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid end month value %date has been caught.', ['%date' => $date_value]));
@@ -1044,8 +1076,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => $date_value,
- "{$field_name}[0][value2][time]" => '00:00:00',
+ "{$field_name}[0][end_value][date]" => $date_value,
+ "{$field_name}[0][end_value][time]" => '00:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid end day value %date has been caught.', ['%date' => $date_value]));
@@ -1055,8 +1087,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => $time_value,
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => $time_value,
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', 'Empty end time value has been caught.');
@@ -1065,8 +1097,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => $time_value,
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => $time_value,
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid end hour value %time has been caught.', ['%time' => $time_value]));
@@ -1075,8 +1107,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => $time_value,
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => $time_value,
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid end minute value %time has been caught.', ['%time' => $time_value]));
@@ -1085,8 +1117,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => $time_value,
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => $time_value,
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText('date is invalid', new FormattableMarkup('Invalid end second value %time has been caught.', ['%time' => $time_value]));
@@ -1094,8 +1126,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => '2010-12-01',
- "{$field_name}[0][value2][time]" => '12:00:00',
+ "{$field_name}[0][end_value][date]" => '2010-12-01',
+ "{$field_name}[0][end_value][time]" => '12:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText(new FormattableMarkup('The @title end date cannot be before the start date', ['@title' => $field_name]), 'End date before start date has been caught.');
@@ -1103,8 +1135,8 @@ public function testInvalidField() {
$edit = [
"{$field_name}[0][value][date]" => '2012-12-01',
"{$field_name}[0][value][time]" => '12:00:00',
- "{$field_name}[0][value2][date]" => '2012-12-01',
- "{$field_name}[0][value2][time]" => '11:00:00',
+ "{$field_name}[0][end_value][date]" => '2012-12-01',
+ "{$field_name}[0][end_value][time]" => '11:00:00',
];
$this->drupalPostForm(NULL, $edit, t('Save'));
$this->assertText(new FormattableMarkup('The @title end date cannot be before the start date', ['@title' => $field_name]), 'End time before start time has been caught.');
@@ -1124,7 +1156,7 @@ public function testDateStorageSettings() {
'entity_type' => 'node',
'type' => 'daterange',
'settings' => [
- 'daterange_type' => DateRangeItem::DATERANGE_TYPE_DATE,
+ 'datetime_type' => DateRangeItem::DATETIME_TYPE_DATE,
],
]);
$field_storage->save();
@@ -1144,12 +1176,12 @@ public function testDateStorageSettings() {
'title[0][value]' => $this->randomString(),
'body[0][value]' => $this->randomString(),
$field_name . '[0][value][date]' => '2016-04-01',
- $field_name . '[0][value2][date]' => '2016-04-02',
+ $field_name . '[0][end_value][date]' => '2016-04-02',
];
$this->drupalPostForm('node/add/date_content', $edit, t('Save'));
$this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field_name . '/storage');
- $result = $this->xpath("//*[@id='edit-settings-daterange-type' and contains(@disabled, 'disabled')]");
- $this->assertEqual(count($result), 1, "Changing daterange setting is disabled.");
+ $result = $this->xpath("//*[@id='edit-settings-datetime-type' and contains(@disabled, 'disabled')]");
+ $this->assertEqual(count($result), 1, "Changing datetime setting is disabled.");
$this->assertText('There is data for this field in the database. The field settings can no longer be changed.');
}