Commit 68712737 authored by catch's avatar catch
Browse files

Issue #3414883 by paul121, acbramley, catch, smustgrave, quietone:...

Issue #3414883 by paul121, acbramley, catch, smustgrave, quietone: [regression] datetime_timestamp widget does not use default field value
parent 3611bc65
Loading
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -25,8 +25,7 @@ class TimestampDatetimeWidget extends WidgetBase {
   * {@inheritdoc}
   */
  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
    $parent_entity = $items->getParent()->getValue();
    $default_value = (!$parent_entity->isNew() && isset($items[$delta]->value)) ? DrupalDateTime::createFromTimestamp($items[$delta]->value) : '';
    $default_value = isset($items[$delta]->value) ? DrupalDateTime::createFromTimestamp($items[$delta]->value) : '';
    $element['value'] = $element + [
      '#type' => 'datetime',
      '#default_value' => $default_value,
+19 −0
Original line number Diff line number Diff line
@@ -152,6 +152,25 @@ public function testWidget() {
    $medium = DateFormat::load('medium')->getPattern();
    $this->drupalGet('entity_test/' . $id);
    $this->assertSession()->pageTextContains($date->format($medium));

    // Build up a date in the UTC timezone.
    $value = '2024-01-16 00:00:00';
    $date = new DrupalDateTime($value, 'UTC');

    // Set a default value for the field.
    $this->field->setDefaultValue($date->getTimestamp())->save();

    // Update the timezone to the system default.
    $date->setTimezone(timezone_open(date_default_timezone_get()));

    $this->drupalGet('entity_test/add');
    $date_format = DateFormat::load('html_date')->getPattern();
    $time_format = DateFormat::load('html_time')->getPattern();
    // Make sure the default field value is set as the default value in the widget.
    $this->assertSession()->fieldExists('field_timestamp[0][value][date]');
    $this->assertSession()->fieldValueEquals('field_timestamp[0][value][date]', $date->format($date_format));
    $this->assertSession()->fieldExists('field_timestamp[0][value][time]');
    $this->assertSession()->fieldValueEquals('field_timestamp[0][value][time]', $date->format($time_format));
  }

}