From be87b2eff28b9e1b1b4848311730c9755e736679 Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Tue, 14 Jun 2022 14:51:25 +0200
Subject: [PATCH 01/18] OEL-1653: RangeDate Formatter with the time for the
 event dates.

---
 .../EventDateRangeFormatter.php               | 94 +++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php

diff --git a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
new file mode 100644
index 00000000..2e9e7e4f
--- /dev/null
+++ b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
@@ -0,0 +1,94 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\oe_whitelabel_starter_event\Plugin\Field\FieldFormatter;
+
+use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeFormatterBase;
+use Drupal\datetime_range\DateTimeRangeTrait;
+
+/**
+ * Plugin implementation of the 'Event dates' formatter for 'daterange' fields.
+ *
+ * This formatter renders the data range as plain text, with a fully
+ * configurable date format using the PHP date syntax and separator.
+ *
+ * @FieldFormatter(
+ *   id = "event_date_range_format",
+ *   label = @Translation("Event date range format"),
+ *   field_types = {
+ *     "daterange"
+ *   }
+ * )
+ */
+class EventDateRangeFormatter extends DateTimeFormatterBase {
+
+  use DateTimeRangeTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function viewElements(FieldItemListInterface $items, $langcode) {
+    $elements = [];
+
+    foreach ($items as $delta => $item) {
+      if (empty($item->start_date) && empty($item->end_date)) {
+        continue;
+      }
+
+      /** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */
+      $start_date = $item->start_date;
+      /** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */
+      $end_date = $item->end_date;
+
+      // Event on a single day.
+      if ($start_date->format('Y-m-d') === $end_date->format('Y-m-d')) {
+        $elements[$delta] = [
+          'start_date' => $this->buildCustomDate($start_date, 'l d F Y, H.i'),
+          'separator' => ['#plain_text' => '-'],
+          'end_date' => $this->buildCustomDate($end_date, 'H.i (T)'),
+        ];
+      }
+      // Event on multiple days.
+      else {
+        $elements[$delta] = [
+          'start_date' => $this->buildCustomDate($start_date, 'l d F Y, H.i'),
+          'separator' => ['#plain_text' => '-'],
+          'end_date' => $this->buildCustomDate($end_date, 'l d F Y, H.i (T)'),
+        ];
+      }
+    }
+
+    return $elements;
+  }
+
+  /**
+   * Prepare render for a date with custom format.
+   */
+  protected function buildCustomDate(DrupalDateTime $date, $format) {
+    $this->setTimeZone($date);
+
+    $build = [
+      '#markup' => $this->dateFormatter->format($date->getTimestamp(), 'custom', $format),
+      '#cache' => [
+        'contexts' => [
+          'timezone',
+        ],
+      ],
+    ];
+
+    return $build;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function formatDate($date) {
+    $format_type = $this->getSetting('format_type');
+    $timezone = $this->getSetting('timezone_override') ?: $date->getTimezone()->getName();
+    return $this->dateFormatter->format($date->getTimestamp(), $format_type, '', $timezone != '' ? $timezone : NULL);
+  }
+
+}
-- 
GitLab


From 9ef3ecdd786d52388ac056e7de3e39fed0262a49 Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Tue, 14 Jun 2022 14:52:10 +0200
Subject: [PATCH 02/18] OEL-1653: Update event full view adding the time at
 events dates.

---
 ...ity_view_display.node.oe_sc_event.full.yml |  7 +-
 ...y_view_display.node.oe_sc_event.teaser.yml |  3 +-
 ...ity_view_display.node.oe_sc_event.full.yml | 68 +++++++++++++++++++
 ...y_view_display.node.oe_sc_event.teaser.yml | 57 ++++++++++++++++
 ...e_whitelabel_starter_event.post_update.php | 16 +++++
 5 files changed, 146 insertions(+), 5 deletions(-)
 create mode 100755 modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
 create mode 100755 modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml

diff --git a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
index 6ad2e19b..b9798e46 100755
--- a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
+++ b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
@@ -11,8 +11,8 @@ dependencies:
     - field.field.node.oe_sc_event.oe_summary
     - node.type.oe_sc_event
   module:
-    - datetime_range
     - oe_whitelabel_helper
+    - oe_whitelabel_starter_event
     - text
     - user
 id: node.oe_sc_event.full
@@ -42,12 +42,10 @@ content:
     weight: 3
     region: content
   oe_sc_event_dates:
-    type: daterange_default
+    type: event_date_range_format
     label: inline
     settings:
       timezone_override: ''
-      format_type: oe_whitelabel_starter_event_date
-      separator: to
     third_party_settings: {  }
     weight: 1
     region: content
@@ -67,3 +65,4 @@ hidden:
   oe_content_short_title: true
   oe_featured_media: true
   oe_summary: true
+  search_api_excerpt: true
diff --git a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
index 62339844..1a2f3a8f 100755
--- a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
+++ b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
@@ -26,7 +26,7 @@ content:
     settings:
       timezone_override: ''
       format_type: oe_whitelabel_starter_event_date
-      separator: to
+      separator: '-'
     third_party_settings: {  }
     weight: 4
     region: content
@@ -54,3 +54,4 @@ hidden:
   oe_content_short_title: true
   oe_documents: true
   oe_featured_media: true
+  search_api_excerpt: true
diff --git a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
new file mode 100755
index 00000000..b9798e46
--- /dev/null
+++ b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
@@ -0,0 +1,68 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - core.entity_view_mode.node.full
+    - field.field.node.oe_sc_event.body
+    - field.field.node.oe_sc_event.oe_documents
+    - field.field.node.oe_sc_event.oe_featured_media
+    - field.field.node.oe_sc_event.oe_sc_event_dates
+    - field.field.node.oe_sc_event.oe_sc_event_location
+    - field.field.node.oe_sc_event.oe_summary
+    - node.type.oe_sc_event
+  module:
+    - oe_whitelabel_helper
+    - oe_whitelabel_starter_event
+    - text
+    - user
+id: node.oe_sc_event.full
+targetEntityType: node
+bundle: oe_sc_event
+mode: full
+content:
+  body:
+    type: text_default
+    label: above
+    settings: {  }
+    third_party_settings: {  }
+    weight: 0
+    region: content
+  links:
+    settings: {  }
+    third_party_settings: {  }
+    weight: 4
+    region: content
+  oe_documents:
+    type: entity_reference_entity_view
+    label: above
+    settings:
+      view_mode: default
+      link: true
+    third_party_settings: {  }
+    weight: 3
+    region: content
+  oe_sc_event_dates:
+    type: event_date_range_format
+    label: inline
+    settings:
+      timezone_override: ''
+    third_party_settings: {  }
+    weight: 1
+    region: content
+  oe_sc_event_location:
+    type: oe_whitelabel_helper_address_inline
+    label: inline
+    settings:
+      delimiter: ', '
+    third_party_settings: {  }
+    weight: 2
+    region: content
+hidden:
+  langcode: true
+  oe_content_content_owner: true
+  oe_content_legacy_link: true
+  oe_content_navigation_title: true
+  oe_content_short_title: true
+  oe_featured_media: true
+  oe_summary: true
+  search_api_excerpt: true
diff --git a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml
new file mode 100755
index 00000000..1a2f3a8f
--- /dev/null
+++ b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml
@@ -0,0 +1,57 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - core.entity_view_mode.node.teaser
+    - field.field.node.oe_sc_event.body
+    - field.field.node.oe_sc_event.oe_documents
+    - field.field.node.oe_sc_event.oe_featured_media
+    - field.field.node.oe_sc_event.oe_sc_event_dates
+    - field.field.node.oe_sc_event.oe_sc_event_location
+    - field.field.node.oe_sc_event.oe_summary
+    - node.type.oe_sc_event
+  module:
+    - address
+    - datetime_range
+    - text
+    - user
+id: node.oe_sc_event.teaser
+targetEntityType: node
+bundle: oe_sc_event
+mode: teaser
+content:
+  oe_sc_event_dates:
+    type: daterange_default
+    label: hidden
+    settings:
+      timezone_override: ''
+      format_type: oe_whitelabel_starter_event_date
+      separator: '-'
+    third_party_settings: {  }
+    weight: 4
+    region: content
+  oe_sc_event_location:
+    type: address_default
+    label: hidden
+    settings: {  }
+    third_party_settings: {  }
+    weight: 5
+    region: content
+  oe_summary:
+    type: text_default
+    label: hidden
+    settings: {  }
+    third_party_settings: {  }
+    weight: 2
+    region: content
+hidden:
+  body: true
+  langcode: true
+  links: true
+  oe_content_content_owner: true
+  oe_content_legacy_link: true
+  oe_content_navigation_title: true
+  oe_content_short_title: true
+  oe_documents: true
+  oe_featured_media: true
+  search_api_excerpt: true
diff --git a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
index fe1ab7d3..d2b5eea0 100644
--- a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
+++ b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
@@ -20,3 +20,19 @@ function oe_whitelabel_starter_event_post_update_00001(): void {
   ];
   ConfigImporter::importMultiple('module', 'oe_whitelabel_starter_event', '/config/post_updates/00001_content_banner', $configs, TRUE);
 }
