Loading src/Plugin/Field/FieldWidget/DateRangeTimezone.php +2 −0 Original line number Diff line number Diff line Loading @@ -33,7 +33,9 @@ class DateRangeTimezone extends DateRangeDefaultWidget { if ($items[$delta]->timezone) { $timezone = new \DateTimeZone($items[$delta]->timezone); $element['value']['#default_value']->setTimeZone($timezone); $element['value']['#date_timezone'] = $items[$delta]->timezone; $element['end_value']['#default_value']->setTimeZone($timezone); $element['end_value']['#date_timezone'] = $items[$delta]->timezone; } $element['timezone'] = [ Loading tests/src/Functional/DateRangeTimezoneTestBase.php +5 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,11 @@ abstract class DateRangeTimezoneTestBase extends BrowserTestBase { use DateRangeTimezoneHelperTrait; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * Modules to enable. * Loading tests/src/Functional/DateRangeTimezoneWidgetTest.php +19 −3 Original line number Diff line number Diff line Loading @@ -4,6 +4,8 @@ namespace Drupal\Tests\datetime_range_timezone\Functional; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\Entity\DateFormat; use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface; use Drupal\entity_test\Entity\EntityTest; /** * Test the datetime widget. Loading @@ -18,7 +20,7 @@ class DateRangeTimezoneWidgetTest extends DateRangeTimezoneTestBase { public function testWidgetDefaultValuesAreTranslated() { $assert = $this->assertSession(); // Create an entity with a date that we'll enter in Amercia/New York time. // Create an entity with a date that we'll enter in America/New York time. $start_date = new DrupalDateTime('2017-03-25 10:30:00', 'America/New_York'); $end_date = new DrupalDateTime('2017-03-28 10:30:00', 'America/New_York'); Loading @@ -26,18 +28,32 @@ class DateRangeTimezoneWidgetTest extends DateRangeTimezoneTestBase { $date_format = DateFormat::load('html_date')->getPattern(); $time_format = DateFormat::load('html_time')->getPattern(); $this->drupalPostForm('entity_test/add', [ $this->drupalGet('entity_test/add'); $edit = [ 'date[0][value][date]' => $start_date->format($date_format), 'date[0][value][time]' => $start_date->format($time_format), 'date[0][end_value][date]' => $end_date->format($date_format), 'date[0][end_value][time]' => $end_date->format($time_format), 'date[0][timezone]' => 'America/New_York', ], 'Save'); ]; $this->submitForm($edit, 'Save'); $assert->fieldValueEquals('date[0][value][date]', $start_date->format($date_format)); $assert->fieldValueEquals('date[0][value][time]', $start_date->format($time_format)); $assert->fieldValueEquals('date[0][end_value][date]', $end_date->format($date_format)); $assert->fieldValueEquals('date[0][end_value][time]', $end_date->format($time_format)); $this->assertEquals('America/New_York', $this->assertSession()->selectExists('Timezone')->getValue()); // Assert the stored values of the entity. $entity = EntityTest::loadMultiple(); $entity = reset($entity); // Convert the date back to storage timezone to assert the form value had // successfully massaged back to storage timezone. $start_date->setTimezone(new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE)); $this->assertEquals($start_date->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), $entity->get('date')->value); $end_date->setTimezone(new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE)); $this->assertEquals($end_date->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), $entity->get('date')->end_value); } } tests/src/Kernel/DateRangeTimezoneHelperTrait.php +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ trait DateRangeTimezoneHelperTrait { 'type' => 'daterange_timezone', ]) ->save(); $entity_display_repository->getViewDisplay('entity_test', 'entity_test', 'default') $entity_display_repository->getFormDisplay('entity_test', 'entity_test', 'default') ->setComponent($field_name, [ 'type' => 'daterange_timezone', ]) Loading Loading
src/Plugin/Field/FieldWidget/DateRangeTimezone.php +2 −0 Original line number Diff line number Diff line Loading @@ -33,7 +33,9 @@ class DateRangeTimezone extends DateRangeDefaultWidget { if ($items[$delta]->timezone) { $timezone = new \DateTimeZone($items[$delta]->timezone); $element['value']['#default_value']->setTimeZone($timezone); $element['value']['#date_timezone'] = $items[$delta]->timezone; $element['end_value']['#default_value']->setTimeZone($timezone); $element['end_value']['#date_timezone'] = $items[$delta]->timezone; } $element['timezone'] = [ Loading
tests/src/Functional/DateRangeTimezoneTestBase.php +5 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,11 @@ abstract class DateRangeTimezoneTestBase extends BrowserTestBase { use DateRangeTimezoneHelperTrait; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * Modules to enable. * Loading
tests/src/Functional/DateRangeTimezoneWidgetTest.php +19 −3 Original line number Diff line number Diff line Loading @@ -4,6 +4,8 @@ namespace Drupal\Tests\datetime_range_timezone\Functional; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\Entity\DateFormat; use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface; use Drupal\entity_test\Entity\EntityTest; /** * Test the datetime widget. Loading @@ -18,7 +20,7 @@ class DateRangeTimezoneWidgetTest extends DateRangeTimezoneTestBase { public function testWidgetDefaultValuesAreTranslated() { $assert = $this->assertSession(); // Create an entity with a date that we'll enter in Amercia/New York time. // Create an entity with a date that we'll enter in America/New York time. $start_date = new DrupalDateTime('2017-03-25 10:30:00', 'America/New_York'); $end_date = new DrupalDateTime('2017-03-28 10:30:00', 'America/New_York'); Loading @@ -26,18 +28,32 @@ class DateRangeTimezoneWidgetTest extends DateRangeTimezoneTestBase { $date_format = DateFormat::load('html_date')->getPattern(); $time_format = DateFormat::load('html_time')->getPattern(); $this->drupalPostForm('entity_test/add', [ $this->drupalGet('entity_test/add'); $edit = [ 'date[0][value][date]' => $start_date->format($date_format), 'date[0][value][time]' => $start_date->format($time_format), 'date[0][end_value][date]' => $end_date->format($date_format), 'date[0][end_value][time]' => $end_date->format($time_format), 'date[0][timezone]' => 'America/New_York', ], 'Save'); ]; $this->submitForm($edit, 'Save'); $assert->fieldValueEquals('date[0][value][date]', $start_date->format($date_format)); $assert->fieldValueEquals('date[0][value][time]', $start_date->format($time_format)); $assert->fieldValueEquals('date[0][end_value][date]', $end_date->format($date_format)); $assert->fieldValueEquals('date[0][end_value][time]', $end_date->format($time_format)); $this->assertEquals('America/New_York', $this->assertSession()->selectExists('Timezone')->getValue()); // Assert the stored values of the entity. $entity = EntityTest::loadMultiple(); $entity = reset($entity); // Convert the date back to storage timezone to assert the form value had // successfully massaged back to storage timezone. $start_date->setTimezone(new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE)); $this->assertEquals($start_date->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), $entity->get('date')->value); $end_date->setTimezone(new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE)); $this->assertEquals($end_date->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), $entity->get('date')->end_value); } }
tests/src/Kernel/DateRangeTimezoneHelperTrait.php +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ trait DateRangeTimezoneHelperTrait { 'type' => 'daterange_timezone', ]) ->save(); $entity_display_repository->getViewDisplay('entity_test', 'entity_test', 'default') $entity_display_repository->getFormDisplay('entity_test', 'entity_test', 'default') ->setComponent($field_name, [ 'type' => 'daterange_timezone', ]) Loading