APIv4 - Ensure 'search_fields' defaults to 'label_field' for Entity.get
authorcolemanw <coleman@civicrm.org>
Thu, 2 Nov 2023 00:59:35 +0000 (20:59 -0400)
committercolemanw <coleman@civicrm.org>
Thu, 2 Nov 2023 00:59:35 +0000 (20:59 -0400)
This default is set in the AbstractEntity class, but not every entity inherits from that class,
e.g. ECK does not.
So it needs to be filled in by the Entity.get action

Civi/Api4/Provider/ActionObjectProvider.php

index 91c30f9784adb64524d42877cd1d23a56aa98880..bee1c4a2725fc0b830d74e4371c115683fe3c8bd 100644 (file)
@@ -161,6 +161,7 @@ class ActionObjectProvider extends AutoService implements EventSubscriberInterfa
       // Allow extensions to modify the list of entities
       $event = GenericHookEvent::create(['entities' => &$entities]);
       \Civi::dispatcher()->dispatch('civi.api4.entityTypes', $event);
+      $this->fillEntityDefaults($entities);
       ksort($entities);
       $cache->set('api4.entities.info', $entities);
     }
@@ -168,6 +169,14 @@ class ActionObjectProvider extends AutoService implements EventSubscriberInterfa
     return $entities;
   }
 
+  public function fillEntityDefaults(array &$entities) {
+    foreach ($entities as &$entity) {
+      if (!isset($entity['search_fields'])) {
+        $entity['search_fields'] = (array) ($entity['label_field'] ?? NULL);
+      }
+    }
+  }
+
   /**
    * Scan all api directories to discover entities
    * @return \Civi\Api4\Generic\AbstractEntity[]