diff --git a/core/modules/datetime/lib/Drupal/datetime/Plugin/field/field_type/DateTimeFieldItemList.php b/core/modules/datetime/lib/Drupal/datetime/Plugin/field/field_type/DateTimeFieldItemList.php index 4ef5858..a2b9fc4 100644 --- a/core/modules/datetime/lib/Drupal/datetime/Plugin/field/field_type/DateTimeFieldItemList.php +++ b/core/modules/datetime/lib/Drupal/datetime/Plugin/field/field_type/DateTimeFieldItemList.php @@ -21,11 +21,6 @@ class DateTimeFieldItemList extends ConfigFieldItemList { const DEFAULT_VALUE_NOW = 'now'; /** - * Defines the default value as blank. - */ - const DEFAULT_VALUE_BLANK = 'blank'; - - /** * {@inheritdoc} */ public function defaultValuesForm(array &$form, array &$form_state) { @@ -37,8 +32,8 @@ public function defaultValuesForm(array &$form, array &$form_state) { '#type' => 'select', '#title' => t('Default date'), '#description' => t('Set a default value for this date.'), - '#default_value' => isset($default_value[0]['default_date']) ? $default_value[0]['default_date'] : static::DEFAULT_VALUE_BLANK, - '#options' => array(static::DEFAULT_VALUE_BLANK => t('No default value'), static::DEFAULT_VALUE_NOW => t('The current date')), + '#default_value' => isset($default_value[0]['default_date']) ? $default_value[0]['default_date'] : '', + '#options' => array('' => t('No default value'), static::DEFAULT_VALUE_NOW => t('The current date')), ) ); @@ -49,7 +44,10 @@ public function defaultValuesForm(array &$form, array &$form_state) { * {@inheritdoc} */ public function defaultValuesFormSubmit(array $element, array &$form, array &$form_state) { - return array($form_state['values']['default_value_input']); + if ($form_state['values']['default_value_input']['default_date']) { + return array($form_state['values']['default_value_input']); + } + return array(); } /** @@ -58,16 +56,12 @@ public function defaultValuesFormSubmit(array $element, array &$form, array &$fo public function getDefaultValue() { $default_value = parent::getDefaultValue(); - if ($default_value) { - $value = ''; - $date = ''; - if ($default_value[0]['default_date'] == static::DEFAULT_VALUE_NOW) { - // A default value should be in the format and timezone used for date - // storage. - $date = new DrupalDateTime('now', DATETIME_STORAGE_TIMEZONE); - $storage_format = $this->getFieldDefinition()->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE ? DATETIME_DATE_STORAGE_FORMAT: DATETIME_DATETIME_STORAGE_FORMAT; - $value = $date->format($storage_format); - } + if ($default_value && $default_value[0]['default_date'] == static::DEFAULT_VALUE_NOW) { + // A default value should be in the format and timezone used for date + // storage. + $date = new DrupalDateTime('now', DATETIME_STORAGE_TIMEZONE); + $storage_format = $this->getFieldDefinition()->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE ? DATETIME_DATE_STORAGE_FORMAT: DATETIME_DATETIME_STORAGE_FORMAT; + $value = $date->format($storage_format); // 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. diff --git a/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php b/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php index 245e767..7a7e95b 100644 --- a/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php +++ b/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php @@ -331,6 +331,28 @@ function testDefaultValue() { $new_node = entity_create('node', array('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)); + + // Remove default value. + $instance_edit = array( + 'default_value_input[default_date]' => '', + ); + $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name, $instance_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->assertRaw('', 'The default value is selected in instance settings page'); + + // Check if default_date has been stored successfully. + $config_entity = $this->container->get('config.factory')->get('field.instance.node.date_content.' . $field->name)->get(); + debug($config_entity['default_value']); + $this->assertTrue(empty($config_entity['default_value']), 'Empty default value has been stored succesfully'); + + // Clean field_info cache in order to avoid stale cache values. + field_info_cache_clear(); + + // Create a new node to check that datetime field default value is today. + $new_node = entity_create('node', array('type' => 'date_content')); + $this->assertNull($new_node->get($field->name)->offsetGet(0)->value, 'Default value is not set'); } /**