+
+/**
+ * Add time to event dates.
+ */
+function oe_whitelabel_starter_event_post_update_00002(): void {
+  $configs = [
+    'core.entity_view_display.node.oe_sc_event.full',
+    'core.entity_view_display.node.oe_sc_event.teaser',
+  ];
+  ConfigImporter::importMultiple(
+    'module',
+    'oe_whitelabel_starter_event',
+    '/config/post_updates/00002_event_date_show_time',
+    $configs,
+  );
+}
-- 
GitLab


From a3a77822aa7a1e931301edf2962e6307f05b24e2 Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Tue, 14 Jun 2022 17:10:09 +0200
Subject: [PATCH 03/18] OEL-1653: Remove timezone_override settings.

---
 ...ity_view_display.node.oe_sc_event.full.yml |  3 +--
 ...ity_view_display.node.oe_sc_event.full.yml |  3 +--
 .../EventDateRangeFormatter.php               | 26 ++++++++++++++++---
 3 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
index b9798e46..5828f849 100755
--- a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
+++ b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
@@ -44,8 +44,7 @@ content:
   oe_sc_event_dates:
     type: event_date_range_format
     label: inline
-    settings:
-      timezone_override: ''
+    settings: {  }
     third_party_settings: {  }
     weight: 1
     region: content
diff --git a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
index b9798e46..5828f849 100755
--- a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
+++ b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
@@ -44,8 +44,7 @@ content:
   oe_sc_event_dates:
     type: event_date_range_format
     label: inline
-    settings:
-      timezone_override: ''
+    settings: {  }
     third_party_settings: {  }
     weight: 1
     region: content
diff --git a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
index 2e9e7e4f..705d4e2b 100644
--- a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
+++ b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
@@ -6,6 +6,7 @@ namespace Drupal\oe_whitelabel_starter_event\Plugin\Field\FieldFormatter;
 
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
 use Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeFormatterBase;
 use Drupal\datetime_range\DateTimeRangeTrait;
 
@@ -27,6 +28,27 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
 
   use DateTimeRangeTrait;
 
+  /**
+   * {@inheritdoc}
+   */
+  public static function defaultSettings() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsForm(array $form, FormStateInterface $form_state) {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsSummary() {
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -86,9 +108,7 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
    * {@inheritdoc}
    */
   protected function formatDate($date) {
-    $format_type = $this->getSetting('format_type');
-    $timezone = $this->getSetting('timezone_override') ?: $date->getTimezone()->getName();
-    return $this->dateFormatter->format($date->getTimestamp(), $format_type, '', $timezone != '' ? $timezone : NULL);
+    return $this->dateFormatter->format($date->getTimestamp(), 'custom', 'Y-m-d');
   }
 
 }
-- 
GitLab


From bedc88433ad01d3a1e11a45583600e0f5d1bcf42 Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Tue, 14 Jun 2022 19:17:39 +0200
Subject: [PATCH 04/18] OEL-1653: Event dates testing starting and end at same
 day and at diferent days.

---
 .../src/Functional/ContentEventRenderTest.php  | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/tests/src/Functional/ContentEventRenderTest.php b/tests/src/Functional/ContentEventRenderTest.php
index 4160c734..0b530176 100644
--- a/tests/src/Functional/ContentEventRenderTest.php
+++ b/tests/src/Functional/ContentEventRenderTest.php
@@ -130,6 +130,24 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
       trim($content_banner->filter('.oe-sc-event__oe-summary')->text())
     );
 
+    // Assert event dates starting and ending same day.
+    $this->assertSession()->pageTextMatches(
+      '/[a-zA-Z]+\\s[0-9]+\\s[a-zA-Z]+\\s2022,\\s[0-9]*\\.[0-9]+-[0-9]*\\.[0-9]+\\s\\([a-zA-Z]+\\)/i'
+      );
+
+    // Assert event dates starting and ending at different days.
+    $node->set('oe_sc_event_dates', [
+      'value' => '2022-02-15T08:00:00',
+      'end_value' => '2022-02-22T18:00:00',
+    ]);
+    $node->save();
+
+    $this->drupalGet('node/' . $node->id());
+
+    $this->assertSession()->pageTextMatches(
+      '/[a-zA-Z]+\\s[0-9]+\\s[a-zA-Z]+\\s2022,\\s[0-9]*\\.[0-9]+-[a-zA-Z]+\\s[0-9]+\\s[a-zA-Z]+\\s2022,\\s[0-9]*\\.[0-9]+\\s\\([a-zA-Z]+\\)/i'
+    );
+
     // Assert in-page navigation title.
     $this->assertEquals(
       'Page content',
-- 
GitLab


From ba39754ab37d6534e84f5282a9dc21c5a4b2dcfc Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Thu, 16 Jun 2022 13:18:54 +0200
Subject: [PATCH 05/18] OEL-1653: Add a settings form to the date format to not
 hardcode them.

---
 .../EventDateRangeFormatter.php               | 56 +++++++++++++++----
 1 file changed, 45 insertions(+), 11 deletions(-)

diff --git a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
index 705d4e2b..a0b6f69a 100644
--- a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
+++ b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
@@ -32,21 +32,52 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
    * {@inheritdoc}
    */
   public static function defaultSettings() {
-    return [];
+    return [
+      'date_format' => 'l d F Y',
+      'time_format' => 'H.i',
+      'datetime_format' => 'l d F Y, H.i',
+    ];
   }
 
   /**
    * {@inheritdoc}
    */
   public function settingsForm(array $form, FormStateInterface $form_state) {
-    return [];
+    $form['date_format'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Date format'),
+      '#description' => $this->t('See <a href="https://www.php.net/manual/datetime.format.php#refsect1-datetime.format-parameters" target="_blank">the documentation for PHP date formats</a>.'),
+      '#default_value' => $this->getSetting('date_format'),
+    ];
+
+    $form['time_format'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Time format'),
+      '#description' => $this->t('See <a href="https://www.php.net/manual/datetime.format.php#refsect1-datetime.format-parameters" target="_blank">the documentation for PHP date formats</a>.'),
+      '#default_value' => $this->getSetting('time_format'),
+    ];
+
+    $form['datetime_format'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Date/time format'),
+      '#description' => $this->t('See <a href="https://www.php.net/manual/datetime.format.php#refsect1-datetime.format-parameters" target="_blank">the documentation for PHP date formats</a>.'),
+      '#default_value' => $this->getSetting('datetime_format'),
+    ];
+
+    return $form;
   }
 
   /**
    * {@inheritdoc}
    */
   public function settingsSummary() {
-    return [];
+    $date = new DrupalDateTime();
+    $this->setTimeZone($date);
+    $summary[] = 'Date format: ' . $date->format($this->getSetting('date_format'), $this->getFormatSettings());
+    $summary[] = 'Time format: ' . $date->format($this->getSetting('time_format'), $this->getFormatSettings());
+    $summary[] = 'Datetime format: ' . $date->format($this->getSetting('datetime_format'), $this->getFormatSettings());
+
+    return $summary;
   }
 
   /**
@@ -56,7 +87,7 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
     $elements = [];
 
     foreach ($items as $delta => $item) {
-      if (empty($item->start_date) && empty($item->end_date)) {
+      if (empty($item->start_date) || empty($item->end_date)) {
         continue;
       }
 
@@ -65,20 +96,23 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
       /** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */
       $end_date = $item->end_date;
 
-      // Event on a single day.
+      $this->setTimeZone($start_date);
+      $this->setTimeZone($end_date);
+
       if ($start_date->format('Y-m-d') === $end_date->format('Y-m-d')) {
+        // The event is on a single day.
         $elements[$delta] = [
-          'start_date' => $this->buildCustomDate($start_date, 'l d F Y, H.i'),
+          'start_date' => $this->buildCustomDate($start_date, $this->getSetting('datetime_format')),
           'separator' => ['#plain_text' => '-'],
-          'end_date' => $this->buildCustomDate($end_date, 'H.i (T)'),
+          'end_date' => $this->buildCustomDate($end_date, $this->getSetting('time_format') . ' (T)'),
         ];
       }
-      // Event on multiple days.
       else {
+        // Start day and end day are different in the displayed time zone.
         $elements[$delta] = [
-          'start_date' => $this->buildCustomDate($start_date, 'l d F Y, H.i'),
-          'separator' => ['#plain_text' => '-'],
-          'end_date' => $this->buildCustomDate($end_date, 'l d F Y, H.i (T)'),
+          'start_date' => $this->buildCustomDate($start_date, $this->getSetting('datetime_format')),
+          'separator' => ['#plain_text' => ' - '],
+          'end_date' => $this->buildCustomDate($end_date, $this->getSetting('datetime_format') . ' (T)'),
         ];
       }
     }
