Skip to content

Commit

Permalink
Merge pull request #17205 from colemanw/noMultiJoins
Browse files Browse the repository at this point in the history
APIv4 - Don't advertise implicit multi-joins in Explorer
  • Loading branch information
eileenmcnaughton authored Apr 30, 2020
2 parents 4001268 + 7d91265 commit 55f4389
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
11 changes: 10 additions & 1 deletion CRM/Api4/Page/Api4Explorer.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
+--------------------------------------------------------------------+
*/

use Civi\Api4\Service\Schema\Joinable\Joinable;

/**
*
* @package CRM
Expand All @@ -22,11 +24,18 @@ class CRM_Api4_Page_Api4Explorer extends CRM_Core_Page {
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'),
];
Expand Down
8 changes: 3 additions & 5 deletions ang/api4Explorer/Explorer.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,8 @@
}

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) {
Expand Down Expand Up @@ -1066,8 +1065,7 @@
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);
}
}
Expand Down

0 comments on commit 55f4389

Please sign in to comment.