Add @searchable annotation to denote which API entities should be visible in Search...
authorColeman Watts <coleman@civicrm.org>
Mon, 30 Nov 2020 19:23:53 +0000 (14:23 -0500)
committerColeman Watts <coleman@civicrm.org>
Mon, 30 Nov 2020 19:23:53 +0000 (14:23 -0500)
37 files changed:
Civi/Api4/ACL.php
Civi/Api4/ActionSchedule.php
Civi/Api4/ContactType.php
Civi/Api4/CustomField.php
Civi/Api4/CustomGroup.php
Civi/Api4/Dashboard.php
Civi/Api4/DashboardContact.php
Civi/Api4/Domain.php
Civi/Api4/Entity.php
Civi/Api4/Generic/AbstractEntity.php
Civi/Api4/Generic/Traits/EntityBridge.php
Civi/Api4/Generic/Traits/OptionList.php
Civi/Api4/GroupNesting.php
Civi/Api4/GroupOrganization.php
Civi/Api4/LocBlock.php
Civi/Api4/MailSettings.php
Civi/Api4/Mapping.php
Civi/Api4/MappingField.php
Civi/Api4/MessageTemplate.php
Civi/Api4/Navigation.php
Civi/Api4/OptionGroup.php
Civi/Api4/PaymentProcessor.php
Civi/Api4/Relationship.php
Civi/Api4/Route.php
Civi/Api4/SavedSearch.php
Civi/Api4/Setting.php
Civi/Api4/StatusPreference.php
Civi/Api4/UFField.php
Civi/Api4/UFGroup.php
Civi/Api4/UFJoin.php
Civi/Api4/UFMatch.php
Civi/Api4/Utils/ReflectionUtils.php
ext/afform/core/Civi/Api4/Afform.php
ext/afform/core/Civi/Api4/AfformPalette.php
ext/afform/core/Civi/Api4/AfformTag.php
ext/search/Civi/Api4/SearchDisplay.php
ext/search/Civi/Search/Admin.php

index db5f774fdee389bef2dee5fc37a8d4d660e1b607..01de7979ea3589071794c254e69194d6a6e45f22 100644 (file)
@@ -30,6 +30,7 @@ namespace Civi\Api4;
  *
  * Creating a new ACL requires at minimum an entity table, entity ID and object_table.
  *
+ * @searchable false
  * @see https://docs.civicrm.org/user/en/latest/initial-set-up/permissions-and-access-control
  * @package Civi\Api4
  */
index 86cf74fc9db7bf5bf73386f9e704a4fc7ca5a675..2451af42925560e9f176e6bb7f29c8bb5a1bf780 100644 (file)
@@ -28,6 +28,7 @@ namespace Civi\Api4;
  *
  * Creating a new ActionSchedule requires at minimum a title, mapping_id and entity_value.
  *
+ * @searchable false
  * @see https://docs.civicrm.org/user/en/latest/email/scheduled-reminders/
  * @package Civi\Api4
  */
index d2ebd1b25b173c325db39de693a6efb858410c79..ac6731e569f4f5e00d8bc0fd06b4ed9137ecfdf8 100644 (file)
@@ -33,5 +33,6 @@ namespace Civi\Api4;
  * @package Civi\Api4
  */
 class ContactType extends Generic\DAOEntity {
+  use Generic\Traits\OptionList;
 
 }
index 7ac3b10657129ea75b948e97d3fc152a877c83b3..1d4b7e104bdc5d4870dc104d5bda3c42e5c7c68d 100644 (file)
@@ -23,7 +23,7 @@ namespace Civi\Api4;
  * CustomField entity.
  *
  * @see https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/
