SearchKit - Include custom group title with custom field label
authorColeman Watts <coleman@civicrm.org>
Sun, 21 Mar 2021 22:11:59 +0000 (18:11 -0400)
committerColeman Watts <coleman@civicrm.org>
Sun, 21 Mar 2021 23:44:19 +0000 (19:44 -0400)
This makes it easier to tell custom fields apart in SearchKit when they have similar names to core or other custom fields.

This takes advantage of API4.getFields returning both a "title" and "label" attribute.
This keeps "title" the same while appending group title to "label".

Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php
Civi/Api4/Service/Spec/SpecFormatter.php
Civi/Api4/Service/Spec/SpecGatherer.php
tests/phpunit/api/v4/Spec/SpecFormatterTest.php

index 510ff78826c662b13252afb11472199af178a53d..d77de0ed1d4797227fdd3b513a62cf3ab001e716 100644 (file)
@@ -60,7 +60,7 @@ class CustomGroupJoinable extends Joinable {
     $entityFields = (array) \Civi::cache('metadata')->get($cacheKey);
     if (!$entityFields) {
       $fields = CustomField::get(FALSE)
-        ->setSelect(['custom_group.name', 'custom_group.extends', 'custom_group.table_name', '*'])
+        ->setSelect(['custom_group.name', 'custom_group.extends', 'custom_group.table_name', 'custom_group.title', '*'])
         ->addWhere('custom_group.table_name', '=', $this->getTargetTable())
         ->execute();
       foreach ($fields as $field) {
index dad0c20caaad7493f1eccb8281babcbd1c94382a..341ab2bbd16ce8dba54a325281533740e5f59cfa 100644 (file)
@@ -63,7 +63,8 @@ class SpecFormatter {
       $field->setColumnName($data['column_name']);
       $field->setCustomFieldId($data['id'] ?? NULL);
       $field->setCustomGroupName($data['custom_group.name']);
-      $field->setTitle($data['label'] ?? NULL);
+      $field->setTitle($data['label']);
+      $field->setLabel($data['custom_group.title'] . ': ' . $data['label']);
       $field->setHelpPre($data['help_pre'] ?? NULL);
       $field->setHelpPost($data['help_post'] ?? NULL);
       $field->setOptions(self::customFieldHasOptions($data));
index 5eda054230d9614e358d65ba44c0af336c6dd6d4..ef9954f20c305ce455618aebf16a1bfb9999ecde 100644 (file)
@@ -132,7 +132,7 @@ class SpecGatherer {
     $customFields = CustomField::get(FALSE)
       ->addWhere('custom_group.extends', 'IN', $extends)
       ->addWhere('custom_group.is_multiple', '=', '0')
-      ->setSelect(['custom_group.name', '*'])
+      ->setSelect(['custom_group.name', 'custom_group.title', '*'])
       ->execute();
 
     foreach ($customFields as $fieldArray) {
@@ -148,7 +148,7 @@ class SpecGatherer {
   private function getCustomGroupFields($customGroup, RequestSpec $specification) {
     $customFields = CustomField::get(FALSE)
       ->addWhere('custom_group.name', '=', $customGroup)
-      ->setSelect(['custom_group.name', 'custom_group.table_name', '*'])
+      ->setSelect(['custom_group.name', 'custom_group.table_name', 'custom_group.title', '*'])
       ->execute();
 
     foreach ($customFields as $fieldArray) {
index 59302b8f60ba824a81e2345e093c1d7d4f31cdec..b0d805ea311c67e28df00108154d67f0821fad53 100644 (file)
@@ -62,8 +62,10 @@ class SpecFormatterTest extends UnitTestCase {
     $data = [
       'custom_group_id' => $customGroupId,
       'custom_group.name' => 'my_group',
+      'custom_group.title' => 'My Group',
       'id' => $customFieldId,
       'name' => $name,
+      'label' => $name,
       'data_type' => 'String',
       'html_type' => 'Select',
       'column_name' => $name,