From 6a2256a387a54db8d1d4e7899faa7c0d0c7e1237 Mon Sep 17 00:00:00 2001
From: Andreas Fernandez <a.fernandez@scripting-base.de>
Date: Fri, 11 Nov 2022 16:40:18 +0100
Subject: [PATCH] [BUGFIX] Properly check if language was not fetched from UC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The date-time-picker component now checks properly if the backend
user's language could not get fetched from its UC by checking loose for
a falsy value.

Resolves: #99067
Releases: main, 11.5
Change-Id: I3ba104afde2321480099e96beff6ab77ecb126a2
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/76561
Tested-by: core-ci <typo3@b13.com>
Tested-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Roman Büchler <info@buechler.pro>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Roman Büchler <info@buechler.pro>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
---
 Build/Sources/TypeScript/backend/date-time-picker.ts            | 2 +-
 .../backend/Resources/Public/JavaScript/date-time-picker.js     | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Build/Sources/TypeScript/backend/date-time-picker.ts b/Build/Sources/TypeScript/backend/date-time-picker.ts
index e7f3c4b6b020..c2857f1844a7 100644
--- a/Build/Sources/TypeScript/backend/date-time-picker.ts
+++ b/Build/Sources/TypeScript/backend/date-time-picker.ts
@@ -56,7 +56,7 @@ class DateTimePicker {
     }
 
     let userLocale = PersistentStorage.get('lang');
