* @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
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;
}
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
*
*/
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] ?? []));