Browse Source

Fix empty date/times being marshalled incorrectly.

Empty values should be marshalled into null. Not doing this makes saving
empty date inputs impossible.

Refs #5723
Mark Story 11 years ago
parent
commit
4c9d704c4a

+ 3 - 0
src/Database/Type/DateTimeType.php

@@ -135,6 +135,9 @@ class DateTimeType extends \Cake\Database\Type
             return $value;
         }
 
+        if (is_array($value) && implode('', $value) === '') {
+            return null;
+        }
         $value += ['hour' => 0, 'minute' => 0, 'second' => 0];
 
         $format = '';

+ 4 - 0
tests/TestCase/Database/Type/DateTimeTypeTest.php

@@ -116,6 +116,10 @@ class DateTimeTypeTest extends TestCase
 
             // valid array types
             [
+                ['year' => '', 'month' => '', 'day' => '', 'hour' => '', 'minute' => '', 'second' => ''],
+                null
+            ],
+            [
                 ['year' => 2014, 'month' => 2, 'day' => 14, 'hour' => 13, 'minute' => 14, 'second' => 15],
                 new Time('2014-02-14 13:14:15')
             ],

+ 4 - 0
tests/TestCase/Database/Type/DateTypeTest.php

@@ -112,6 +112,10 @@ class DateTypeTest extends TestCase
 
             // valid array types
             [
+                ['year' => '', 'month' => '', 'day' => ''],
+                null,
+            ],
+            [
                 ['year' => 2014, 'month' => 2, 'day' => 14, 'hour' => 13, 'minute' => 14, 'second' => 15],
                 new Time('2014-02-14 00:00:00')
             ],

+ 8 - 0
tests/TestCase/Database/Type/TimeTypeTest.php

@@ -111,6 +111,14 @@ class TimeTypeTest extends TestCase
 
             // valid array types
             [
+                ['hour' => '', 'minute' => '', 'second' => ''],
+                null,
+            ],
+            [
+                ['hour' => '', 'minute' => '', 'meridian' => ''],
+                null,
+            ],
+            [
                 ['year' => 2014, 'month' => 2, 'day' => 14, 'hour' => 13, 'minute' => 14, 'second' => 15],
                 new Time('2014-02-14 13:14:15')
             ],