APIv4 - Convert mysql-style CURRENT_TIMESTAMP to api-style 'now'
authorcolemanw <coleman@civicrm.org>
Mon, 2 Oct 2023 20:56:38 +0000 (16:56 -0400)
committercolemanw <coleman@civicrm.org>
Tue, 3 Oct 2023 01:29:26 +0000 (21:29 -0400)
Civi/Api4/Utils/FormattingUtil.php
tests/phpunit/api/v4/Action/GetFieldsTest.php

index e05f3bd7f5bf821a0c9820c23e7e463927c2a7f5..ba93b4a2787599899fb0f92f37b39ea2ebb701ac 100644 (file)
@@ -401,9 +401,16 @@ class FormattingUtil {
         case 'Float':
           return (float) $value;
 
+        case 'Timestamp':
         case 'Date':
+          // Convert mysql-style default to api-style default
+          if (str_contains($value, 'CURRENT_TIMESTAMP')) {
+            return 'now';
+          }
           // Strip time from date-only fields
-          return substr($value, 0, 10);
+          if ($dataType === 'Date' && $value) {
+            return substr($value, 0, 10);
+          }
       }
     }
     return $value;
index 9d148e8a8cc46729679c2dc76264c4939a4b9248..8a3bea82bee4db637da8f1282bfbc4902c149b21 100644 (file)
@@ -162,6 +162,8 @@ class GetFieldsTest extends Api4TestBase implements TransactionalInterface {
     $this->assertTrue($actFields['subject']['nullable']);
     $this->assertFalse($actFields['subject']['deprecated']);
     $this->assertTrue($actFields['phone_id']['deprecated']);
+    $this->assertEquals('now', $actFields['created_date']['default_value']);
+    $this->assertEquals('now', $actFields['activity_date_time']['default_value']);
 
     $getFields = Activity::getFields(FALSE)
       ->setAction('get')