-- 
GitLab


From 24808d56ed2d6fa66791b19f04c7fdd937359688 Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Thu, 16 Jun 2022 13:21:58 +0200
Subject: [PATCH 06/18] OEL-1653: Testing dates after set the timezone.

---
 .../src/Functional/ContentEventRenderTest.php | 20 ++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/tests/src/Functional/ContentEventRenderTest.php b/tests/src/Functional/ContentEventRenderTest.php
index 0b530176..df53dcb9 100644
--- a/tests/src/Functional/ContentEventRenderTest.php
+++ b/tests/src/Functional/ContentEventRenderTest.php
@@ -94,6 +94,12 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
    * Tests the event page.
    */
   public function testEventPage(): void {
+    // Set an explicit site timezone, and disallow per-user timezones.
+    $this->config('system.date')
+      ->set('timezone.user.configurable', 0)
+      ->set('timezone.default', 'CET')
+      ->save();
+
     $node = $this->createExampleEvent();
     $this->drupalGet('node/' . $node->id());
 
@@ -130,10 +136,10 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
       trim($content_banner->filter('.oe-sc-event__oe-summary')->text())
     );
 
+    $date = $crawler->filter('dd');
+
     // Assert event dates starting and ending same day.
-    $this->assertSession()->pageTextMatches(
-      '/[a-zA-Z]+\\s[0-9]+\\s[a-zA-Z]+\\s2022,\\s[0-9]*\\.[0-9]+-[0-9]*\\.[0-9]+\\s\\([a-zA-Z]+\\)/i'
-      );
+    $this->assertEquals('Wednesday 09 February 2022, 21.00-23.00 (CET)', trim($date->text()));
 
     // Assert event dates starting and ending at different days.
     $node->set('oe_sc_event_dates', [
@@ -142,11 +148,11 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
     ]);
     $node->save();
 
-    $this->drupalGet('node/' . $node->id());
+    $this->drupalGet($node->toUrl());
+    $crawler = $client->getCrawler();
 