- *
+ * @searchable false
  * @package Civi\Api4
  */
 class CustomField extends Generic\DAOEntity {
index 14a878354b29f8ab03d49f6e219e5de80c6b4178..7a87a2bde0f0ab6710062638ca323f1ef9156742 100644 (file)
@@ -23,7 +23,7 @@ namespace Civi\Api4;
  * CustomGroup entity.
  *
  * @see https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/
- *
+ * @searchable false
  * @package Civi\Api4
  */
 class CustomGroup extends Generic\DAOEntity {
index d5c9c12c7734b95099b69e1fc7a74e6b4bac3368..24b42557a6e0b4a0a722ac3912a15856c1ac04d5 100644 (file)
@@ -28,6 +28,7 @@ namespace Civi\Api4;
  * Displaying an item to a user is done with the `DashboardContact` entity.
  *
  * @see \Civi\Api4\DashboardContact
+ * @searchable false
  * @package Civi\Api4
  */
 class Dashboard extends Generic\DAOEntity {
index 4ca8b6ecf61b7945971dcdda6fa95b78da40c769..f2538b326c4a4d12bd703f0bcf042fe79729d5fe 100644 (file)
@@ -24,6 +24,7 @@ namespace Civi\Api4;
  * This places a dashboard item on a user's home screen.
  *
  * @see \Civi\Api4\Dashboard
+ * @searchable false
  * @package Civi\Api4
  */
 class DashboardContact extends Generic\DAOEntity {
index a8a40cac74d4ef75bae23801bdc7cd3e7811aca1..8d356fac3200043b609714d6dd9c68ff9ef4c35c 100644 (file)
@@ -23,7 +23,7 @@ namespace Civi\Api4;
  * Domains - multisite instances of CiviCRM.
  *
  * @see https://docs.civicrm.org/sysadmin/en/latest/setup/multisite/
- *
+ * @searchable false
  * @package Civi\Api4
  */
 class Domain extends Generic\DAOEntity {
index e326df383075d56de198430ad112e63bd65009f5..8dec4cebaf213a462c297b2a2f256144c914f881 100644 (file)
@@ -84,6 +84,10 @@ class Entity extends Generic\AbstractEntity {
           'name' => 'dao',
           'description' => 'Class name for dao-based entities',
         ],
+        [
+          'name' => 'searchable',
+          'description' => 'Should this entity be selectable in search kit UI',
+        ],
         [
           'name' => 'paths',
           'data_type' => 'Array',
index a07dc847d17893762b6a28149a1cf58d9b01ad1f..d4e775ecefe1bae7729d89c2ae6fc98bbb1aa548 100644 (file)
@@ -139,8 +139,9 @@ abstract class AbstractEntity {
     foreach (ReflectionUtils::getTraits(static::class) as $trait) {
       $info['type'][] = self::stripNamespace($trait);
     }
+    $info['searchable'] = !in_array('OptionList', $info['type']);
     $reflection = new \ReflectionClass(static::class);
-    $info += ReflectionUtils::getCodeDocs($reflection, NULL, ['entity' => $info['name']]);
+    $info = array_merge($info, ReflectionUtils::getCodeDocs($reflection, NULL, ['entity' => $info['name']]));
     unset($info['package'], $info['method']);
     return $info;
   }
index 1123021dba96d755011cadbcc313445a4976d5ba..49b17680cd4e35725245305c4d0464d632023d2a 100644 (file)
@@ -15,6 +15,8 @@ namespace Civi\Api4\Generic\Traits;
  * A bridge is a small table that provides an intermediary link between two other tables.
  *
  * The API can automatically incorporate a Bridge into a join expression.
+ *
+ * Note: at time of writing this trait does nothing except affect the "type" shown in Entity::get() metadata.
  */
 trait EntityBridge {
 
index fb400cc55eef077f20e432fd3c6580664617f510..70936e0119af9d24111cc5f86f304978e16e0405 100644 (file)
@@ -15,6 +15,9 @@ namespace Civi\Api4\Generic\Traits;
  * An optionList is a small entity whose primary purpose is to supply a semi-static list of options to fields in other entities.
  *
  * The options appear in the field metadata for other entities that reference this one via pseudoconstant.
+ *
+ * Note: At time of writing, this trait does nothing except toggle the searchable flag, (and adds "OptionList" to the "type" in Entity::get() metadata).
+ * @searchable false (FYI annotation isn't functional because this is a trait - workaround in AbstractEntity::getInfo)
  */
 trait OptionList {
 
index 10e6b8d17430340a91703c06056d0793ea67b20d..a8376088b9666032038f6158cf7a0901ca0c1129 100644 (file)
@@ -22,7 +22,7 @@ namespace Civi\Api4;
  * GroupNesting entity.
  *
  * @see \Civi\Api4\Group
- *
+ * @searchable false
  * @package Civi\Api4
  */
 class GroupNesting extends Generic\DAOEntity {
index d7229a22ff439ec1f78b1286e9d87dd5d12f1a5b..87b683810b84fa3cae70460b2dbc4b6b77c368d7 100644 (file)
@@ -27,5 +27,6 @@ namespace Civi\Api4;
  * @package Civi\Api4
  */
 class GroupOrganization extends Generic\DAOEntity {
+  use Generic\Traits\EntityBridge;
 
 }
index 6b0ac77de9a15fa0ad186f3d13ed5ac23a662202..03c2c9752ca9d1ba6795cc10c99c9ff7e14a1170 100644 (file)
 namespace Civi\Api4;
 
 /**
- * ContributionPage entity.
+ * LocBlock entity.
  *
+ * Links addresses, emails & phones to Events.
+ *
+ * @searchable false
  * @package Civi\Api4
  */
 class LocBlock extends Generic\DAOEntity {
index 012a7869f222856f04555db2cb08a3ad70b5bbad..d5c70622c643fd1d5b788d5a75b9272a092fbd1c 100644 (file)
@@ -22,6 +22,7 @@ namespace Civi\Api4;
 /**
  * MailSettings entity.
  *
+ * @searchable false
  * @package Civi\Api4
  */
 class MailSettings extends Generic\DAOEntity {
index bd45b0b8d7a2c1e9365abd3ea296bdbe9ea2ab30..9c74f7d497db11df461356fadae5a009b31e6f36 100644 (file)
@@ -23,6 +23,7 @@ namespace Civi\Api4;
  *
  * This is a collection of MappingFields, for reuse in import, export, etc.
  *
+ * @searchable false
  * @package Civi\Api4
  */
 class Mapping extends Generic\DAOEntity {
index 23cb5e0ca96404778be7e4a74f29d433e9e2930f..bde710c401942b48d9e99be8b76d91dd1b216775 100644 (file)
@@ -24,7 +24,7 @@ namespace Civi\Api4;
  * This represents one field in a Mapping collection.
  *
  * @see \Civi\Api4\Mapping
- *
+ * @searchable false
  * @package Civi\Api4
  */
 class MappingField extends Generic\DAOEntity {
index 10101db1538f01f6c9aecd08913c919cf694a975..5f05a517d554ba038b64a3f23f2b9ace61b60b28 100644 (file)
@@ -22,7 +22,7 @@ namespace Civi\Api4;
  * MsgTemplate entity.
  *
  * This is a collection of MsgTemplate, for reuse in import, export, etc.
- *
+ * @searchable false
  * @package Civi\Api4
  */
 class MessageTemplate extends Generic\DAOEntity {
index 3ae9e5cb09f69d779835f2f078d0bd7c8c7effe1..57963db4e40ea4dfe628a793fa5fc8677ba2b15e 100644 (file)
@@ -21,6 +21,7 @@ namespace Civi\Api4;
 /**
  * Navigation entity.
  *
+ * @searchable false
  * @package Civi\Api4
  */
 class Navigation extends Generic\DAOEntity {
index 51a7c60a1deaba865d8af1ed08a501038678552d..a25bed16949147dec30ee09aa5c066b85843da77 100644 (file)
@@ -26,5 +26,6 @@ namespace Civi\Api4;
  * @package Civi\Api4
  */
 class OptionGroup extends Generic\DAOEntity {
+  use Generic\Traits\OptionList;
 
 }
index c15a4487337f158258aa8eacfedf07708132d721..c864069478c1b4f47a708d39820b675ba7f5fa1e 100644 (file)
@@ -25,5 +25,6 @@ namespace Civi\Api4;
  * @package Civi\Api4
  */
 class PaymentProcessor extends Generic\DAOEntity {
+  use Generic\Traits\OptionList;
 
 }
index dd76ecc23e211f0593c3db5f7b74f14c661b19a1..276da78074d04a2c12284e9b037ec5db618a91ed 100644 (file)
@@ -23,7 +23,7 @@ namespace Civi\Api4;
  * Relationship entity.
  *
  * @see https://docs.civicrm.org/user/en/latest/organising-your-data/relationships/
- *
+ * @searchable false
  * @package Civi\Api4
  */
 class Relationship extends Generic\DAOEntity {
index a407a5093e4f4fee61d1ce0890ae83890a659ce7..6681b645ecfb6294485ddfc40fb948f20a71cb2c 100644 (file)
@@ -26,7 +26,7 @@ namespace Civi\Api4;
  * Note: this is a read-only api as routes are set via xml files and hooks.
  *
  * @see https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterMenu/
- *
+ * @searchable false
  * @package Civi\Api4
  */
 class Route extends \Civi\Api4\Generic\AbstractEntity {
index 1262b6747ed00fd49ffc0c7c6baff5bba00abc04..79c5e0c2e9cf1ac8179bee8e4fc0d4617c6ad472 100644 (file)
@@ -25,6 +25,7 @@ namespace Civi\Api4;
  * Stores search parameters for populating smart groups with live results.
  *
  * @see https://docs.civicrm.org/user/en/latest/organising-your-data/smart-groups/
+ * @searchable false
  * @package Civi\Api4
  */
 class SavedSearch extends Generic\DAOEntity {
index a5d3654c98f7e1ad1ee8592eb480edfeee1f5e20..f97627b6aa0444e0361ddf2798ba3533f3f98cda 100644 (file)
@@ -25,6 +25,7 @@ namespace Civi\Api4;
  * Used to read/write persistent setting data from CiviCRM.
  *
  * @see \Civi\Core\SettingsBag
+ * @searchable false
  * @package Civi\Api4
  */
 class Setting extends Generic\AbstractEntity {
index d56476e13ebf75cfca291734a16f1f110589f482..4a2ece25ddb356a92189dd59d3673eebcbda8ad3 100644 (file)
@@ -24,6 +24,7 @@ namespace Civi\Api4;
  *
  * For setting "hush" preferences for system check alerts.
  *
+ * @searchable false
  * @package Civi\Api4
  */
 class StatusPreference extends Generic\DAOEntity {
index 2f8db8784c1047dccc2cedcd1f8ca1f0fd96c477..6d044da20728b3282aaceb766ec24dc55ba7c556 100644 (file)
@@ -23,6 +23,7 @@ namespace Civi\Api4;
  * UFField entity - aka profile fields.
  *
  * @see \Civi\Api4\UFGroup
+ * @searchable false
  * @package Civi\Api4
  */
 class UFField extends Generic\DAOEntity {
index 2d66a7257108560558ada06b4c16aae2616cadf8..2f80638a07bc5609dc2d26010b97f94765a326fc 100644 (file)
@@ -23,6 +23,7 @@ namespace Civi\Api4;
  * UFGroup entity - AKA profiles.
  *
  * @see https://docs.civicrm.org/user/en/latest/organising-your-data/profiles/
+ * @searchable false
  * @package Civi\Api4
  */
 class UFGroup extends Generic\DAOEntity {
index a5c8ce90088ba0f4f9efcad269c5969c0fc79da5..b1c874a93fe3aeaa1b9a0669ba85bcfe6e333ba6 100644 (file)
@@ -23,6 +23,7 @@ namespace Civi\Api4;
  * UFJoin entity - links profiles to the components/extensions they are used for.
  *
  * @see \Civi\Api4\UFGroup
+ * @searchable false
  * @package Civi\Api4
  */
 class UFJoin extends Generic\DAOEntity {
index c7956c9d88c131971763f134b5d2f3ebdc91ed5f..05cd8fa5a568729ec8a350e346c500af175db4cc 100644 (file)
@@ -22,6 +22,7 @@ namespace Civi\Api4;
 /**
  * UFMatch entity - links civicrm contacts with users created externally
  *
+ * @searchable false
  * @package Civi\Api4
  */
 class UFMatch extends Generic\DAOEntity {
index 0733b20f891fe5b26f63ed02dab49fb6ea81d4b2..cb7ddb01dc5b61e4b61acf1fbb25de507367b7c7 100644 (file)
@@ -95,6 +95,9 @@ class ReflectionUtils {
         elseif ($key == 'throws' || $key == 'see') {
           $info[$key][] = implode(' ', $words);
         }
+        elseif ($key == 'searchable') {
+          $info[$key] = strtolower($words[0]) !== 'false';
+        }
         elseif ($key == 'param' && $words) {
           $type = $words[0][0] !== '$' ? explode('|', array_shift($words)) : NULL;
           $param = rtrim(array_shift($words), '-:()/');
index 94abb0467be5b5afbbcfd4cce6bae02bb24501ee..8f1a400bd945c9dcde2f8fe42fcd1c7f180fc84e 100644 (file)
@@ -16,6 +16,7 @@ use Civi\Api4\Generic\BasicBatchAction;
  *      The `prefill` and `submit` actions are used for preparing forms and processing submissions.
  *
  * @see https://lab.civicrm.org/extensions/afform
+ * @searchable false
  * @package Civi\Api4
  */
 class Afform extends Generic\AbstractEntity {
index 981d5ad9a92106b6defb3f09e9a1037b0bd335b7..e803aa01766b675f480aa70f4ee38a228a494144 100644 (file)
@@ -4,6 +4,7 @@ namespace Civi\Api4;
 
 /**
  * Class AfformPalette
+ * @searchable false
  * @package Civi\Api4
  */
 class AfformPalette extends Generic\AbstractEntity {
index e2b5b77e93fc253fba1c573dd8fc5e5b0eb9b9a3..e2ca67f92bc21c14ece55103753763f1fba942c0 100644 (file)
@@ -3,6 +3,7 @@ namespace Civi\Api4;
 
 /**
  * Class AfformTag
+ * @searchable false
  * @package Civi\Api4
  */
 class AfformTag extends Generic\AbstractEntity {
index 33f44977b2102f4375d892dae569d95b1fb42aad..93503b83d4ff001c2bb0e95fbb2df571fbc50625 100644 (file)
@@ -6,6 +6,7 @@ namespace Civi\Api4;
  *
  * Provided by the Search Kit extension.
  *
+ * @searchable false
  * @package Civi\Api4
  */
 class SearchDisplay extends Generic\DAOEntity {
index ab90e7f02ecb862fe1e9c0dd89fa07f586924211..00448fee40f444ef6f9f2602d00aca5f4f872e69 100644 (file)
@@ -59,7 +59,7 @@ class Admin {
     $schema = [];
     $entities = \Civi\Api4\Entity::get()
       ->addSelect('name', 'title', 'type', 'title_plural', 'description', 'icon', 'paths')
-      ->addWhere('name', '!=', 'Entity')
+      ->addWhere('searchable', '=', TRUE)
       ->addOrderBy('title_plural')
       ->setChain([
         'get' => ['$name', 'getActions', ['where' => [['name', '=', 'get']]], ['params']],