diff -u b/core/modules/datetime/config/schema/datetime.schema.yml b/core/modules/datetime/config/schema/datetime.schema.yml --- b/core/modules/datetime/config/schema/datetime.schema.yml +++ b/core/modules/datetime/config/schema/datetime.schema.yml @@ -7,10 +7,10 @@ datetime_type: type: string label: 'Date type' - enddate_get: + collect_enddate: type: string label: 'Collect end date' - enddate_require: + require_enddate: type: string label: 'Require end date' diff -u b/core/modules/datetime/datetime.install b/core/modules/datetime/datetime.install --- b/core/modules/datetime/datetime.install +++ b/core/modules/datetime/datetime.install @@ -5,94 +5,21 @@ * Install, update and uninstall functions for the datetime module. */ -use Drupal\Core\Database\Database; - /** - * Add 'enddate_get' field to 'field.storage_settings.datetime'. + * Add 'collect_enddate' and 'require_enddate fields. * * Add 'value2' field. */ function datetime_update_8001() { - // Update field storage for existing datetime fields. - $entity_manager = \Drupal::entityManager(); - $entity_manager->useCaches(FALSE); - $change_list = array(); - - foreach ($entity_manager->getDefinitions() as $entity_type_id => $entity_type) { - - if ($entity_manager->getStorage($entity_type_id) instanceof \Drupal\Core\Entity\Schema\DynamicallyFieldableEntityStorageSchemaInterface) { - $field_changes = array(); - - $storage_definitions = $entity_manager->getFieldStorageDefinitions($entity_type_id); - $original_storage_definitions = $entity_manager->getLastInstalledFieldStorageDefinitions($entity_type_id); - - // Detect updated field storage definitions. - foreach (array_intersect_key($storage_definitions, $original_storage_definitions) as $field_name => $storage_definition) { - - if ($storage_definition->getType() == 'datetime') { - if ($entity_manager->getStorage($entity_type_id)->requiresFieldStorageSchemaChanges($storage_definition, $original_storage_definitions[$field_name])) { - $field_changes[$field_name] = TRUE; - } - } - } - - if ($field_changes) { - $change_list[$entity_type_id] = array( - 'field_storage_definitions' => $field_changes, - 'base_table' => $entity_type->getBaseTable(), - 'revision_table' => $entity_type->getRevisionTable(), - ); - } - } - } - - $field_spec = array( - 'description' => 'The end date value.', - 'type' => 'varchar', - 'length' => 20, - ); - - $schema = Database::getConnection()->schema(); - - foreach ($change_list as $entity_type_id => $changes) { - foreach (array_keys($changes['field_storage_definitions']) as $field_name) { - $value_field_name = $field_name . '_value2'; - - $field_schema = array( - 'fields' => array( - $value_field_name => array( - 'description' => 'The end date value.', - 'type' => 'varchar', - 'length' => 20, - ), - ), - 'indexes' => array( - $value_field_name => array($value_field_name), - ), - ); - - $index_spec = array($value_field_name); - $base_table = $changes['base_table'] . '__' . $field_name; - $schema->addField($base_table, $value_field_name, $field_spec); - $schema->addIndex($base_table, $value_field_name, $index_spec, $field_schema); - - if ($changes['revision_table']) { - $revision_table = $changes['revision_table'] . '__' . $field_name; - $schema->addField($revision_table, $value_field_name, $field_spec); - $schema->addIndex($revision_table, $value_field_name, $index_spec, $field_schema); - } - } - } - // Update the storage configs. if (!$field_storage_configs = \Drupal::entityManager()->getStorage('field_storage_config')->loadByProperties(array('type' => 'datetime'))) { return; } foreach ($field_storage_configs as $field_storage) { - $field_storage->setSetting('enddate_get', FALSE); - $field_storage->setSetting('enddate_require', FALSE); + $field_storage->setSetting('collect_enddate', FALSE); + $field_storage->setSetting('require_enddate', FALSE); $field_storage->save(); } diff -u b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php --- b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php +++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php @@ -74,15 +74,6 @@ $output2 = $this->formatDate($date2); - // Check if start day == end day. - if ($this->getFieldSetting('datetime_type') == 'datetime') { - // TODO better logic to split the date and time based on the format. - $length = strspn($output2, $output); - if ($length) { - - $output2 = substr($output2, $length - 1); - } - } } // Display the date using theme datetime. @@ -99,7 +90,7 @@ ]; // Append on the end date. - if ($this->getFieldSetting('enddate_get') && !empty($output2)) { + if ($this->getFieldSetting('collect_enddate') && !empty($output2)) { $elements[$delta][] = [ '#markup' => $this->t(' to '), ]; @@ -117,7 +108,7 @@ } if (!empty($item->_attributes)) { $elements[$delta][0]['#attributes'] += $item->_attributes; - if ($this->getFieldSetting('enddate_get') && !empty($output2)) { + if ($this->getFieldSetting('collect_enddate') && !empty($output2)) { $elements[$delta][2]['#attributes'] += $item->_attributes; } // Unset field item attributes since they have been included in the diff -u b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeFieldItemList.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeFieldItemList.php --- b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeFieldItemList.php +++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeFieldItemList.php @@ -66,7 +66,7 @@ ) ); - if ($this->getFieldDefinition()->getSetting('enddate_get')) { + if ($this->getFieldDefinition()->getSetting('collect_enddate')) { $element += array( 'default_date_type2' => array( '#type' => 'select', @@ -170,7 +170,7 @@ } // Repeat for end date. - if ($definition->getSetting('enddate_get') && !empty($default_value[0]['default_date_type2'])) { + if ($definition->getSetting('collect_enddate') && !empty($default_value[0]['default_date_type2'])) { // A default value should be in the format and timezone used for date // storage. $date = new DrupalDateTime($default_value[0]['default_date2'], DATETIME_STORAGE_TIMEZONE); diff -u b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php --- b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php +++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php @@ -33,7 +33,8 @@ public static function defaultStorageSettings() { return array( 'datetime_type' => 'datetime', - 'enddate_get' => FALSE, + 'collect_enddate' => FALSE, + 'require_enddate' => FALSE, ) + parent::defaultStorageSettings(); } @@ -51,24 +52,24 @@ * {@inheritdoc} */ public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) { - $has_end = $field_definition->getSetting('enddate_get'); - $require_end = $field_definition->getSetting('enddate_require'); + $collect_enddate = $field_definition->getSetting('collect_enddate'); + $require_enddate = $field_definition->getSetting('require_enddate'); $properties['value'] = DataDefinition::create('datetime_iso8601') - ->setLabel($has_end ? t('Date value (start)') : t('Date value')) + ->setLabel($collect_enddate ? t('Date value (start)') : t('Date value')) ->setRequired(TRUE); $properties['date'] = DataDefinition::create('any') - ->setLabel($has_end ? t('Computed date (start)') : t('Computed date')) + ->setLabel($collect_enddate ? t('Computed date (start)') : t('Computed date')) ->setDescription(t('The computed start DateTime object.')) ->setComputed(TRUE) ->setClass('\Drupal\datetime\DateTimeComputed') ->setSetting('date source', 'value'); - if ($has_end) { + if ($collect_enddate) { $properties['value2'] = DataDefinition::create('datetime_iso8601') ->setLabel(t('Date value (end)')) - ->setRequired($require_end); + ->setRequired($require_enddate); $properties['date2'] = DataDefinition::create('any') ->setLabel(t('Computed date (end)')) ->setDescription(t('The computed end DateTime object.')) @@ -97,7 +98,7 @@ ), ); - if ($field_definition->getSetting('enddate_get')) { + if ($field_definition->getSetting('collect_enddate')) { $schema['columns']['value2'] = [ 'description' => 'The end date value.', 'type' => 'varchar', @@ -129,21 +130,21 @@ ), ); - $element['enddate_get'] = array( + $element['collect_enddate'] = array( '#type' => 'checkbox', '#title' => t('Collect an end date'), - '#default_value' => $this->getSetting('enddate_get'), + '#default_value' => $this->getSetting('collect_enddate'), '#disabled' => $has_data, ); - $element['enddate_require'] = array( + $element['require_enddate'] = array( '#type' => 'checkbox', '#title' => t('Require an end date'), - '#default_value' => $this->getSetting('enddate_require'), + '#default_value' => $this->getSetting('require_enddate'), '#disabled' => $has_data, '#states' => array( 'visible' => array( - ':input[id="edit-settings-enddate-get"]' => array('checked' => TRUE), + ':input[id="edit-settings-collect-enddate"]' => array('checked' => TRUE), ), ), ); @@ -156,7 +157,7 @@ */ public static function generateSampleValue(FieldDefinitionInterface $field_definition) { $type = $field_definition->getSetting('datetime_type'); - $collect_end_date = $field_definition->getSetting('enddate_get'); + $collect_end_date = $field_definition->getSetting('collect_enddate'); // Just pick a date in the past year. No guidance is provided by this Field // type. diff -u b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDatelistWidget.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDatelistWidget.php --- b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDatelistWidget.php +++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDatelistWidget.php @@ -83,12 +83,12 @@ '#date_part_order'=> $date_part_order, ) + $element['value']; - if ($this->getFieldSetting('enddate_get')) { + if ($this->getFieldSetting('collect_enddate')) { $element['value2'] = array( '#type' => 'datelist', '#date_increment' => $increment, '#date_part_order'=> $date_part_order, - ) + $element['value']; + ) + $element['value2']; } return $element; diff -u b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDefaultWidget.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDefaultWidget.php --- b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDefaultWidget.php +++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDefaultWidget.php @@ -89,7 +89,7 @@ '#date_time_callbacks' => array(), ); - if ($this->getFieldSetting('enddate_get')) { + if ($this->getFieldSetting('collect_enddate')) { $element['value2'] += array( '#date_date_format'=> $date_format, '#date_date_element' => $date_type, diff -u b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php --- b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php +++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php @@ -52,7 +52,7 @@ $element['value']['#default_value'] = $date; } - if ($this->getFieldSetting('enddate_get')) { + if ($this->getFieldSetting('collect_enddate')) { $element['value']['#title'] = t('Start date'); $element['value2'] = array( @@ -89,7 +89,7 @@ // DrupalDateTime object at this point. We need to convert it back to the // storage timezone and format. $properties = array('value'); - if ($this->getFieldSetting('enddate_get')) { + if ($this->getFieldSetting('collect_enddate')) { $properties[] = 'value2'; } foreach ($values as &$item) { diff -u b/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php b/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php --- b/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php +++ b/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php @@ -131,7 +131,7 @@ public function testEnddate() { /** @var \Drupal\field\FieldStorageConfigInterface $field_storage */ $field_storage = FieldStorageConfig::load('entity_test.field_datetime'); - $field_storage->setSetting('enddate_get', TRUE); + $field_storage->setSetting('collect_enddate', TRUE); $field_storage->save(); $entity = EntityTest::create();