-    if (userLocale === '') {
+    if (!userLocale) {
       userLocale = 'default';
     } else if (userLocale === 'ch') {
       // Fix our made up locale "ch"
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/date-time-picker.js b/typo3/sysext/backend/Resources/Public/JavaScript/date-time-picker.js
index a33679e1d502..66edd637e814 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/date-time-picker.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/date-time-picker.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-import flatpickr from"flatpickr/flatpickr.min.js";import moment from"moment";import PersistentStorage from"@typo3/backend/storage/persistent.js";import ThrottleEvent from"@typo3/core/event/throttle-event.js";class DateTimePicker{constructor(){this.format=(void 0!==opener?.top?.TYPO3?opener.top:top).TYPO3.settings.DateTimePicker.DateFormat}static formatDateForHiddenField(e,t){return"time"!==t&&"timesec"!==t||e.year(1970).month(0).date(1),e.format()}initialize(e){if(!(e instanceof HTMLInputElement)||void 0!==e.dataset.datepickerInitialized)return;let t=PersistentStorage.get("lang");""===t?t="default":"ch"===t&&(t="zh"),e.dataset.datepickerInitialized="1",import("flatpickr/locales.js").then((()=>{this.initializeField(e,t)}))}initializeField(e,t){const a=this.getScrollEvent(),n=this.getDateOptions(e);n.locale=t,n.onOpen=[()=>{a.bindTo(document.querySelector(".t3js-module-body"))}],n.onClose=()=>{a.release()};const r=flatpickr(e,n);e.addEventListener("input",(()=>{const e=r._input.value,t=r.parseDate(e);e===r.formatDate(t,r.config.dateFormat)&&r.setDate(e)})),e.addEventListener("keyup",(e=>{"Escape"===e.key&&r.close()})),e.addEventListener("change",(t=>{t.stopImmediatePropagation();const a=t.target,n=e.parentElement.parentElement.querySelector('input[type="hidden"]');if(""!==a.value){const e=a.dataset.dateType,t=moment.utc(a.value,a._flatpickr.config.dateFormat);t.isValid()?n.value=DateTimePicker.formatDateForHiddenField(t,e):a.value=DateTimePicker.formatDateForHiddenField(moment.utc(n.value),e)}else n.value="";a.dispatchEvent(new Event("formengine.dp.change"))}))}getScrollEvent(){return new ThrottleEvent("scroll",(()=>{const e=document.querySelector(".flatpickr-input.active");if(null===e)return;const t=e.getBoundingClientRect(),a=e._flatpickr.calendarContainer.offsetHeight;let n,r;window.innerHeight-t.bottom<a&&t.top>a?(n=t.y-a-2,r="arrowBottom"):(n=t.y+t.height+2,r="arrowTop"),e._flatpickr.calendarContainer.style.top=n+"px",e._flatpickr.calendarContainer.classList.remove("arrowBottom","arrowTop"),e._flatpickr.calendarContainer.classList.add(r)}),15)}getDateOptions(e){const t=this.format,a=e.dataset.dateType,n=new Date,r={allowInput:!0,dateFormat:"",defaultDate:e.value,defaultHour:n.getHours(),defaultMinute:n.getMinutes(),enableSeconds:!1,enableTime:!1,formatDate:(e,t)=>moment(e).format(t),parseDate:(e,t)=>moment(e,t,!0).toDate(),maxDate:"",minDate:"",minuteIncrement:1,noCalendar:!1,weekNumbers:!0};switch(a){case"datetime":r.dateFormat=t[1],r.enableTime=!0;break;case"date":r.dateFormat=t[0];break;case"time":r.dateFormat="HH:mm",r.enableTime=!0,r.noCalendar=!0;break;case"timesec":r.dateFormat="HH:mm:ss",r.enableSeconds=!0,r.enableTime=!0,r.noCalendar=!0;break;case"year":r.dateFormat="Y"}return"undefined"!==e.dataset.dateMindate&&(r.minDate=e.dataset.dateMindate),"undefined"!==e.dataset.dateMaxdate&&(r.maxDate=e.dataset.dateMaxdate),r}}export default new DateTimePicker;
\ No newline at end of file
+import flatpickr from"flatpickr/flatpickr.min.js";import moment from"moment";import PersistentStorage from"@typo3/backend/storage/persistent.js";import ThrottleEvent from"@typo3/core/event/throttle-event.js";class DateTimePicker{constructor(){this.format=(void 0!==opener?.top?.TYPO3?opener.top:top).TYPO3.settings.DateTimePicker.DateFormat}static formatDateForHiddenField(e,t){return"time"!==t&&"timesec"!==t||e.year(1970).month(0).date(1),e.format()}initialize(e){if(!(e instanceof HTMLInputElement)||void 0!==e.dataset.datepickerInitialized)return;let t=PersistentStorage.get("lang");t?"ch"===t&&(t="zh"):t="default",e.dataset.datepickerInitialized="1",import("flatpickr/locales.js").then((()=>{this.initializeField(e,t)}))}initializeField(e,t){const a=this.getScrollEvent(),n=this.getDateOptions(e);n.locale=t,n.onOpen=[()=>{a.bindTo(document.querySelector(".t3js-module-body"))}],n.onClose=()=>{a.release()};const r=flatpickr(e,n);e.addEventListener("input",(()=>{const e=r._input.value,t=r.parseDate(e);e===r.formatDate(t,r.config.dateFormat)&&r.setDate(e)})),e.addEventListener("keyup",(e=>{"Escape"===e.key&&r.close()})),e.addEventListener("change",(t=>{t.stopImmediatePropagation();const a=t.target,n=e.parentElement.parentElement.querySelector('input[type="hidden"]');if(""!==a.value){const e=a.dataset.dateType,t=moment.utc(a.value,a._flatpickr.config.dateFormat);t.isValid()?n.value=DateTimePicker.formatDateForHiddenField(t,e):a.value=DateTimePicker.formatDateForHiddenField(moment.utc(n.value),e)}else n.value="";a.dispatchEvent(new Event("formengine.dp.change"))}))}getScrollEvent(){return new ThrottleEvent("scroll",(()=>{const e=document.querySelector(".flatpickr-input.active");if(null===e)return;const t=e.getBoundingClientRect(),a=e._flatpickr.calendarContainer.offsetHeight;let n,r;window.innerHeight-t.bottom<a&&t.top>a?(n=t.y-a-2,r="arrowBottom"):(n=t.y+t.height+2,r="arrowTop"),e._flatpickr.calendarContainer.style.top=n+"px",e._flatpickr.calendarContainer.classList.remove("arrowBottom","arrowTop"),e._flatpickr.calendarContainer.classList.add(r)}),15)}getDateOptions(e){const t=this.format,a=e.dataset.dateType,n=new Date,r={allowInput:!0,dateFormat:"",defaultDate:e.value,defaultHour:n.getHours(),defaultMinute:n.getMinutes(),enableSeconds:!1,enableTime:!1,formatDate:(e,t)=>moment(e).format(t),parseDate:(e,t)=>moment(e,t,!0).toDate(),maxDate:"",minDate:"",minuteIncrement:1,noCalendar:!1,weekNumbers:!0};switch(a){case"datetime":r.dateFormat=t[1],r.enableTime=!0;break;case"date":r.dateFormat=t[0];break;case"time":r.dateFormat="HH:mm",r.enableTime=!0,r.noCalendar=!0;break;case"timesec":r.dateFormat="HH:mm:ss",r.enableSeconds=!0,r.enableTime=!0,r.noCalendar=!0;break;case"year":r.dateFormat="Y"}return"undefined"!==e.dataset.dateMindate&&(r.minDate=e.dataset.dateMindate),"undefined"!==e.dataset.dateMaxdate&&(r.maxDate=e.dataset.dateMaxdate),r}}export default new DateTimePicker;
\ No newline at end of file
-- 
GitLab