Hide deprecated fields from SearchKit & Afform
authorColeman Watts <coleman@civicrm.org>
Mon, 5 Dec 2022 02:08:55 +0000 (21:08 -0500)
committerColeman Watts <coleman@civicrm.org>
Mon, 5 Dec 2022 02:08:55 +0000 (21:08 -0500)
13 files changed:
CRM/Activity/DAO/Activity.php
CRM/Contact/DAO/Contact.php
CRM/Core/DAO/Address.php
CRM/Core/DAO/Phone.php
Civi/Api4/Generic/BasicGetFieldsAction.php
Civi/Api4/Service/Spec/FieldSpec.php
Civi/Api4/Service/Spec/SpecFormatter.php
ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php
ext/search_kit/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php
ext/search_kit/Civi/Search/Admin.php
ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.ctrl.js
tests/phpunit/api/v4/Action/GetFieldsTest.php
xml/templates/dao.tpl

index 833f7d2bb34d1b20791e3d3e3234ae78a9b1de0f..d9709a9b721065949f8bbc7bf4d75794d02b332b 100644 (file)
@@ -497,6 +497,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO {
           'bao' => 'CRM_Activity_BAO_Activity',
           'localizable' => 0,
           'FKClassName' => 'CRM_Core_DAO_Phone',
+          'deprecated' => TRUE,
           'html' => [
             'type' => 'EntityRef',
             'label' => ts("Phone (called)"),
@@ -515,6 +516,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO {
           'entity' => 'Activity',
           'bao' => 'CRM_Activity_BAO_Activity',
           'localizable' => 0,
+          'deprecated' => TRUE,
           'html' => [
             'type' => 'Text',
           ],
@@ -662,6 +664,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO {
           'bao' => 'CRM_Activity_BAO_Activity',
           'localizable' => 0,
           'FKClassName' => 'CRM_Contact_DAO_Relationship',
+          'deprecated' => TRUE,
           'html' => [
             'label' => ts("Relationship"),
           ],
@@ -679,6 +682,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO {
           'entity' => 'Activity',
           'bao' => 'CRM_Activity_BAO_Activity',
           'localizable' => 0,
+          'deprecated' => TRUE,
           'add' => '2.2',
         ],
         'original_id' => [
@@ -692,6 +696,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO {
           'bao' => 'CRM_Activity_BAO_Activity',
           'localizable' => 0,
           'FKClassName' => 'CRM_Activity_DAO_Activity',
+          'deprecated' => TRUE,
           'html' => [
             'label' => ts("Original Activity"),
           ],
index 19890da4926d6c2a02cfd4952a3886ae60a97c20..ebdba06ed2e8a59458b8212ae46f60edd5271787 100644 (file)
@@ -973,6 +973,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
           'localizable' => 0,
+          'deprecated' => TRUE,
           'html' => [
             'type' => 'Select',
             'label' => ts("Preferred Mail Format"),
@@ -1582,6 +1583,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
           'localizable' => 0,
+          'deprecated' => TRUE,
           'html' => [
             'type' => 'Text',
           ],
index 2b57160b97f2bf253682ad795e52b015f949485f..66269a9a8dbaa8e7d64d7d1990ff748b50a9256e 100644 (file)
@@ -763,6 +763,7 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO {
           'entity' => 'Address',
           'bao' => 'CRM_Core_BAO_Address',
           'localizable' => 0,
+          'deprecated' => TRUE,
           'add' => '1.1',
         ],
         'country_id' => [
index b49adb0bf38624acf33ddca7a162430a26f19c14..743801083b32d12b884add91d04f2ab2a467bc29 100644 (file)
@@ -271,6 +271,7 @@ class CRM_Core_DAO_Phone extends CRM_Core_DAO {
           'entity' => 'Phone',
           'bao' => 'CRM_Core_BAO_Phone',
           'localizable' => 0,
+          'deprecated' => TRUE,
           'add' => '1.1',
         ],
         'phone' => [
index b89293e16d971033f1601be64e763ee8759beeaf..d114fad93f2c69dada9792e78595e41b09a774a6 100644 (file)
@@ -391,6 +391,11 @@ class BasicGetFieldsAction extends BasicGetAction {
         'description' => 'True for auto-increment, calculated, or otherwise non-editable fields.',
         'default_value' => FALSE,
       ],
+      [
+        'name' => 'deprecated',
+        'data_type' => 'Boolean',
+        'default_value' => FALSE,
+      ],
       [
         'name' => 'output_formatters',
         'data_type' => 'Array',
index 58b1c526da075e63ea8629a07e5b8145be1c2318..ba7905905840b0b55ec49929adf1560730fb1f0e 100644 (file)
@@ -80,6 +80,11 @@ class FieldSpec {
    */
   public $readonly = FALSE;
 
+  /**
+   * @var bool
+   */
+  public $deprecated = FALSE;
+
   /**
    * @var callable[]
    */
@@ -245,4 +250,14 @@ class FieldSpec {
     return $this;
   }
 
+  /**
+   * @param bool $deprecated
+   * @return $this
+   */
+  public function setDeprecated($deprecated) {
+    $this->deprecated = (bool) $deprecated;
+
+    return $this;
+  }
+
 }
index 4f280e66c2b3c9ed29e5797eaecf76d92e479833..cfdfec55868778a55bc2781bd4243ea8afda75c6 100644 (file)
@@ -87,6 +87,7 @@ class SpecFormatter {
     $field->setSerialize($data['serialize'] ?? NULL);
     $field->setDefaultValue($data['default'] ?? NULL);
     $field->setDescription($data['description'] ?? NULL);
+    $field->setDeprecated($data['deprecated'] ?? FALSE);
     self::setInputTypeAndAttrs($field, $data, $dataTypeName);
 
     $field->setPermission($data['permission'] ?? NULL);
index 30b367c90dfa5a2c05eaf6e6003747be898f97a4..ed1ef31e7806e54d1197e21e10906d9ae4796cc0 100644 (file)
@@ -89,7 +89,7 @@ class AfformAdminMeta {
       'loadOptions' => ['id', 'label'],
       'action' => 'create',
       'select' => ['name', 'label', 'input_type', 'input_attrs', 'required', 'options', 'help_pre', 'help_post', 'serialize', 'data_type', 'entity', 'fk_entity', 'readonly'],
-      'where' => [['input_type', 'IS NOT NULL']],
+      'where' => [['deprecated', '=', FALSE], ['input_type', 'IS NOT NULL']],
     ];
     if (in_array($entityName, \CRM_Contact_BAO_ContactType::basicTypes(TRUE), TRUE)) {
       $params['values']['contact_type'] = $entityName;
index 7afcb61912f455b0f48270681c97ec268187257c..c0f03105bce648433b0bc24c421d426579c9dfdf 100644 (file)
@@ -29,7 +29,7 @@ class GetSearchTasks extends \Civi\Api4\Generic\AbstractAction {
       ->addSelect('name', 'title_plural')
       ->setChain([
         'actions' => ['$name', 'getActions', ['where' => [['name', 'IN', ['update', 'delete']]]], 'name'],
-        'fields' => ['$name', 'getFields', ['where' => [['type', '=', 'Field']]], 'name'],
+        'fields' => ['$name', 'getFields', ['where' => [['deprecated', '=', FALSE], ['type', '=', 'Field']]], 'name'],
       ])
       ->execute()->first();
 
index 1cd3d6917bdeabc4e197146765d73d1d8ceb83f1..0f74b1f740ec8e7616768420cc74320b16853d7e 100644 (file)
@@ -143,7 +143,7 @@ class Admin {
         }
         $getFields = civicrm_api4($entity['name'], 'getFields', [
           'select' => ['name', 'title', 'label', 'description', 'type', 'options', 'input_type', 'input_attrs', 'data_type', 'serialize', 'entity', 'fk_entity', 'readonly', 'operators', 'suffixes', 'nullable'],
-          'where' => [['name', 'NOT IN', ['api_key', 'hash']]],
+          'where' => [['deprecated', '=', FALSE], ['name', 'NOT IN', ['api_key', 'hash']]],
           'orderBy' => ['label'],
         ]);
         foreach ($getFields as $field) {
index 01f41d16fd38fb606fd3c127dd931c89e757de6f..0d0005ab0907e88fa773b715ad57d64153fbf261 100644 (file)
@@ -15,7 +15,7 @@
       action: 'update',
       select: ['name', 'label', 'description', 'input_type', 'data_type', 'serialize', 'options', 'fk_entity', 'nullable'],
       loadOptions: ['id', 'name', 'label', 'description', 'color', 'icon'],
-      where: [["readonly", "=", false]],
+      where: [['deprecated', '=', FALSE], ["readonly", "=", false]],
     }).then(function(fields) {
         ctrl.fields = fields;
       });
index 006cd6cfaa4137b5ad8ae5363af17b83db839b66..3de060d975d42decdc1ec1856db0901577b9a0b9 100644 (file)
@@ -101,7 +101,7 @@ class GetFieldsTest extends Api4TestBase implements TransactionalInterface {
     $this->assertEquals(['name', 'label'], $fields['campaign_id']['suffixes']);
   }
 
-  public function testRequiredAndNullable() {
+  public function testRequiredAndNullableAndDeprecated() {
     $actFields = Activity::getFields(FALSE)
       ->setAction('create')
       ->execute()->indexBy('name');
@@ -111,6 +111,8 @@ class GetFieldsTest extends Api4TestBase implements TransactionalInterface {
     $this->assertFalse($actFields['activity_type_id']['nullable']);
     $this->assertFalse($actFields['subject']['required']);
     $this->assertTrue($actFields['subject']['nullable']);
+    $this->assertFalse($actFields['subject']['deprecated']);
+    $this->assertTrue($actFields['phone_id']['deprecated']);
   }
 
   public function testGetSuffixes() {
index 7504906dbd2320a788351d3c3ba0ee3cbe37f4e9..904aefbb8f6dc5d3da8bf0ac5ee53740fd10be53 100644 (file)
@@ -226,6 +226,9 @@ class {$table.className} extends CRM_Core_DAO {ldelim}
 {if $field.uniqueTitle}
   'unique_title' => {$tsFunctionName}('{$field.uniqueTitle}'),
 {/if}
+{if $field.deprecated}
+  'deprecated' => TRUE,
+{/if}
 {if $field.html}
   'html' => array(
   {foreach from=$field.html item=val key=key}