diff --git a/core/modules/datetime_range/src/Plugin/Field/FieldType/DateRangeItem.php b/core/modules/datetime_range/src/Plugin/Field/FieldType/DateRangeItem.php index 22e6c10e02..a6755abf2b 100644 --- a/core/modules/datetime_range/src/Plugin/Field/FieldType/DateRangeItem.php +++ b/core/modules/datetime_range/src/Plugin/Field/FieldType/DateRangeItem.php @@ -53,9 +53,10 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel ->setClass(DateTimeComputed::class) ->setSetting('date source', 'value'); + // @todo Write a comment on why we can't use the $field_definition here. $properties['end_value'] = DataDefinition::create('datetime_iso8601') ->setLabel(t('End date value')) - ->setRequired(!$field_definition->getSetting('optional_end_date')); + ->setRequired(FALSE); $properties['end_date'] = DataDefinition::create('any') ->setLabel(t('Computed end date')) @@ -109,6 +110,7 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin // Just pick a date in the past year. No guidance is provided by this Field // type. + // @todo Do we need to update this? $start = REQUEST_TIME - mt_rand(0, 86400 * 365) - 86400; $end = $start + 86400; if ($type == static::DATETIME_TYPE_DATETIME) { diff --git a/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php b/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php index 85fda9ba53..996b71c456 100644 --- a/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php +++ b/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php @@ -19,6 +19,7 @@ class DateRangeWidgetBase extends DateTimeWidgetBase { */ public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) { $element = parent::formElement($items, $delta, $element, $form, $form_state); + $optional_end_date = $this->getFieldSetting('optional_end_date'); // Wrap all of the select elements with a fieldset. $element['#theme_wrappers'][] = 'fieldset'; @@ -27,9 +28,13 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen $element['value']['#title'] = $this->t('Start date'); $element['end_value'] = [ - '#title' => $this->t('End date'), + '#title' => $optional_end_date ? $this->t('End date (optional)'): $this->t('End date'), ] + $element['value']; + if ($element['#required'] && $optional_end_date) { + $element['end_value']['#required'] = FALSE; + } + if ($items[$delta]->start_date) { /** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */ $start_date = $items[$delta]->start_date;