+--------------------------------------------------------------------+
*/
+use Civi\Api4\Service\Schema\Joinable\Joinable;
+
/**
*
* @package CRM
public function run() {
$apiDoc = new ReflectionFunction('civicrm_api4');
$groupOptions = civicrm_api4('Group', 'getFields', ['loadOptions' => TRUE, 'select' => ['options', 'name'], 'where' => [['name', 'IN', ['visibility', 'group_type']]]]);
+ // Don't show n-to-many joins in Explorer
+ $entityLinks = (array) civicrm_api4('Entity', 'getLinks', [], ['entity' => 'links']);
+ foreach ($entityLinks as $entity => $links) {
+ $entityLinks[$entity] = array_filter($links, function($link) {
+ return $link['joinType'] != Joinable::JOIN_TYPE_ONE_TO_MANY;
+ });
+ }
$vars = [
'operators' => \CRM_Core_DAO::acceptedSQLOperators(),
'basePath' => Civi::resources()->getUrl('civicrm'),
'schema' => (array) \Civi\Api4\Entity::get()->setChain(['fields' => ['$name', 'getFields']])->execute(),
- 'links' => (array) \Civi\Api4\Entity::getLinks()->execute(),
+ 'links' => $entityLinks,
'docs' => \Civi\Api4\Utils\ReflectionUtils::parseDocBlock($apiDoc->getDocComment()),
'groupOptions' => array_column((array) $groupOptions, 'options', 'name'),
];
}
function addJoins(fieldList, addWildcard) {
- var fields = _.cloneDeep(fieldList),
- fks = _.findWhere(links, {entity: $scope.entity}) || {};
- _.each(fks.links, function(link) {
+ var fields = _.cloneDeep(fieldList);
+ _.each(links[$scope.entity], function(link) {
var linkFields = _.cloneDeep(entityFields(link.entity)),
wildCard = addWildcard ? [{id: link.alias + '.*', text: link.alias + '.*', 'description': 'All core ' + link.entity + ' fields'}] : [];
if (linkFields) {
return comboName;
}
var linkName = fieldNames.shift(),
- entityLinks = _.findWhere(links, {entity: entity}).links,
- newEntity = _.findWhere(entityLinks, {alias: linkName}).entity;
+ newEntity = _.findWhere(links[entity], {alias: linkName}).entity;
return get(newEntity, fieldNames);
}
}