CRM-21707 increase testing / use of serialization metadata. Add deprecated when bypassed
authoreileen <emcnaughton@wikimedia.org>
Mon, 29 Jan 2018 22:11:53 +0000 (11:11 +1300)
committereileen <emcnaughton@wikimedia.org>
Thu, 1 Feb 2018 20:45:49 +0000 (09:45 +1300)
CRM/Core/DAO.php
CRM/Member/BAO/MembershipBlock.php
CRM/Report/BAO/ReportInstance.php
tests/phpunit/api/v3/SyntaxConformanceTest.php

index 5ab5d76d529e954950e7807b378dbe0884ee123b..f821036b16ede366710ea4cb12a4222fffc9e101 100644 (file)
@@ -647,6 +647,9 @@ class CRM_Core_DAO extends DB_DataObject {
           $allNull = FALSE;
         }
         else {
+          if (!$serializeArrays && is_array($pValue) && !empty($value['serialize'])) {
+            Civi::log()->warning(ts('use copyParams to serialize arrays (' . __CLASS__ . '.' . $name . ')'), ['civi.tag' => 'deprecated']);
+          }
           $this->$dbName = $pValue;
           $allNull = FALSE;
         }
index 921735ba037969e3bddc83b3d80ef291cebb0901..eb32779f7b564d62f703d6308982106c7e7f4328 100644 (file)
@@ -53,7 +53,7 @@ class CRM_Member_BAO_MembershipBlock extends CRM_Member_DAO_MembershipBlock {
     $hook = empty($params['id']) ? 'create' : 'edit';
     CRM_Utils_Hook::pre($hook, 'MembershipBlock', CRM_Utils_Array::value('id', $params), $params);
     $dao = new CRM_Member_DAO_MembershipBlock();
-    $dao->copyValues($params);
+    $dao->copyValues($params, TRUE);
     $dao->id = CRM_Utils_Array::value('id', $params);
     $dao->save();
     CRM_Utils_Hook::post($hook, 'MembershipBlock', $dao->id, $dao);
index fd0096a203d3987a98309b84646d934bd4081b1f..33cb7ab1cd6903cc747d1273307f4b20df3c4467 100644 (file)
@@ -78,7 +78,7 @@ class CRM_Report_BAO_ReportInstance extends CRM_Report_DAO_ReportInstance {
     }
 
     $instance = new CRM_Report_DAO_ReportInstance();
-    $instance->copyValues($params);
+    $instance->copyValues($params, TRUE);
 
     if (CRM_Core_Config::singleton()->userFramework == 'Joomla') {
       $instance->permission = 'null';
index efb57a26d56f890b9f6eed7c235aeced307e0c79..7e5e9eb69e3616bff1237429ba7829849c501839 100644 (file)
@@ -1356,6 +1356,9 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase {
         'id' => $entity['id'],
         $field => isset($entity[$field]) ? $entity[$field] : NULL,
       );
+      if (!empty($specs['serialize'])) {
+        $updateParams[$field] = $entity[$field] = (array) $specs['serialize'];
+      }
       if (isset($updateParams['financial_type_id']) && in_array($entityName, array('Grant'))) {
         //api has special handling on these 2 fields for backward compatibility reasons
         $entity['contribution_type_id'] = $updateParams['financial_type_id'];
@@ -1377,6 +1380,10 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase {
       );
 
       $checkEntity = $this->callAPISuccess($entityName, 'getsingle', $checkParams);
+      if (!empty($specs['serialize']) && !is_array($checkEntity[$field])) {
+        // Put into serialized format for comparison if 'get' has not returned serialized.
+        $entity[$field] = CRM_Core_DAO::serializeField($checkEntity[$field], $specs['serialize']);
+      }
 
       $this->assertAPIArrayComparison($entity, $checkEntity, array(), "checking if $fieldName was correctly updated\n" . print_r(array(
             'update-params' => $updateParams,