Fix backward-compatability for new method in CRM_Contact_BAO_Query_Hook
authorColeman Watts <coleman@civicrm.org>
Sun, 13 Mar 2022 06:26:10 +0000 (01:26 -0500)
committerColeman Watts <coleman@civicrm.org>
Sun, 13 Mar 2022 15:16:48 +0000 (11:16 -0400)
The method getDefaultReturnProperties was just added to CRM_Contact_BAO_Query_Hook,
but some extensions do not yet implement it, and also do not extend that class so
cannot inherit the default method.

This adds a guard around calling the new method to avoid crashes.

CRM/Contact/BAO/Query/Hook.php

index ae6ee974a3730c9309caef4b4537030aad3da14e..01e68fb666e1faf5707e4d5337379351e362d15d 100644 (file)
@@ -150,14 +150,22 @@ class CRM_Contact_BAO_Query_Hook {
   }
 
   /**
+   * This gives the opportunity for a single hook to return default fields.
+   *
+   * It only runs if no core components have defaults for this $mode.
+   * The expectation is that only one hook will handle this mode, so just
+   * the first one to return a value is used.
+   *
    * @param $mode
    * @return array|null
    */
   public function getDefaultReturnProperties($mode) {
-    foreach (self::getSearchQueryObjects() as $obj) {
-      $properties = $obj::defaultReturnProperties($mode);
-      if ($properties) {
-        return $properties;
+    foreach ($this->getSearchQueryObjects() as $obj) {
+      if (method_exists($obj, 'defaultReturnProperties')) {
+        $properties = $obj::defaultReturnProperties($mode);
+        if ($properties) {
+          return $properties;
+        }
       }
     }
     return NULL;