diff options
Diffstat (limited to 'www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/Civi/Api4/Action/Entity/GetLinks.php')
-rw-r--r-- | www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/Civi/Api4/Action/Entity/GetLinks.php | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/Civi/Api4/Action/Entity/GetLinks.php b/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/Civi/Api4/Action/Entity/GetLinks.php new file mode 100644 index 00000000..ee274bf9 --- /dev/null +++ b/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/Civi/Api4/Action/Entity/GetLinks.php @@ -0,0 +1,51 @@ +<?php + +namespace Civi\Api4\Action\Entity; + +use \CRM_Core_DAO_AllCoreTables as AllCoreTables; + +/** + * Get a list of FK links between entities + */ +class GetLinks extends \Civi\Api4\Generic\BasicGetAction { + + public function getRecords() { + $result = []; + /** @var \Civi\Api4\Service\Schema\SchemaMap $schema */ + $schema = \Civi::container()->get('schema_map'); + foreach ($schema->getTables() as $table) { + $entity = AllCoreTables::getBriefName(AllCoreTables::getClassForTable($table->getName())); + // Since this is an api function, exclude tables that don't have an api + if (class_exists('\Civi\Api4\\' . $entity)) { + $item = [ + 'entity' => $entity, + 'table' => $table->getName(), + 'links' => [], + ]; + foreach ($table->getTableLinks() as $link) { + $link = $link->toArray(); + $link['entity'] = AllCoreTables::getBriefName(AllCoreTables::getClassForTable($link['targetTable'])); + $item['links'][] = $link; + } + $result[] = $item; + } + } + return $result; + } + + public function fields() { + return [ + [ + 'name' => 'entity', + ], + [ + 'name' => 'table', + ], + [ + 'name' => 'links', + 'data_type' => 'Array', + ], + ]; + } + +} |