namespace Civi\API;
use Civi\API\Exception\UnauthorizedException;
+use CRM_Core_Exception;
/**
* Query builder for civicrm_api_basic_get.
/**
* @var array
*/
- protected $entityFieldNames;
+ protected $entityFieldNames = [];
/**
* @var array
*/
/**
* @param string $entity
* @param bool $checkPermissions
+ *
+ * @throws \CRM_Core_Exception
*/
public function __construct($entity, $checkPermissions) {
$this->entity = $entity;
require_once 'api/v3/utils.php';
$baoName = _civicrm_api3_get_BAO($entity);
+ if (!$baoName) {
+ throw new CRM_Core_Exception('Invalid entity: ' . \CRM_Utils_Type::validate($entity, 'Alphanumeric'));
+ }
$bao = new $baoName();
$this->entityFieldNames = array_column($baoName::fields(), 'name');
if (!isset($fkField['FKApiSpec'])) {
$fkField['FKApiSpec'] = \_civicrm_api_get_fields($fkField['FKApiName']);
}
- $fieldInfo = \CRM_Utils_Array::value($fieldName, $fkField['FKApiSpec']);
+ $fieldInfo = $fkField['FKApiSpec'][$fieldName] ?? NULL;
$keyColumn = \CRM_Utils_Array::value('FKKeyColumn', $fkField, 'id');
if (!$fieldInfo || !isset($fkField['FKApiSpec'][$keyColumn])) {
$this->join($side, $fkTable, $tableAlias, $joinCondition);
if (strpos($fieldName, 'custom_') === 0) {
- list($tableAlias, $fieldName) = $this->addCustomField($fieldInfo, $side, $tableAlias);
+ [$tableAlias, $fieldName] = $this->addCustomField($fieldInfo, $side, $tableAlias);
}
// Get ready to recurse to the next level
protected function getJoinInfo(&$fkField, $stack) {
if ($fkField['name'] == 'entity_id') {
$entityTableParam = substr(implode('.', $stack), 0, -2) . 'table';
- $entityTable = \CRM_Utils_Array::value($entityTableParam, $this->where);
+ $entityTable = $this->where[$entityTableParam] ?? NULL;
if ($entityTable && is_string($entityTable) && \CRM_Core_DAO_AllCoreTables::getClassForTable($entityTable)) {
$fkField['FKClassName'] = \CRM_Core_DAO_AllCoreTables::getClassForTable($entityTable);
$fkField['FKApiName'] = \CRM_Core_DAO_AllCoreTables::getBriefName($fkField['FKClassName']);
* Get acl clause for an entity
*
* @param string $tableAlias
- * @param string $baoName
+ * @param \CRM_Core_DAO|string $baoName
* @param array $stack
* @return array
*/
- protected function getAclClause($tableAlias, $baoName, $stack = []) {
+ public function getAclClause($tableAlias, $baoName, $stack = []) {
if (!$this->checkPermissions) {
return [];
}
}
}
elseif ($field && strpos($fieldName, 'custom_') === 0) {
- list($table_name, $column_name) = $this->addCustomField($field, 'LEFT');
+ [$table_name, $column_name] = $this->addCustomField($field, 'LEFT');
if ($field['data_type'] != 'ContactReference') {
// 'ordinary' custom field. We will select the value as custom_XX.