diff --git a/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php index 9ea8c25..482589a 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php +++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php @@ -65,16 +65,17 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel ->setClass('\Drupal\datetime\DateTimeComputed') ->setSetting('date source', 'value'); - $properties['value2'] = DataDefinition::create('datetime_iso8601') - ->setLabel(t('Date value (end)')) - ->setRequired($require_end); - - $properties['date2'] = DataDefinition::create('any') - ->setLabel(t('Computed date (end)')) - ->setDescription(t('The computed end DateTime object.')) - ->setComputed(TRUE) - ->setClass('\Drupal\datetime\DateTimeComputed') - ->setSetting('date source', 'value2'); + if ($has_end) { + $properties['value2'] = DataDefinition::create('datetime_iso8601') + ->setLabel(t('Date value (end)')) + ->setRequired($require_end); + $properties['date2'] = DataDefinition::create('any') + ->setLabel(t('Computed date (end)')) + ->setDescription(t('The computed end DateTime object.')) + ->setComputed(TRUE) + ->setClass('\Drupal\datetime\DateTimeComputed') + ->setSetting('date source', 'value2'); + } return $properties; } @@ -90,18 +91,24 @@ public static function schema(FieldStorageDefinitionInterface $field_definition) 'type' => 'varchar', 'length' => 20, ), - 'value2' => array( - 'description' => 'The end date value.', - 'type' => 'varchar', - 'length' => 20, - ), ), 'indexes' => array( 'value' => array('value'), - 'value2' => array('value2'), ), ); + if ($field_definition->getSetting('enddate_get')) { + $schema['columns']['value2'] = [ + 'description' => 'The end date value.', + 'type' => 'varchar', + 'length' => 20, + ]; + $schema['indexes'] = [ + 'value' => ['value', 'value2'], + 'value2' => ['value2'], + ]; + } + return $schema; } diff --git a/core/modules/datetime/src/Tests/DateTimeItemTest.php b/core/modules/datetime/src/Tests/DateTimeItemTest.php index 004ca31..59ede8b 100644 --- a/core/modules/datetime/src/Tests/DateTimeItemTest.php +++ b/core/modules/datetime/src/Tests/DateTimeItemTest.php @@ -13,7 +13,6 @@ use Drupal\field\Entity\FieldConfig; use Drupal\field\Tests\FieldUnitTestBase; use Drupal\field\Entity\FieldStorageConfig; -use Drupal\entity_test\Entity\EntityTest; /** * Tests the new entity API for the date field type. diff --git a/core/modules/field/src/Entity/FieldStorageConfig.php b/core/modules/field/src/Entity/FieldStorageConfig.php index eaf14c6..c3c01c1 100644 --- a/core/modules/field/src/Entity/FieldStorageConfig.php +++ b/core/modules/field/src/Entity/FieldStorageConfig.php @@ -288,6 +288,10 @@ public function preSave(EntityStorageInterface $storage) { $default_settings = $field_type_manager->getDefaultStorageSettings($this->type); $this->settings = array_intersect_key($this->settings, $default_settings) + $default_settings; + // Different settings could lead to different property definitions, + // invalidate the statically cached definitions. + $this->propertyDefinitions = NULL; + if ($this->isNew()) { $this->preSaveNew($storage); }