-    $this->assertSession()->pageTextMatches(
-      '/[a-zA-Z]+\\s[0-9]+\\s[a-zA-Z]+\\s2022,\\s[0-9]*\\.[0-9]+-[a-zA-Z]+\\s[0-9]+\\s[a-zA-Z]+\\s2022,\\s[0-9]*\\.[0-9]+\\s\\([a-zA-Z]+\\)/i'
-    );
+    $date = $crawler->filter('dd');
+    $this->assertEquals('Tuesday 15 February 2022, 09.00 - Tuesday 22 February 2022, 19.00 (CET)', trim($date->text()));
 
     // Assert in-page navigation title.
     $this->assertEquals(
-- 
GitLab


From 0198fb832edb07d0e5d373b0cef0dc46158429c2 Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Mon, 20 Jun 2022 00:09:16 +0200
Subject: [PATCH 07/18] OEL-1653: Testing dates after set the timezone.

---
 .../oe_whitelabel_starter_event.schema.yml    | 10 +++++++++
 .../EventDateRangeFormatter.php               | 21 +++++++------------
 2 files changed, 18 insertions(+), 13 deletions(-)
 create mode 100644 modules/oe_whitelabel_starter_event/config/schema/oe_whitelabel_starter_event.schema.yml

diff --git a/modules/oe_whitelabel_starter_event/config/schema/oe_whitelabel_starter_event.schema.yml b/modules/oe_whitelabel_starter_event/config/schema/oe_whitelabel_starter_event.schema.yml
new file mode 100644
index 00000000..181bf70e
--- /dev/null
+++ b/modules/oe_whitelabel_starter_event/config/schema/oe_whitelabel_starter_event.schema.yml
@@ -0,0 +1,10 @@
+field.formatter.settings.event_date_range_format:
+  type: mapping
+  label: 'Date Time range format'
+  mapping:
+    time_format:
+      type: string
+      label: 'Time format'
+    datetime_format:
+      type: string
+      label: 'DateTime format'
diff --git a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
index a0b6f69a..cf5d8126 100644
--- a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
+++ b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
@@ -33,7 +33,6 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
    */
   public static function defaultSettings() {
     return [
-      'date_format' => 'l d F Y',
       'time_format' => 'H.i',
       'datetime_format' => 'l d F Y, H.i',
     ];
@@ -43,13 +42,6 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
    * {@inheritdoc}
    */
   public function settingsForm(array $form, FormStateInterface $form_state) {
-    $form['date_format'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Date format'),
-      '#description' => $this->t('See <a href="https://www.php.net/manual/datetime.format.php#refsect1-datetime.format-parameters" target="_blank">the documentation for PHP date formats</a>.'),
-      '#default_value' => $this->getSetting('date_format'),
-    ];
-
     $form['time_format'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Time format'),
@@ -73,7 +65,6 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
   public function settingsSummary() {
     $date = new DrupalDateTime();
     $this->setTimeZone($date);
-    $summary[] = 'Date format: ' . $date->format($this->getSetting('date_format'), $this->getFormatSettings());
     $summary[] = 'Time format: ' . $date->format($this->getSetting('time_format'), $this->getFormatSettings());
     $summary[] = 'Datetime format: ' . $date->format($this->getSetting('datetime_format'), $this->getFormatSettings());
 
@@ -100,19 +91,25 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
       $this->setTimeZone($end_date);
 
       if ($start_date->format('Y-m-d') === $end_date->format('Y-m-d')) {
-        // The event is on a single day.
+        // The event is on a single day with time.
         $elements[$delta] = [
           'start_date' => $this->buildCustomDate($start_date, $this->getSetting('datetime_format')),
           'separator' => ['#plain_text' => '-'],
           'end_date' => $this->buildCustomDate($end_date, $this->getSetting('time_format') . ' (T)'),
         ];
+        // The event is on a single day with no time.
+        if (empty($this->getSetting('time_format'))) {
+          $elements[$delta] = $this->buildCustomDate($start_date, $this->getSetting('datetime_format'));
+        }
       }
       else {
         // Start day and end day are different in the displayed time zone.
         $elements[$delta] = [
           'start_date' => $this->buildCustomDate($start_date, $this->getSetting('datetime_format')),
           'separator' => ['#plain_text' => ' - '],
-          'end_date' => $this->buildCustomDate($end_date, $this->getSetting('datetime_format') . ' (T)'),
+          'end_date' => !empty($this->getSetting('time_format'))
+          ? $this->buildCustomDate($end_date, $this->getSetting('datetime_format') . ' (T)')
+          : $this->buildCustomDate($end_date, $this->getSetting('datetime_format')),
         ];
       }
     }
@@ -124,8 +121,6 @@ class EventDateRangeFormatter extends DateTimeFormatterBase {
    * Prepare render for a date with custom format.
    */
   protected function buildCustomDate(DrupalDateTime $date, $format) {
-    $this->setTimeZone($date);
-
     $build = [
       '#markup' => $this->dateFormatter->format($date->getTimestamp(), 'custom', $format),
       '#cache' => [
-- 
GitLab


From 13157c00fa231b5c6730910d5479b0d3c5d8eba7 Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Mon, 20 Jun 2022 00:09:51 +0200
Subject: [PATCH 08/18] OEL-1653: Event teaser testing date ranges.

---
 .../src/Functional/ContentEventRenderTest.php | 30 +++++++++++++++++--
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/tests/src/Functional/ContentEventRenderTest.php b/tests/src/Functional/ContentEventRenderTest.php
index df53dcb9..1bf7c979 100644
--- a/tests/src/Functional/ContentEventRenderTest.php
+++ b/tests/src/Functional/ContentEventRenderTest.php
@@ -94,7 +94,7 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
    * Tests the event page.
    */
   public function testEventPage(): void {
-    // Set an explicit site timezone, and disallow per-user timezones.
+    // Set an explicit site timezone.
     $this->config('system.date')
       ->set('timezone.user.configurable', 0)
       ->set('timezone.default', 'CET')
@@ -136,7 +136,7 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
       trim($content_banner->filter('.oe-sc-event__oe-summary')->text())
     );
 
-    $date = $crawler->filter('dd');
+    $date = $crawler->filter('dl > dd');
 
     // Assert event dates starting and ending same day.
     $this->assertEquals('Wednesday 09 February 2022, 21.00-23.00 (CET)', trim($date->text()));
@@ -151,7 +151,7 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
     $this->drupalGet($node->toUrl());
     $crawler = $client->getCrawler();
 
-    $date = $crawler->filter('dd');
+    $date = $crawler->filter('dl > dd');
     $this->assertEquals('Tuesday 15 February 2022, 09.00 - Tuesday 22 February 2022, 19.00 (CET)', trim($date->text()));
 
     // Assert in-page navigation title.
@@ -192,6 +192,11 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
    * Tests the event rendered in 'Teaser' view mode.
    */
   public function testEventRenderingTeaser(): void {
+    // Set an explicit site timezone.
+    $this->config('system.date')
+      ->set('timezone.user.configurable', 0)
+      ->set('timezone.default', 'CET')
+      ->save();
     $node = $this->createExampleEvent();
     // Build node teaser view.
     $builder = \Drupal::entityTypeManager()->getViewBuilder('node');
@@ -213,6 +218,25 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
       'image-test.png',
       trim($image->attr('src'))
     );
+
+    $time = $crawler->filter('div > span.text-muted');
+    $this->assertEquals('09 Feb 2022', trim($time->text()));
+
+    // Assert event dates starting and ending at different days.
+    $node->set('oe_sc_event_dates', [
+      'value' => '2022-02-15T08:00:00',
+      'end_value' => '2022-02-22T18:00:00',
+    ]);
+    $node->save();
+
+    $builder = \Drupal::entityTypeManager()->getViewBuilder('node');
+    $build = $builder->view($node, 'teaser');
+    $render = $this->container->get('renderer')->renderRoot($build);
+    $crawler = new Crawler((string) $render);
+    $this->drupalGet($node->toUrl());
+
+    $time = $crawler->filter('div > span.text-muted');
+    $this->assertEquals('15 Feb 2022 - 22 Feb 2022', trim($time->text()));
   }
 
 }
-- 
GitLab


From d662e7f3afd932861c96a736562c3ae8305f7c63 Mon Sep 17 00:00:00 2001
From: escuriola <escuriola@gmail.com>
Date: Mon, 20 Jun 2022 00:10:17 +0200
Subject: [PATCH 09/18] OEL-1653: Post update with all date changes.

---
 .../core.date_format.oe_whitelabel_project_date.yml      | 2 +-
 .../core.entity_view_display.node.oe_sc_event.teaser.yml | 9 ++++-----
 .../core.date_format.oe_whitelabel_project_date.yml      | 7 +++++++
 .../core.entity_view_display.node.oe_sc_event.teaser.yml | 9 ++++-----
 .../oe_whitelabel_starter_event.post_update.php          | 1 +
 5 files changed, 17 insertions(+), 11 deletions(-)
 create mode 100644 modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.date_format.oe_whitelabel_project_date.yml

diff --git a/modules/oe_whitelabel_extra_project/config/install/core.date_format.oe_whitelabel_project_date.yml b/modules/oe_whitelabel_extra_project/config/install/core.date_format.oe_whitelabel_project_date.yml
index 42fc99ee..cd2d1aee 100644
--- a/modules/oe_whitelabel_extra_project/config/install/core.date_format.oe_whitelabel_project_date.yml
+++ b/modules/oe_whitelabel_extra_project/config/install/core.date_format.oe_whitelabel_project_date.yml
@@ -4,4 +4,4 @@ dependencies: {  }
 id: oe_whitelabel_project_date
 label: 'OE Whitelabel Project date'
 locked: false
-pattern: 'd F Y'
+pattern: 'd M Y'
diff --git a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
index 1a2f3a8f..b540c64a 100755
--- a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
+++ b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
@@ -12,7 +12,7 @@ dependencies:
     - node.type.oe_sc_event
   module:
     - address
-    - datetime_range
+    - oe_whitelabel_starter_event
     - text
     - user
 id: node.oe_sc_event.teaser
@@ -21,12 +21,11 @@ bundle: oe_sc_event
 mode: teaser
 content:
   oe_sc_event_dates:
-    type: daterange_default
+    type: event_date_range_format
     label: hidden
     settings:
-      timezone_override: ''
-      format_type: oe_whitelabel_starter_event_date
-      separator: '-'
+      time_format: ''
+      datetime_format: 'd M Y'
     third_party_settings: {  }
     weight: 4
     region: content
diff --git a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.date_format.oe_whitelabel_project_date.yml b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.date_format.oe_whitelabel_project_date.yml
new file mode 100644
index 00000000..cd2d1aee
--- /dev/null
+++ b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.date_format.oe_whitelabel_project_date.yml
@@ -0,0 +1,7 @@
+langcode: en
+status: true
+dependencies: {  }
+id: oe_whitelabel_project_date
+label: 'OE Whitelabel Project date'
+locked: false
+pattern: 'd M Y'
diff --git a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml
index 1a2f3a8f..b540c64a 100755
--- a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml
+++ b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml
@@ -12,7 +12,7 @@ dependencies:
     - node.type.oe_sc_event
   module:
     - address
-    - datetime_range
+    - oe_whitelabel_starter_event
     - text
     - user
 id: node.oe_sc_event.teaser
@@ -21,12 +21,11 @@ bundle: oe_sc_event
 mode: teaser
 content:
   oe_sc_event_dates:
-    type: daterange_default
+    type: event_date_range_format
     label: hidden
     settings:
-      timezone_override: ''
-      format_type: oe_whitelabel_starter_event_date
-      separator: '-'
+      time_format: ''
+      datetime_format: 'd M Y'
     third_party_settings: {  }
     weight: 4
     region: content
diff --git a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
index d2b5eea0..104cbf39 100644
--- a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
+++ b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
@@ -28,6 +28,7 @@ function oe_whitelabel_starter_event_post_update_00002(): void {
   $configs = [
     'core.entity_view_display.node.oe_sc_event.full',
     'core.entity_view_display.node.oe_sc_event.teaser',
+    'core.date_format.oe_whitelabel_project_date',
   ];
   ConfigImporter::importMultiple(
     'module',
-- 
GitLab


From e2d45072d7f5e6fae80619b6240110c3c5de7938 Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Fri, 24 Jun 2022 21:44:21 +0200
Subject: [PATCH 10/18] OEL-1653: Introduce daterange_compact instead of custom
 code.

---
 composer.json                                    |  1 +
 ...ormat.oe_whitelabel_date_only_short_month.yml | 16 ++++++++++++++++
 ...mpact.format.oe_whitelabel_date_time_long.yml | 16 ++++++++++++++++
 .../oe_whitelabel_helper.info.yml                |  3 +++
 ...entity_view_display.node.oe_sc_event.full.yml |  7 ++++---
 ...tity_view_display.node.oe_sc_event.teaser.yml |  7 +++----
 ...re.date_format.oe_whitelabel_project_date.yml |  7 -------
 ...entity_view_display.node.oe_sc_event.full.yml |  7 ++++---
 ...tity_view_display.node.oe_sc_event.teaser.yml |  7 +++----
 .../oe_whitelabel_starter_event.post_update.php  |  8 +-------
 tests/src/Functional/ContentEventRenderTest.php  |  2 +-
 11 files changed, 52 insertions(+), 29 deletions(-)
 create mode 100644 modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
 create mode 100644 modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_time_long.yml
 delete mode 100644 modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.date_format.oe_whitelabel_project_date.yml

diff --git a/composer.json b/composer.json
index 1ce48248..95db8558 100644
--- a/composer.json
+++ b/composer.json
@@ -9,6 +9,7 @@
         "php": ">=7.4",
         "cweagans/composer-patches": "^1.7",
         "drupal/core": "^9.2",
+        "drupal/daterange_compact": "^2.0",
         "drupal/twig_field_value": "^2.0",
         "openeuropa/composer-artifacts": "^1.0.0-alpha1",
         "openeuropa/oe_bootstrap_theme": "0.1.202206231430"
diff --git a/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_only_short_month.yml b/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
new file mode 100644
index 00000000..73b6820a
--- /dev/null
+++ b/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
@@ -0,0 +1,16 @@
+langcode: en
+status: true
+dependencies: {  }
+id: oe_whitelabel_date_only_short_month
+label: 'Date only, short month'
+default_pattern: 'd M Y'
+default_separator: ' - '
+same_day_start_pattern: 'd M Y'
+same_day_end_pattern: ''
+same_day_separator: ''
+same_month_start_pattern: ''
+same_month_end_pattern: ''
+same_month_separator: ''
+same_year_start_pattern: ''
+same_year_end_pattern: ''
+same_year_separator: ''
diff --git a/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_time_long.yml b/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_time_long.yml
new file mode 100644
index 00000000..9756862e
--- /dev/null
+++ b/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_time_long.yml
@@ -0,0 +1,16 @@
+langcode: en
+status: true
+dependencies: {  }
+id: oe_whitelabel_date_time_long
+label: 'Date and time, long names'
+default_pattern: 'l d F Y, H.i (T)'
+default_separator: ' - '
+same_day_start_pattern: 'l d F Y, H.i'
+same_day_end_pattern: 'H.i (T)'
+same_day_separator: '-'
+same_month_start_pattern: ''
+same_month_end_pattern: ''
+same_month_separator: ''
+same_year_start_pattern: ''
+same_year_end_pattern: ''
+same_year_separator: ''
diff --git a/modules/oe_whitelabel_helper/oe_whitelabel_helper.info.yml b/modules/oe_whitelabel_helper/oe_whitelabel_helper.info.yml
index 210d21be..28581dbd 100644
--- a/modules/oe_whitelabel_helper/oe_whitelabel_helper.info.yml
+++ b/modules/oe_whitelabel_helper/oe_whitelabel_helper.info.yml
@@ -7,6 +7,7 @@ core_version_requirement: ^9.2
 dependencies:
   - drupal:node
   - drupal:twig_field_value
+  - drupal:daterange_compact
   - oe_bootstrap_theme:oe_bootstrap_theme_helper
   - openeuropa:oe_corporate_blocks
 
@@ -15,3 +16,5 @@ dependencies:
 config_devel:
   install:
     - core.entity_view_mode.node.oe_w_content_banner
+    - daterange_compact.format.oe_whitelabel_date_only_short_month
+    - daterange_compact.format.oe_whitelabel_date_time_long
diff --git a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
index 5828f849..ebe638c0 100755
--- a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
+++ b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.full.yml
@@ -11,8 +11,8 @@ dependencies:
     - field.field.node.oe_sc_event.oe_summary
     - node.type.oe_sc_event
   module:
+    - daterange_compact
     - oe_whitelabel_helper
-    - oe_whitelabel_starter_event
     - text
     - user
 id: node.oe_sc_event.full
@@ -42,9 +42,10 @@ content:
     weight: 3
     region: content
   oe_sc_event_dates:
-    type: event_date_range_format
+    type: daterange_compact
     label: inline
-    settings: {  }
+    settings:
+      daterange_compact_format: oe_whitelabel_date_time_long
     third_party_settings: {  }
     weight: 1
     region: content
diff --git a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
index b540c64a..22910d1f 100755
--- a/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
+++ b/modules/oe_whitelabel_starter_event/config/install/core.entity_view_display.node.oe_sc_event.teaser.yml
@@ -12,7 +12,7 @@ dependencies:
     - node.type.oe_sc_event
   module:
     - address
-    - oe_whitelabel_starter_event
+    - daterange_compact
     - text
     - user
 id: node.oe_sc_event.teaser
@@ -21,11 +21,10 @@ bundle: oe_sc_event
 mode: teaser
 content:
   oe_sc_event_dates:
-    type: event_date_range_format
+    type: daterange_compact
     label: hidden
     settings:
-      time_format: ''
-      datetime_format: 'd M Y'
+      daterange_compact_format: oe_whitelabel_date_only_short_month
     third_party_settings: {  }
     weight: 4
     region: content
diff --git a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.date_format.oe_whitelabel_project_date.yml b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.date_format.oe_whitelabel_project_date.yml
deleted file mode 100644
index cd2d1aee..00000000
--- a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.date_format.oe_whitelabel_project_date.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-langcode: en
-status: true
-dependencies: {  }
-id: oe_whitelabel_project_date
-label: 'OE Whitelabel Project date'
-locked: false
-pattern: 'd M Y'
diff --git a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
index 5828f849..ebe638c0 100755
--- a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
+++ b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.full.yml
@@ -11,8 +11,8 @@ dependencies:
     - field.field.node.oe_sc_event.oe_summary
     - node.type.oe_sc_event
   module:
+    - daterange_compact
     - oe_whitelabel_helper
-    - oe_whitelabel_starter_event
     - text
     - user
 id: node.oe_sc_event.full
@@ -42,9 +42,10 @@ content:
     weight: 3
     region: content
   oe_sc_event_dates:
-    type: event_date_range_format
+    type: daterange_compact
     label: inline
-    settings: {  }
+    settings:
+      daterange_compact_format: oe_whitelabel_date_time_long
     third_party_settings: {  }
     weight: 1
     region: content
diff --git a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml
index b540c64a..22910d1f 100755
--- a/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml
+++ b/modules/oe_whitelabel_starter_event/config/post_updates/00002_event_date_show_time/core.entity_view_display.node.oe_sc_event.teaser.yml
@@ -12,7 +12,7 @@ dependencies:
     - node.type.oe_sc_event
   module:
     - address
-    - oe_whitelabel_starter_event
+    - daterange_compact
     - text
     - user
 id: node.oe_sc_event.teaser
@@ -21,11 +21,10 @@ bundle: oe_sc_event
 mode: teaser
 content:
   oe_sc_event_dates:
-    type: event_date_range_format
+    type: daterange_compact
     label: hidden
     settings:
-      time_format: ''
-      datetime_format: 'd M Y'
+      daterange_compact_format: oe_whitelabel_date_only_short_month
     third_party_settings: {  }
     weight: 4
     region: content
diff --git a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
index 104cbf39..817165f1 100644
--- a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
+++ b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.post_update.php
@@ -28,12 +28,6 @@ function oe_whitelabel_starter_event_post_update_00002(): void {
   $configs = [
     'core.entity_view_display.node.oe_sc_event.full',
     'core.entity_view_display.node.oe_sc_event.teaser',
-    'core.date_format.oe_whitelabel_project_date',
   ];
-  ConfigImporter::importMultiple(
-    'module',
-    'oe_whitelabel_starter_event',
-    '/config/post_updates/00002_event_date_show_time',
-    $configs,
-  );
+  ConfigImporter::importMultiple('module', 'oe_whitelabel_starter_event', '/config/post_updates/00002_event_date_show_time', $configs);
 }
diff --git a/tests/src/Functional/ContentEventRenderTest.php b/tests/src/Functional/ContentEventRenderTest.php
index 1bf7c979..68ca2505 100644
--- a/tests/src/Functional/ContentEventRenderTest.php
+++ b/tests/src/Functional/ContentEventRenderTest.php
@@ -152,7 +152,7 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
     $crawler = $client->getCrawler();
 
     $date = $crawler->filter('dl > dd');
-    $this->assertEquals('Tuesday 15 February 2022, 09.00 - Tuesday 22 February 2022, 19.00 (CET)', trim($date->text()));
+    $this->assertEquals('Tuesday 15 February 2022, 09.00 (CET) - Tuesday 22 February 2022, 19.00 (CET)', trim($date->text()));
 
     // Assert in-page navigation title.
     $this->assertEquals(
-- 
GitLab


From a400425645acaad9111b741fffb995f7570a9ab0 Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Fri, 24 Jun 2022 21:44:45 +0200
Subject: [PATCH 11/18] OEL-1653: Install new date formats in update path.

---
 ...ormat.oe_whitelabel_date_only_short_month.yml | 16 ++++++++++++++++
 ...mpact.format.oe_whitelabel_date_time_long.yml | 16 ++++++++++++++++
 .../oe_whitelabel_helper.post_update.php         | 13 +++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
 create mode 100644 modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_time_long.yml

diff --git a/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_only_short_month.yml b/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
new file mode 100644
index 00000000..73b6820a
--- /dev/null
+++ b/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
@@ -0,0 +1,16 @@
+langcode: en
+status: true
+dependencies: {  }
+id: oe_whitelabel_date_only_short_month
+label: 'Date only, short month'
+default_pattern: 'd M Y'
+default_separator: ' - '
+same_day_start_pattern: 'd M Y'
+same_day_end_pattern: ''
+same_day_separator: ''
+same_month_start_pattern: ''
+same_month_end_pattern: ''
+same_month_separator: ''
+same_year_start_pattern: ''
+same_year_end_pattern: ''
+same_year_separator: ''
diff --git a/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_time_long.yml b/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_time_long.yml
new file mode 100644
index 00000000..269b59ce
--- /dev/null
+++ b/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_time_long.yml
@@ -0,0 +1,16 @@
+langcode: en
+status: true
+dependencies: {  }
+id: oe_whitelabel_date_time_long
+label: 'Date and time, long names'
+default_pattern: 'l d F Y, H.i (T)'
+default_separator: ' - '
+same_day_start_pattern: 'l d F Y, H.i'
+same_day_end_pattern: 'H.i (T)'
+same_day_separator: ' - '
+same_month_start_pattern: ''
+same_month_end_pattern: ''
+same_month_separator: ''
+same_year_start_pattern: ''
+same_year_end_pattern: ''
+same_year_separator: ''
diff --git a/modules/oe_whitelabel_helper/oe_whitelabel_helper.post_update.php b/modules/oe_whitelabel_helper/oe_whitelabel_helper.post_update.php
index d82ac165..798912a9 100644
--- a/modules/oe_whitelabel_helper/oe_whitelabel_helper.post_update.php
+++ b/modules/oe_whitelabel_helper/oe_whitelabel_helper.post_update.php
@@ -19,3 +19,16 @@ function oe_whitelabel_helper_post_update_00001(): void {
   ];
   ConfigImporter::importMultiple('module', 'oe_whitelabel_helper', '/config/post_updates/00001_content_banner', $configs, TRUE);
 }
+
+/**
+ * Create date range formats.
+ */
+function oe_whitelabel_helper_post_update_00002(): void {
+  \Drupal::service('module_installer')->install(['daterange_compact']);
+
+  $configs = [
+    'daterange_compact.format.oe_whitelabel_date_only_short_month',
+    'daterange_compact.format.oe_whitelabel_date_time_long',
+  ];
+  ConfigImporter::importMultiple('module', 'oe_whitelabel_helper', '/config/post_updates/00002_date_range_formats', $configs, TRUE);
+}
-- 
GitLab


From 227a72cefe78b0f15cd3af6d457aa7541d40b437 Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Fri, 24 Jun 2022 21:45:48 +0200
Subject: [PATCH 12/18] OEL-1653: Use proper method for test setup.

---
 .../src/Functional/ContentEventRenderTest.php | 26 ++++++++++---------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/tests/src/Functional/ContentEventRenderTest.php b/tests/src/Functional/ContentEventRenderTest.php
index 68ca2505..3a8026bf 100644
--- a/tests/src/Functional/ContentEventRenderTest.php
+++ b/tests/src/Functional/ContentEventRenderTest.php
@@ -22,11 +22,24 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = [
+  protected static $modules = [
     'block',
     'oe_whitelabel_starter_event',
   ];
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Set an explicit site timezone.
+    $this->config('system.date')
+      ->set('timezone.user.configurable', 0)
+      ->set('timezone.default', 'CET')
+      ->save();
+  }
+
   /**
    * Creates an example event node.
    *
@@ -94,12 +107,6 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
    * Tests the event page.
    */
   public function testEventPage(): void {
-    // Set an explicit site timezone.
-    $this->config('system.date')
-      ->set('timezone.user.configurable', 0)
-      ->set('timezone.default', 'CET')
-      ->save();
-
     $node = $this->createExampleEvent();
     $this->drupalGet('node/' . $node->id());
 
@@ -192,11 +199,6 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
    * Tests the event rendered in 'Teaser' view mode.
    */
   public function testEventRenderingTeaser(): void {
-    // Set an explicit site timezone.
-    $this->config('system.date')
-      ->set('timezone.user.configurable', 0)
-      ->set('timezone.default', 'CET')
-      ->save();
     $node = $this->createExampleEvent();
     // Build node teaser view.
     $builder = \Drupal::entityTypeManager()->getViewBuilder('node');
-- 
GitLab


From 7712a3db554e69509b2ee2f960af4548a8897135 Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Fri, 24 Jun 2022 21:46:29 +0200
Subject: [PATCH 13/18] OEL-1653: Move non-test methods last in the class.

---
 .../src/Functional/ContentEventRenderTest.php | 126 +++++++++---------
 1 file changed, 63 insertions(+), 63 deletions(-)

diff --git a/tests/src/Functional/ContentEventRenderTest.php b/tests/src/Functional/ContentEventRenderTest.php
index 3a8026bf..7f063b89 100644
--- a/tests/src/Functional/ContentEventRenderTest.php
+++ b/tests/src/Functional/ContentEventRenderTest.php
@@ -40,69 +40,6 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
       ->save();
   }
 
-  /**
-   * Creates an example event node.
-   *
-   * @return \Drupal\node\NodeInterface
-   *   Event node.
-   */
-  protected function createExampleEvent(): NodeInterface {
-    // Create a sample media entity to be embedded.
-    File::create([
-      'uri' => $this->getTestFiles('image')[0]->uri,
-    ])->save();
-    $media_image = Media::create([
-      'bundle' => 'image',
-      'name' => 'Starter Image test',
-      'oe_media_image' => [
-        [
-          'target_id' => 1,
-          'alt' => 'Starter Image test alt',
-          'title' => 'Starter Image test title',
-        ],
-      ],
-    ]);
-    $media_image->save();
-
-    // Create a sample document media entity to be embedded.
-    File::create([
-      'uri' => $this->getTestFiles('text')[0]->uri,
-    ])->save();
-    $media_document = Media::create([
-      'bundle' => 'document',
-      'name' => 'Event document test',
-      'oe_media_file_type' => 'local',
-      'oe_media_file' => [
-        [
-          'target_id' => 2,
-          'alt' => 'Event document alt',
-          'title' => 'Event document title',
-        ],
-      ],
-    ]);
-    $media_document->save();
-
-    /** @var \Drupal\node\Entity\Node $node */
-    $node = \Drupal::entityTypeManager()
-      ->getStorage('node')
-      ->create([
-        'type' => 'oe_sc_event',
-        'title' => 'Test event node',
-        'oe_summary' => 'https://www.example.org is a web page',
-        'body' => 'Event body',
-        'oe_sc_event_dates' => [
-          'value' => '2022-02-09T20:00:00',
-          'end_value' => '2022-02-09T22:00:00',
-        ],
-        'uid' => 1,
-        'status' => 1,
-      ]);
-    $node->set('oe_documents', [$media_document]);
-    $node->set('oe_featured_media', [$media_image]);
-    $node->save();
-    return $node;
-  }
-
   /**
    * Tests the event page.
    */
@@ -241,4 +178,67 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
     $this->assertEquals('15 Feb 2022 - 22 Feb 2022', trim($time->text()));
   }
 
+  /**
+   * Creates an example event node.
+   *
+   * @return \Drupal\node\NodeInterface
+   *   Event node.
+   */
+  protected function createExampleEvent(): NodeInterface {
+    // Create a sample media entity to be embedded.
+    File::create([
+      'uri' => $this->getTestFiles('image')[0]->uri,
+    ])->save();
+    $media_image = Media::create([
+      'bundle' => 'image',
+      'name' => 'Starter Image test',
+      'oe_media_image' => [
+        [
+          'target_id' => 1,
+          'alt' => 'Starter Image test alt',
+          'title' => 'Starter Image test title',
+        ],
+      ],
+    ]);
+    $media_image->save();
+
+    // Create a sample document media entity to be embedded.
+    File::create([
+      'uri' => $this->getTestFiles('text')[0]->uri,
+    ])->save();
+    $media_document = Media::create([
+      'bundle' => 'document',
+      'name' => 'Event document test',
+      'oe_media_file_type' => 'local',
+      'oe_media_file' => [
+        [
+          'target_id' => 2,
+          'alt' => 'Event document alt',
+          'title' => 'Event document title',
+        ],
+      ],
+    ]);
+    $media_document->save();
+
+    /** @var \Drupal\node\Entity\Node $node */
+    $node = \Drupal::entityTypeManager()
+      ->getStorage('node')
+      ->create([
+        'type' => 'oe_sc_event',
+        'title' => 'Test event node',
+        'oe_summary' => 'https://www.example.org is a web page',
+        'body' => 'Event body',
+        'oe_sc_event_dates' => [
+          'value' => '2022-02-09T20:00:00',
+          'end_value' => '2022-02-09T22:00:00',
+        ],
+        'uid' => 1,
+        'status' => 1,
+      ]);
+    $node->set('oe_documents', [$media_document]);
+    $node->set('oe_featured_media', [$media_image]);
+    $node->save();
+    return $node;
+  }
+
 }
-- 
GitLab


From 7213d9e5e9c856afe0a66d55a590eb6155228539 Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Fri, 24 Jun 2022 22:51:42 +0200
Subject: [PATCH 14/18] OEL-1653: Enable module in kernel tests.

---
 .../tests/src/Kernel/AbstractKernelTestBase.php               | 1 +
 tests/src/Kernel/AbstractKernelTestBase.php                   | 4 +---
 tests/src/Kernel/ContentLanguageSwitcherTest.php              | 3 ++-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/modules/oe_whitelabel_paragraphs/tests/src/Kernel/AbstractKernelTestBase.php b/modules/oe_whitelabel_paragraphs/tests/src/Kernel/AbstractKernelTestBase.php
index 437d1e64..cfdbd376 100644
--- a/modules/oe_whitelabel_paragraphs/tests/src/Kernel/AbstractKernelTestBase.php
+++ b/modules/oe_whitelabel_paragraphs/tests/src/Kernel/AbstractKernelTestBase.php
@@ -21,6 +21,7 @@ abstract class AbstractKernelTestBase extends KernelTestBase {
    */
   protected static $modules = [
     'breakpoint',
+    'daterange_compact',
     'image',
     'oe_bootstrap_theme_helper',
     'oe_whitelabel_helper',
diff --git a/tests/src/Kernel/AbstractKernelTestBase.php b/tests/src/Kernel/AbstractKernelTestBase.php
index 25b39ba8..c994765e 100644
--- a/tests/src/Kernel/AbstractKernelTestBase.php
+++ b/tests/src/Kernel/AbstractKernelTestBase.php
@@ -5,19 +5,17 @@ declare(strict_types = 1);
 namespace Drupal\Tests\oe_whitelabel\Kernel;
 
 use Drupal\Tests\oe_bootstrap_theme\Kernel\AbstractKernelTestBase as BootstrapKernelTestBase;
-use Drupal\Tests\oe_bootstrap_theme\Kernel\Traits\RenderTrait;
 
 /**
  * Base class for theme's kernel tests.
  */
 abstract class AbstractKernelTestBase extends BootstrapKernelTestBase {
 
-  use RenderTrait;
-
   /**
    * {@inheritdoc}
    */
   protected static $modules = [
+    'daterange_compact',
     'oe_whitelabel_helper',
   ];
 
diff --git a/tests/src/Kernel/ContentLanguageSwitcherTest.php b/tests/src/Kernel/ContentLanguageSwitcherTest.php
index 49c72b79..797bdaac 100644
--- a/tests/src/Kernel/ContentLanguageSwitcherTest.php
+++ b/tests/src/Kernel/ContentLanguageSwitcherTest.php
@@ -17,9 +17,10 @@ class ContentLanguageSwitcherTest extends KernelTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = [
+  protected static $modules = [
     'block',
     'content_translation',
+    'daterange_compact',
     'language',
     'locale',
     'node',
-- 
GitLab


From b335ad457f406a2187f917d0108fa4bd546f02d5 Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Sat, 25 Jun 2022 00:06:41 +0200
Subject: [PATCH 15/18] OEL-1653: Remove project changes as out of scope.

---
 .../install/core.date_format.oe_whitelabel_project_date.yml     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/oe_whitelabel_extra_project/config/install/core.date_format.oe_whitelabel_project_date.yml b/modules/oe_whitelabel_extra_project/config/install/core.date_format.oe_whitelabel_project_date.yml
index cd2d1aee..42fc99ee 100644
--- a/modules/oe_whitelabel_extra_project/config/install/core.date_format.oe_whitelabel_project_date.yml
+++ b/modules/oe_whitelabel_extra_project/config/install/core.date_format.oe_whitelabel_project_date.yml
@@ -4,4 +4,4 @@ dependencies: {  }
 id: oe_whitelabel_project_date
 label: 'OE Whitelabel Project date'
 locked: false
-pattern: 'd M Y'
+pattern: 'd F Y'
-- 
GitLab


From 56edcbfe366f9e3aaca6c138e0c8cc112e529edd Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Sat, 25 Jun 2022 01:24:50 +0200
Subject: [PATCH 16/18] OEL-1653: Prevent regressions on project rendered
 dates.

---
 .../ContentProjectRenderTest.php               | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/tests/src/FunctionalJavascript/ContentProjectRenderTest.php b/tests/src/FunctionalJavascript/ContentProjectRenderTest.php
index 7e429f8d..402bc469 100644
--- a/tests/src/FunctionalJavascript/ContentProjectRenderTest.php
+++ b/tests/src/FunctionalJavascript/ContentProjectRenderTest.php
@@ -174,6 +174,7 @@ class ContentProjectRenderTest extends WebDriverTestBase {
     // Select the content column next to the in-page navigation.
     $project_content = $assert_session->elementExists('css', '.col-md-9');
 
+    $this->assertProjectDates('10 May 2020', '15 May 2025');
     $this->assertProjectStatusTimestampsAsDateStrings('2020-05-10 00:00:00', '2025-05-16 00:00:00');
     $this->assertProjectStatusVisible();
 
@@ -253,6 +254,7 @@ class ContentProjectRenderTest extends WebDriverTestBase {
     $node->save();
     $this->drupalGet($node->toUrl());
 
+    $this->assertProjectDates('07 March 2019', '21 March 2019');
     $this->assertProjectStatusTimestampsAsDateStrings('2019-03-07 00:00:00', '2019-03-22 00:00:00');
     $this->assertProjectStatusVisible();
     $this->assertProjectStatus('bg-dark', 'Closed');
@@ -415,4 +417,20 @@ class ContentProjectRenderTest extends WebDriverTestBase {
     }
   }
 
+  /**
+   * Assert the rendered dates in the project status area.
+   *
+   * @param string $expected_start_date
+   *   The expected start date string.
+   * @param string $expected_end_date
+   *   The expected end date string.
+   */
+  protected function assertProjectDates(string $expected_start_date, string $expected_end_date): void {
+    $wrapper = $this->assertSession()->elementExists('css', '.bcl-project-status');
+    $start_element = $this->assertSession()->elementExists('xpath', '//p[contains(text(), "Start")]//time', $wrapper);
+    $this->assertEquals($expected_start_date, trim($start_element->getText()));
+    $end_element = $this->assertSession()->elementExists('xpath', '//p[contains(text(), "End")]//time', $wrapper);
+    $this->assertEquals($expected_end_date, trim($end_element->getText()));
+  }
+
 }
-- 
GitLab


From 3ff004211e1728c7e0b6cdfc6af66661b5c29216 Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Mon, 27 Jun 2022 22:10:45 +0200
Subject: [PATCH 17/18] OEL-1653: Remove unused code.

---
 .../oe_whitelabel_starter_event.schema.yml    |  10 --
 .../EventDateRangeFormatter.php               | 143 ------------------
 2 files changed, 153 deletions(-)
 delete mode 100644 modules/oe_whitelabel_starter_event/config/schema/oe_whitelabel_starter_event.schema.yml
 delete mode 100644 modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php

diff --git a/modules/oe_whitelabel_starter_event/config/schema/oe_whitelabel_starter_event.schema.yml b/modules/oe_whitelabel_starter_event/config/schema/oe_whitelabel_starter_event.schema.yml
deleted file mode 100644
index 181bf70e..00000000
--- a/modules/oe_whitelabel_starter_event/config/schema/oe_whitelabel_starter_event.schema.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-field.formatter.settings.event_date_range_format:
-  type: mapping
-  label: 'Date Time range format'
-  mapping:
-    time_format:
-      type: string
-      label: 'Time format'
-    datetime_format:
-      type: string
-      label: 'DateTime format'
diff --git a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php b/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
deleted file mode 100644
index cf5d8126..00000000
--- a/modules/oe_whitelabel_starter_event/src/Plugin/Field/FieldFormatter/EventDateRangeFormatter.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-declare(strict_types = 1);
-
-namespace Drupal\oe_whitelabel_starter_event\Plugin\Field\FieldFormatter;
-
-use Drupal\Core\Datetime\DrupalDateTime;
-use Drupal\Core\Field\FieldItemListInterface;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeFormatterBase;
-use Drupal\datetime_range\DateTimeRangeTrait;
-
-/**
- * Plugin implementation of the 'Event dates' formatter for 'daterange' fields.
- *
- * This formatter renders the data range as plain text, with a fully
- * configurable date format using the PHP date syntax and separator.
- *
- * @FieldFormatter(
- *   id = "event_date_range_format",
- *   label = @Translation("Event date range format"),
- *   field_types = {
- *     "daterange"
- *   }
- * )
- */
-class EventDateRangeFormatter extends DateTimeFormatterBase {
-
-  use DateTimeRangeTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function defaultSettings() {
-    return [
-      'time_format' => 'H.i',
-      'datetime_format' => 'l d F Y, H.i',
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, FormStateInterface $form_state) {
-    $form['time_format'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Time format'),
-      '#description' => $this->t('See <a href="https://www.php.net/manual/datetime.format.php#refsect1-datetime.format-parameters" target="_blank">the documentation for PHP date formats</a>.'),
-      '#default_value' => $this->getSetting('time_format'),
-    ];
-
-    $form['datetime_format'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Date/time format'),
-      '#description' => $this->t('See <a href="https://www.php.net/manual/datetime.format.php#refsect1-datetime.format-parameters" target="_blank">the documentation for PHP date formats</a>.'),
-      '#default_value' => $this->getSetting('datetime_format'),
-    ];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsSummary() {
-    $date = new DrupalDateTime();
-    $this->setTimeZone($date);
-    $summary[] = 'Time format: ' . $date->format($this->getSetting('time_format'), $this->getFormatSettings());
-    $summary[] = 'Datetime format: ' . $date->format($this->getSetting('datetime_format'), $this->getFormatSettings());
-
-    return $summary;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function viewElements(FieldItemListInterface $items, $langcode) {
-    $elements = [];
-
-    foreach ($items as $delta => $item) {
-      if (empty($item->start_date) || empty($item->end_date)) {
-        continue;
-      }
-
-      /** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */
-      $start_date = $item->start_date;
-      /** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */
-      $end_date = $item->end_date;
-
-      $this->setTimeZone($start_date);
-      $this->setTimeZone($end_date);
-
-      if ($start_date->format('Y-m-d') === $end_date->format('Y-m-d')) {
-        // The event is on a single day with time.
-        $elements[$delta] = [
-          'start_date' => $this->buildCustomDate($start_date, $this->getSetting('datetime_format')),
-          'separator' => ['#plain_text' => '-'],
-          'end_date' => $this->buildCustomDate($end_date, $this->getSetting('time_format') . ' (T)'),
-        ];
-        // The event is on a single day with no time.
-        if (empty($this->getSetting('time_format'))) {
-          $elements[$delta] = $this->buildCustomDate($start_date, $this->getSetting('datetime_format'));
-        }
-      }
-      else {
-        // Start day and end day are different in the displayed time zone.
-        $elements[$delta] = [
-          'start_date' => $this->buildCustomDate($start_date, $this->getSetting('datetime_format')),
-          'separator' => ['#plain_text' => ' - '],
-          'end_date' => !empty($this->getSetting('time_format'))
-          ? $this->buildCustomDate($end_date, $this->getSetting('datetime_format') . ' (T)')
-          : $this->buildCustomDate($end_date, $this->getSetting('datetime_format')),
-        ];
-      }
-    }
-
-    return $elements;
-  }
-
-  /**
-   * Prepare render for a date with custom format.
-   */
-  protected function buildCustomDate(DrupalDateTime $date, $format) {
-    $build = [
-      '#markup' => $this->dateFormatter->format($date->getTimestamp(), 'custom', $format),
-      '#cache' => [
-        'contexts' => [
-          'timezone',
-        ],
-      ],
-    ];
-
-    return $build;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function formatDate($date) {
-    return $this->dateFormatter->format($date->getTimestamp(), 'custom', 'Y-m-d');
-  }
-
-}
-- 
GitLab


From c721c32710ee917d5fd4cc865b4153027e075af2 Mon Sep 17 00:00:00 2001
From: Francesco Sardara <francesco@tdgwebservices.com>
Date: Mon, 27 Jun 2022 22:11:19 +0200
Subject: [PATCH 18/18] OEL-1653: Days shouldn't have leading zeroes.

---
 ...ct.format.oe_whitelabel_date_only_short_month.yml |  4 ++--
 ...e_compact.format.oe_whitelabel_date_time_long.yml |  4 ++--
 ...ct.format.oe_whitelabel_date_only_short_month.yml |  4 ++--
 ...e_compact.format.oe_whitelabel_date_time_long.yml |  6 +++---
 tests/src/Functional/ContentEventRenderTest.php      | 12 ++++++------
 5 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_only_short_month.yml b/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
index 73b6820a..a3d7eb07 100644
--- a/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
+++ b/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
@@ -3,9 +3,9 @@ status: true
 dependencies: {  }
 id: oe_whitelabel_date_only_short_month
 label: 'Date only, short month'
-default_pattern: 'd M Y'
+default_pattern: 'j M Y'
 default_separator: ' - '
-same_day_start_pattern: 'd M Y'
+same_day_start_pattern: 'j M Y'
 same_day_end_pattern: ''
 same_day_separator: ''
 same_month_start_pattern: ''
diff --git a/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_time_long.yml b/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_time_long.yml
index 9756862e..4a1bc05f 100644
--- a/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_time_long.yml
+++ b/modules/oe_whitelabel_helper/config/install/daterange_compact.format.oe_whitelabel_date_time_long.yml
@@ -3,9 +3,9 @@ status: true
 dependencies: {  }
 id: oe_whitelabel_date_time_long
 label: 'Date and time, long names'
-default_pattern: 'l d F Y, H.i (T)'
+default_pattern: 'l j F Y, H.i (T)'
 default_separator: ' - '
-same_day_start_pattern: 'l d F Y, H.i'
+same_day_start_pattern: 'l j F Y, H.i'
 same_day_end_pattern: 'H.i (T)'
 same_day_separator: '-'
 same_month_start_pattern: ''
diff --git a/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_only_short_month.yml b/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
index 73b6820a..a3d7eb07 100644
--- a/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
+++ b/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_only_short_month.yml
@@ -3,9 +3,9 @@ status: true
 dependencies: {  }
 id: oe_whitelabel_date_only_short_month
 label: 'Date only, short month'
-default_pattern: 'd M Y'
+default_pattern: 'j M Y'
 default_separator: ' - '
-same_day_start_pattern: 'd M Y'
+same_day_start_pattern: 'j M Y'
 same_day_end_pattern: ''
 same_day_separator: ''
 same_month_start_pattern: ''
diff --git a/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_time_long.yml b/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_time_long.yml
index 269b59ce..4a1bc05f 100644
--- a/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_time_long.yml
+++ b/modules/oe_whitelabel_helper/config/post_updates/00002_date_range_formats/daterange_compact.format.oe_whitelabel_date_time_long.yml
@@ -3,11 +3,11 @@ status: true
 dependencies: {  }
 id: oe_whitelabel_date_time_long
 label: 'Date and time, long names'
-default_pattern: 'l d F Y, H.i (T)'
+default_pattern: 'l j F Y, H.i (T)'
 default_separator: ' - '
-same_day_start_pattern: 'l d F Y, H.i'
+same_day_start_pattern: 'l j F Y, H.i'
 same_day_end_pattern: 'H.i (T)'
-same_day_separator: ' - '
+same_day_separator: '-'
 same_month_start_pattern: ''
 same_month_end_pattern: ''
 same_month_separator: ''
diff --git a/tests/src/Functional/ContentEventRenderTest.php b/tests/src/Functional/ContentEventRenderTest.php
index 7f063b89..68c3cf55 100644
--- a/tests/src/Functional/ContentEventRenderTest.php
+++ b/tests/src/Functional/ContentEventRenderTest.php
@@ -83,11 +83,11 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
     $date = $crawler->filter('dl > dd');
 
     // Assert event dates starting and ending same day.
-    $this->assertEquals('Wednesday 09 February 2022, 21.00-23.00 (CET)', trim($date->text()));
+    $this->assertEquals('Wednesday 9 February 2022, 21.00-23.00 (CET)', trim($date->text()));
 
     // Assert event dates starting and ending at different days.
     $node->set('oe_sc_event_dates', [
-      'value' => '2022-02-15T08:00:00',
+      'value' => '2022-02-07T08:00:00',
       'end_value' => '2022-02-22T18:00:00',
     ]);
     $node->save();
@@ -96,7 +96,7 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
     $crawler = $client->getCrawler();
 
     $date = $crawler->filter('dl > dd');
-    $this->assertEquals('Tuesday 15 February 2022, 09.00 (CET) - Tuesday 22 February 2022, 19.00 (CET)', trim($date->text()));
+    $this->assertEquals('Monday 7 February 2022, 09.00 (CET) - Tuesday 22 February 2022, 19.00 (CET)', trim($date->text()));
 
     // Assert in-page navigation title.
     $this->assertEquals(
@@ -159,11 +159,11 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
     );
 
     $time = $crawler->filter('div > span.text-muted');
-    $this->assertEquals('09 Feb 2022', trim($time->text()));
+    $this->assertEquals('9 Feb 2022', trim($time->text()));
 
     // Assert event dates starting and ending at different days.
     $node->set('oe_sc_event_dates', [
-      'value' => '2022-02-15T08:00:00',
+      'value' => '2022-02-07T08:00:00',
       'end_value' => '2022-02-22T18:00:00',
     ]);
     $node->save();
@@ -175,7 +175,7 @@ class ContentEventRenderTest extends WhitelabelBrowserTestBase {
     $this->drupalGet($node->toUrl());
 
     $time = $crawler->filter('div > span.text-muted');
-    $this->assertEquals('15 Feb 2022 - 22 Feb 2022', trim($time->text()));
+    $this->assertEquals('7 Feb 2022 - 22 Feb 2022', trim($time->text()));
   }
 
   /**
-- 
GitLab