Merge pull request #23119 from eileenmcnaughton/silly6
[civicrm-core.git] / Civi / Api4 / Entity.php
index 9fc1dd7348078c5d733e75f9216538bfc574b362..3d362edfe930e9bc4bec7fcb5002561152cb9c97 100644 (file)
@@ -35,7 +35,7 @@ class Entity extends Generic\AbstractEntity {
    * @return Generic\BasicGetFieldsAction
    */
   public static function getFields($checkPermissions = TRUE) {
-    return (new Generic\BasicGetFieldsAction('Entity', __FUNCTION__, function() {
+    return (new Generic\BasicGetFieldsAction('Entity', __FUNCTION__, function(Generic\BasicGetFieldsAction $getFields) {
       return [
         [
           'name' => 'name',
@@ -53,15 +53,7 @@ class Entity extends Generic\AbstractEntity {
           'name' => 'type',
           'data_type' => 'Array',
           'description' => 'Base class for this entity',
-          'options' => [
-            'AbstractEntity' => 'AbstractEntity',
-            'DAOEntity' => 'DAOEntity',
-            'CustomValue' => 'CustomValue',
-            'BasicEntity' => 'BasicEntity',
-            'SortableEntity' => 'SortableEntity',
-            'ManagedEntity' => 'ManagedEntity',
-            'EntityBridge' => 'EntityBridge',
-          ],
+          'options' => $getFields->getLoadOptions() ? self::getEntityTypes() : TRUE,
         ],
         [
           'name' => 'description',
@@ -79,6 +71,10 @@ class Entity extends Generic\AbstractEntity {
           'name' => 'dao',
           'description' => 'Class name for dao-based entities',
         ],
+        [
+          'name' => 'table_name',
+          'description' => 'Name of sql table, if applicable',
+        ],
         [
           'name' => 'primary_key',
           'data_type' => 'Array',
@@ -122,6 +118,11 @@ class Entity extends Generic\AbstractEntity {
           'data_type' => 'String',
           'description' => 'PHP class name',
         ],
+        [
+          'name' => 'class_args',
+          'data_type' => 'Array',
+          'description' => 'Arguments needed by php action factory functions (used when multiple entities share a class, e.g. CustomValue).',
+        ],
         [
           'name' => 'bridge',
           'data_type' => 'Array',
@@ -160,4 +161,20 @@ class Entity extends Generic\AbstractEntity {
     ];
   }
 
+  /**
+   * Collect the 'type' values from every entity.
+   *
+   * @return array
+   */
+  private static function getEntityTypes() {
+    $provider = \Civi::service('action_object_provider');
+    $entityTypes = [];
+    foreach ($provider->getEntities() as $entity) {
+      foreach ($entity['type'] ?? [] as $type) {
+        $entityTypes[$type] = $type;
+      }
+    }
+    return $entityTypes;
+  }
+
 }