diff --git a/core/modules/datetime_range/datetime_range.install b/core/modules/datetime_range/datetime_range.install index 53ed7b49b3..780b3b2f54 100644 --- a/core/modules/datetime_range/datetime_range.install +++ b/core/modules/datetime_range/datetime_range.install @@ -13,7 +13,7 @@ function datetime_range_update_8600() { $storage_schema = \Drupal::keyValue('entity.storage_schema.sql'); $configs = \Drupal::entityTypeManager() ->getStorage('field_storage_config') - ->loadByProperties(array('type' => 'daterange')); + ->loadByProperties(['type' => 'daterange']); foreach ($configs as $config) { $schema_key = $config->getTargetEntityTypeId() . '.field_schema_data.' . $config->getName(); 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 55615c99c3..f1f9b2ff4a 100644 --- a/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php +++ b/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php @@ -28,7 +28,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen $element['value']['#title'] = $this->t('Start date'); $element['end_value'] = [ - '#title' => $optional_end_date ? $this->t('End date (optional)'): $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) { @@ -131,15 +131,17 @@ public function validateStartEnd(array &$element, FormStateInterface $form_state $start_date = $element['value']['#value']['object']; $end_date = $element['end_value']['#value']['object']; - if (!$this->getFieldSetting('optional_end_date') && $end_date === NULL) { - $form_state->setError($element['end_value'], $this->t('The @title end date is required', ['@title' => $element['#title']])); - } + if ($start_date instanceof DrupalDateTime) { + if (!$this->getFieldSetting('optional_end_date') && $end_date === NULL) { + $form_state->setError($element['end_value'], $this->t('The @title end date is required', ['@title' => $element['#title']])); + } - if ($start_date instanceof DrupalDateTime && $end_date instanceof DrupalDateTime) { - if ($start_date->getTimestamp() !== $end_date->getTimestamp()) { - $interval = $start_date->diff($end_date); - if ($interval->invert === 1) { - $form_state->setError($element, $this->t('The @title end date cannot be before the start date', ['@title' => $element['#title']])); + if ($end_date instanceof DrupalDateTime) { + if ($start_date->getTimestamp() !== $end_date->getTimestamp()) { + $interval = $start_date->diff($end_date); + if ($interval->invert === 1) { + $form_state->setError($element, $this->t('The @title end date cannot be before the start date', ['@title' => $element['#title']])); + } } } } diff --git a/core/modules/datetime_range/tests/src/Functional/Update/DateRangeUpdateTest.php b/core/modules/datetime_range/tests/src/Functional/Update/DateRangeUpdateTest.php index 1174167566..9a0ff70e2e 100644 --- a/core/modules/datetime_range/tests/src/Functional/Update/DateRangeUpdateTest.php +++ b/core/modules/datetime_range/tests/src/Functional/Update/DateRangeUpdateTest.php @@ -3,10 +3,6 @@ namespace Drupal\Tests\datetime_range\Functional\Update; use Drupal\FunctionalTests\Update\UpdatePathTestBase; -use Drupal\node\Entity\Node; -use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem; -use Drupal\field\Entity\FieldConfig; -use Drupal\field\Entity\FieldStorageConfig; /** * Tests datetime_range update paths. @@ -45,41 +41,41 @@ protected function setDatabaseDumpFiles() { * * @see datetime_range_update_8600() */ - public function testEndValueNull() { - // Check all storage types before update. - $this->assertEndValueNotNull('node', 'field_daterange_allday', TRUE); - $this->assertEndValueNotNull('node', 'field_daterange_date', TRUE); - $this->assertEndValueNotNull('node', 'field_daterange_datetime', TRUE); + public function testEndValueNull() { + // Check all storage types before update. + $this->assertEndValueNotNull('node', 'field_daterange_allday', TRUE); + $this->assertEndValueNotNull('node', 'field_daterange_date', TRUE); + $this->assertEndValueNotNull('node', 'field_daterange_datetime', TRUE); - // Check a not revisinable field before update. - $this->assertEndValueNotNull('taxonomy_term', 'field_daterange_not_revisionable', TRUE); + // Check a not revisinable field before update. + $this->assertEndValueNotNull('taxonomy_term', 'field_daterange_not_revisionable', TRUE); - $this->runUpdates(); + $this->runUpdates(); - // Check all the storage types now allow null. - $this->assertEndValueNotNull('node', 'field_daterange_allday', FALSE); - $this->assertEndValueNotNull('node', 'field_daterange_date', FALSE); - $this->assertEndValueNotNull('node', 'field_daterange_datetime', FALSE); + // Check all the storage types now allow null. + $this->assertEndValueNotNull('node', 'field_daterange_allday', FALSE); + $this->assertEndValueNotNull('node', 'field_daterange_date', FALSE); + $this->assertEndValueNotNull('node', 'field_daterange_datetime', FALSE); - // Check the not revisinable field now allow null. - $this->assertEndValueNotNull('taxonomy_term', 'field_daterange_not_revisionable', FALSE); - } + // Check the not revisinable field now allow null. + $this->assertEndValueNotNull('taxonomy_term', 'field_daterange_not_revisionable', FALSE); + } - /** - * Asserts that a config depends on 'entity_reference' or not - * - * @param string $entity_type - * The entity type, the field belongs to. - * @param string $field_name - * Name of the field - * @param bool $expected - * The value expected of not null. - */ - protected function assertEndValueNotNull($entity_type, $field_name, $expected) { - $schema_key = $entity_type . '.field_schema_data.' . $field_name; - foreach ($this->installedStorageSchema->get($schema_key) as $table) { - $this->assertEquals($expected, $table['fields'][$field_name . '_end_value']['not null']); - } - } + /** + * Asserts that a config depends on 'entity_reference' or not + * + * @param string $entity_type + * The entity type, the field belongs to. + * @param string $field_name + * Name of the field + * @param bool $expected + * The value expected of not null. + */ + protected function assertEndValueNotNull($entity_type, $field_name, $expected) { + $schema_key = $entity_type . '.field_schema_data.' . $field_name; + foreach ($this->installedStorageSchema->get($schema_key) as $table) { + $this->assertEquals($expected, $table['fields'][$field_name . '_end_value']['not null']); + } + } }