From 974c71409e004fe6843b3d2db5b85866dca53223 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Thu, 24 Jun 2021 16:24:58 -0400 Subject: [PATCH] APIv4 - Refactor getInfo calls to use new utility function --- Civi/Api4/Query/Api4SelectQuery.php | 7 ++----- Civi/Api4/Utils/CoreUtil.php | 13 ++++++++++++- .../Civi/Api4/Action/SearchDisplay/Run.php | 6 +++--- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Civi/Api4/Query/Api4SelectQuery.php b/Civi/Api4/Query/Api4SelectQuery.php index 317b6d4348..052c0c0aa4 100644 --- a/Civi/Api4/Query/Api4SelectQuery.php +++ b/Civi/Api4/Query/Api4SelectQuery.php @@ -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 diff --git a/Civi/Api4/Utils/CoreUtil.php b/Civi/Api4/Utils/CoreUtil.php index 638854f473..7d27b9ea24 100644 --- a/Civi/Api4/Utils/CoreUtil.php +++ b/Civi/Api4/Utils/CoreUtil.php @@ -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 * diff --git a/ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php b/ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php index 3d22fea9cc..e27b6f1101 100644 --- a/ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php +++ b/ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php @@ -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] ?? [])); -- 2.25.1