Fix version check for custom field serialize col
authorColeman Watts <coleman@civicrm.org>
Wed, 1 Jul 2020 14:31:29 +0000 (10:31 -0400)
committerColeman Watts <coleman@civicrm.org>
Wed, 1 Jul 2020 14:31:29 +0000 (10:31 -0400)
CRM/Core/BAO/CustomField.php
CRM/Core/BAO/Domain.php
api/v3/CustomField.php
xml/schema/Core/CustomField.xml

index 140f1e0a5303d9390f79742a8b76e0f6003ccc21..7c5084b68c051c45f37a118e36c21314b6373f36 100644 (file)
@@ -396,7 +396,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
         // Temporary hack - in 5.27 a new field is added to civicrm_custom_field. There is a high
         // risk this function is called before the upgrade page can be reached and if
         // so it will potentially result in fatal error.
-        $serializeField = CRM_Core_BAO_Domain::isDBUpdateRequired() ? '' : "$cfTable.serialize,";
+        $serializeField = CRM_Core_BAO_Domain::isDBVersionAtLeast('5.27.alpha1') ? '' : "$cfTable.serialize,";
 
         $query = "SELECT $cfTable.id, $cfTable.label,
                             $cgTable.title,
@@ -498,7 +498,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
           $fields[$dao->id]['is_required'] = $dao->is_required;
           $fields[$dao->id]['table_name'] = $dao->table_name;
           $fields[$dao->id]['column_name'] = $dao->column_name;
-          $fields[$dao->id]['serialize'] = $dao->serialize;
+          $fields[$dao->id]['serialize'] = $serializeField ? $dao->serialize : (int) self::isSerialized($dao);
           $fields[$dao->id]['where'] = $dao->table_name . '.' . $dao->column_name;
           // Probably we should use a different fn to get the extends tables but this is a refactor so not changing that now.
           $fields[$dao->id]['extends_table'] = array_key_exists($dao->extends, CRM_Core_BAO_CustomQuery::$extendsMap) ? CRM_Core_BAO_CustomQuery::$extendsMap[$dao->extends] : '';
@@ -2548,7 +2548,7 @@ WHERE cf.id = %1 AND cg.is_multiple = 1";
     if ($html_type === 'CheckBox' || strpos($html_type, 'Multi') !== FALSE) {
       return TRUE;
     }
-    // Otherwise this is the new standard as of 5.26
+    // Otherwise this is the new standard as of 5.27
     return is_object($field) ? !empty($field->serialize) : !empty($field['serialize']);
   }
 
index acbb2a93fd12e067f0d6f1ce72f7d7928a806215..14e885a6e2eaa2da6d62d9e566182998b764bd7c 100644 (file)
@@ -95,6 +95,16 @@ class CRM_Core_BAO_Domain extends CRM_Core_DAO_Domain {
     return version_compare($dbVersion, $codeVersion) < 0;
   }
 
+  /**
+   * Checks that the current DB schema is at least $min version
+   *
+   * @param string|number $min
+   * @return bool
+   */
+  public static function isDBVersionAtLeast($min) {
+    return version_compare(self::version(), $min, '>=');
+  }
+
   /**
    * Get the location values of a domain.
    *
index d9f54afbc67409498a6b3c21a70c8221321d2ab0..49cb0e45cd2634735e9eb8b82d4c0d4ca16e65e5 100644 (file)
@@ -122,7 +122,7 @@ function civicrm_api3_custom_field_delete($params) {
  * @return array
  */
 function civicrm_api3_custom_field_get($params) {
-  if (!CRM_Core_BAO_Domain::isDBUpdateRequired() && ($params['legacy_html_type'] ?? TRUE) && !empty($params['return'])) {
+  if (!CRM_Core_BAO_Domain::isDBVersionAtLeast('5.27.alpha1') && ($params['legacy_html_type'] ?? TRUE) && !empty($params['return'])) {
     if (is_array($params['return'])) {
       $params['return'][] = 'serialize';
     }
index 0fc76b8dc1f38994fc23cc1948ebabfbb84346bd..2bfd28999a9ec384683b2e4543d6753740f0bf7c 100644 (file)
     <pseudoconstant>
       <callback>CRM_Core_SelectValues::fieldSerialization</callback>
     </pseudoconstant>
-    <add>5.26</add>
+    <add>5.27</add>
   </field>
   <field>
     <name>filter</name>