dev/core#2524 - Fix missing serialization defaults
authoradriano66 <3438696+adriano66@users.noreply.github.com>
Thu, 16 Dec 2021 22:03:16 +0000 (23:03 +0100)
committeradriano66 <3438696+adriano66@users.noreply.github.com>
Sun, 13 Mar 2022 18:47:32 +0000 (19:47 +0100)
This fixes the "'0' is not a valid option for field serialize" exception
in APIv3 as 0 is a valid, default value set in the DB
This allows passing whole custom field data as a parameter
to the custom field update method without getting an exception

Co-authored-by: colemanw <coleman@civicrm.org>
CRM/Core/DAO.php
CRM/Core/SelectValues.php
tests/phpunit/CRM/Core/DAOTest.php
tests/phpunit/api/v3/CustomFieldTest.php

index 6cb84d25e28ea5b7689305443c9c9de590da7a05..290676183aa1f2ea7cba4312923b58ec0cc80409 100644 (file)
@@ -81,6 +81,10 @@ class CRM_Core_DAO extends DB_DataObject {
     QUERY_FORMAT_WILDCARD = 1,
     QUERY_FORMAT_NO_QUOTES = 2,
 
+    /**
+     * No serialization.
+     */
+    SERIALIZE_NONE = 0,
     /**
      * Serialized string separated by and bookended with VALUE_SEPARATOR
      */
index 31254a4dc73f2f9a713676b48119891a680bb8b4..c591954617d462cddebc520b9a645f489e7f727b 100644 (file)
@@ -1136,6 +1136,7 @@ class CRM_Core_SelectValues {
    */
   public static function fieldSerialization() {
     return [
+      CRM_Core_DAO::SERIALIZE_NONE => 'none',
       CRM_Core_DAO::SERIALIZE_SEPARATOR_BOOKEND => 'separator_bookend',
       CRM_Core_DAO::SERIALIZE_SEPARATOR_TRIMMED => 'separator_trimmed',
       CRM_Core_DAO::SERIALIZE_JSON => 'json',
index f5b871cc7fc3358744b94f1c59e44e4cb13d3f1a..5786a146de383e808dda10cd9ed71ca4ac024d40 100644 (file)
@@ -407,6 +407,9 @@ class CRM_Core_DAOTest extends CiviUnitTestCase {
     ];
     $daoInfo = new ReflectionClass('CRM_Core_DAO');
     foreach ($daoInfo->getConstants() as $constant => $val) {
+      if ($constant === 'SERIALIZE_NONE') {
+        continue;
+      }
       if ($constant === 'SERIALIZE_JSON' || $constant === 'SERIALIZE_PHP') {
         $constants[] = [$val, array_merge($simpleData, $complexData)];
       }
index 88e4ef20c7ff5255a23a916a8017ecf501fa38be..7ea591384a16cbd0cc36603667ca521946400032 100644 (file)
@@ -73,10 +73,10 @@ class api_v3_CustomFieldTest extends CiviUnitTestCase {
     ];
 
     $customField = $this->callAPIAndDocument('custom_field', 'create', $params, __FUNCTION__, __FILE__);
-    $params['id'] = $customField['id'];
-    $customField = $this->callAPISuccess('custom_field', 'create', $params);
+    $customField['label'] = 'Name2';
+    $customFieldEdited = $this->callAPISuccess('custom_field', 'create', $customField);
 
-    $this->assertNotNull($customField['id']);
+    $this->assertNotNull($customFieldEdited['id']);
   }
 
   /**