APIv4 - Refactor getInfo calls to use new utility function
authorColeman Watts <coleman@civicrm.org>
Thu, 24 Jun 2021 20:24:58 +0000 (16:24 -0400)
committerColeman Watts <coleman@civicrm.org>
Fri, 25 Jun 2021 02:01:19 +0000 (22:01 -0400)
Civi/Api4/Query/Api4SelectQuery.php
Civi/Api4/Utils/CoreUtil.php
ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php

index 317b6d434845bc32213d81543f526d4d28a32822..052c0c0aa4c9c92e1745e7bc6884a438d7321486 100644 (file)
@@ -806,16 +806,13 @@ class Api4SelectQuery {
    * @throws \API_Exception
    */
   private function getBridgeRefs(string $bridgeEntity, string $joinEntity): array {
-    /* @var \Civi\Api4\Generic\DAOEntity $bridgeEntityClass */
-    $bridgeEntityClass = CoreUtil::getApiClass($bridgeEntity);
-    $bridgeInfo = $bridgeEntityClass::getInfo();
-    $bridgeFields = $bridgeInfo['bridge'] ?? [];
+    $bridgeFields = CoreUtil::getInfoItem($bridgeEntity, 'bridge') ?? [];
     // Sanity check - bridge entity should declare exactly 2 FK fields
     if (count($bridgeFields) !== 2) {
       throw new \API_Exception("Illegal bridge entity specified: $bridgeEntity. Expected 2 bridge fields, found " . count($bridgeFields));
     }
     /* @var \CRM_Core_DAO $bridgeDAO */
-    $bridgeDAO = $bridgeInfo['dao'];
+    $bridgeDAO = CoreUtil::getInfoItem($bridgeEntity, 'dao');
     $bridgeTable = $bridgeDAO::getTableName();
 
     // Get the 2 bridge reference columns as CRM_Core_Reference_* objects
index 638854f473a8a833208bdeba3899f37a5886d61a..7d27b9ea247f5e6a34317dea9e9ccfb50bf5278a 100644 (file)
@@ -28,7 +28,7 @@ class CoreUtil {
     if ($entityName === 'CustomValue' || strpos($entityName, 'Custom_') === 0) {
       return 'CRM_Core_BAO_CustomValue';
     }
-    $dao = self::getApiClass($entityName)::getInfo()['dao'] ?? NULL;
+    $dao = self::getInfoItem($entityName, 'dao');
     if (!$dao) {
       return NULL;
     }
@@ -52,6 +52,17 @@ class CoreUtil {
     return class_exists($className) ? $className : NULL;
   }
 
+  /**
+   * Get item from an entity's getInfo array
+   *
+   * @param string $entityName
+   * @param string $keyToReturn
+   * @return mixed
+   */
+  public static function getInfoItem(string $entityName, string $keyToReturn) {
+    return self::getApiClass($entityName)::getInfo()[$keyToReturn] ?? NULL;
+  }
+
   /**
    * Get table name of given entity
    *
index 3d22fea9cc279ebd61d0c1709bc39679df2d0111..e27b6f11015e65e244eff9f78ab1649c9bf2566e 100644 (file)
@@ -419,9 +419,9 @@ class Run extends \Civi\Api4\Generic\AbstractAction {
    */
   private function getExtraEntityFields(string $entityName): array {
     if (!isset($this->_extraEntityFields[$entityName])) {
-      $info = CoreUtil::getApiClass($entityName)::getInfo();
-      $this->_extraEntityFields[$entityName] = [$info['id_field']];
-      foreach ($info['paths'] ?? [] as $path) {
+      $id = CoreUtil::getInfoItem($entityName, 'id_field');
+      $this->_extraEntityFields[$entityName] = [$id];
+      foreach (CoreUtil::getInfoItem($entityName, 'paths') ?? [] as $path) {
         $matches = [];
         preg_match_all('#\[(\w+)]#', $path, $matches);
         $this->_extraEntityFields[$entityName] = array_unique(array_merge($this->_extraEntityFields[$entityName], $matches[1] ?? []));