getEntitySpecificJoins sometimes returns NULL, triggering deprecation warning for...
authorRich Lott / Artful Robot <code.commits@artfulrobot.uk>
Fri, 21 Jul 2023 12:18:26 +0000 (13:18 +0100)
committerRich Lott / Artful Robot <code.commits@artfulrobot.uk>
Fri, 21 Jul 2023 12:18:26 +0000 (13:18 +0100)
Discovered this in the wild where an api3 Contact.getcount call for a particular smartgroup
was causing this. The smartgroup otherwise works fine.

Looking at the code, it's clear that getEntitySpecificJoins is supposed to return a string,
but in the case of civicrm_activity_contact it was returning from another function which may
return NULL. I have coalesced NULL to empty string.

CRM/Contact/BAO/Query.php

index 0b0fa9138c3db36a6841f16079b3d201063d9814..709b35a19ba30a26577a09d81e967a2aa6cddc02 100644 (file)
@@ -2665,7 +2665,7 @@ class CRM_Contact_BAO_Query {
    * @param string $primaryLocation
    * @return string
    */
-  protected static function getEntitySpecificJoins($name, $mode, $side, $primaryLocation) {
+  protected static function getEntitySpecificJoins($name, $mode, $side, $primaryLocation): string {
     $limitToPrimaryClause = $primaryLocation ? "AND {$name}.is_primary = 1" : '';
     switch ($name) {
       case 'civicrm_address':
@@ -2727,7 +2727,7 @@ class CRM_Contact_BAO_Query {
       case 'civicrm_activity_contact':
       case 'source_contact':
       case 'activity_priority':
-        return CRM_Activity_BAO_Query::from($name, $mode, $side);
+        return CRM_Activity_BAO_Query::from($name, $mode, $side) ?? '';
 
       case 'civicrm_entity_tag':
         $from = " $side JOIN civicrm_entity_tag ON ( civicrm_entity_tag.entity_table = 'civicrm_contact'";