[BUGFIX] Fix timestamp handling in QueryGenerator 77/55877/2
authorReiner Teubner <rteubner@me.com>
Fri, 2 Feb 2018 13:55:36 +0000 (14:55 +0100)
committerAndreas Fernandez <a.fernandez@scripting-base.de>
Fri, 23 Feb 2018 14:48:21 +0000 (15:48 +0100)
Since https://review.typo3.org/c/51242/ all hidden
FormEngine fields work with ISO dates but the
QueryGenerator can only handle unix timestamp.
This patch fix the query building process for
timestamp record fields.

Resolves: #83675
Releases: master, 8.7
Change-Id: I79227762c4159984612d86dea640bdfd8b3a2784
Reviewed-on: https://review.typo3.org/55877
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
typo3/sysext/core/Classes/Database/QueryGenerator.php

index 917e7c9..0651bd3 100644 (file)
@@ -1267,6 +1267,13 @@ class QueryGenerator
         ksort($queryConfig);
         $first = 1;
         foreach ($queryConfig as $key => $conf) {
+            // Convert ISO-8601 timestamp (string) into unix timestamp (int)
+            if (strtotime($conf['inputValue'])) {
+                $conf['inputValue'] = strtotime($conf['inputValue']);
+                if ($conf['inputValue1'] && strtotime($conf['inputValue1'])) {
+                    $conf['inputValue1'] = strtotime($conf['inputValue1']);
+                }
+            }
             switch ($conf['type']) {
                 case 'newlevel':
                     $qs .= LF . $pad . trim($conf['operator']) . ' (' . $this->getQuery($queryConfig[$key]['nl'], ($pad . '   ')) . LF . $pad . ')';
@@ -1352,6 +1359,8 @@ class QueryGenerator
             } else {
                 $inputVal = 0;
             }
+        } elseif (strtotime($conf['inputValue' . $suffix])) {
+            $inputVal = $conf['inputValue' . $suffix];
         } else {
             $inputVal = (float)$conf['inputValue' . $suffix];
         }
@@ -1659,20 +1668,19 @@ class QueryGenerator
 
     /**
      * @param string $name the field name
-     * @param int $timestamp the unix timestamp
+     * @param string $timestamp ISO-8601 timestamp
      * @param string $type [datetime, date, time, timesec, year]
      *
      * @return string
      */
     protected function getDateTimePickerField($name, $timestamp, $type)
     {
-        $dateFormat = $GLOBALS['TYPO3_CONF_VARS']['SYS']['USdateFormat'] ? '%H:%M %m-%d-%Y' : '%H:%M %d-%m-%Y';
-        $value = ($timestamp > 0 ? strftime($dateFormat, $timestamp) : '');
+        $value = strtotime($timestamp) ? date($GLOBALS['TYPO3_CONF_VARS']['SYS']['hhmm'] . ' ' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'], strtotime($timestamp)) : '';
         $id = StringUtility::getUniqueId('dt_');
         $html = [];
         $html[] = '<div class="input-group" id="' . $id . '-wrapper">';
         $html[] = '            <input data-formengine-input-name="' . htmlspecialchars($name) . '" value="' . $value . '" class="form-control t3js-datetimepicker t3js-clearable" data-date-type="' . htmlspecialchars($type) . '" type="text" id="' . $id . '">';
-        $html[] = '            <input name="' . htmlspecialchars($name) . '" value="' . (int)$timestamp . '" type="hidden">';
+        $html[] = '            <input name="' . htmlspecialchars($name) . '" value="' . htmlspecialchars($timestamp) . '" type="hidden">';
         $html[] = '            <span class="input-group-btn">';
         $html[] = '                    <label class="btn btn-default" for="' . $id . '">';
         $html[] = '                            <span class="fa fa-calendar"></span>';