From 8dca13988e943c8897f7fb8f87eb0e01665b9ac8 Mon Sep 17 00:00:00 2001
From: colemanw <coleman@civicrm.org>
Date: Sat, 17 Aug 2024 21:30:21 +0000
Subject: [PATCH] Afform - Exclude LocBlock fields that will be replaced by
 joins

---
 ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php b/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php
index c1498182ff21..524b50d57b92 100644
--- a/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php
+++ b/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php
@@ -99,6 +99,10 @@ public static function getFields($entityName, $params = []) {
       }
       $params['values']['state_province_id'] = \Civi::settings()->get('defaultContactStateProvince');
     }
+    // Exclude LocBlock fields that will be replaced by joins (see below)
+    if ($params['action'] === 'create' && $entityName === 'LocBlock') {
+      $params['where'][] = ['fk_entity', 'IS NULL'];
+    }
     $fields = (array) civicrm_api4($entityName, 'getFields', $params);
     // Add implicit joins to search fields
     if ($params['action'] === 'get') {
@@ -121,6 +125,7 @@ public static function getFields($entityName, $params = []) {
     if ($params['action'] === 'create' && $entityName === 'LocBlock') {
       $joinParams = $params;
       // Exclude fields that don't apply to locBlocks
+      array_pop($joinParams['where']);
       $joinParams['where'][] = ['name', 'NOT IN', ['id', 'is_primary', 'is_billing', 'location_type_id', 'contact_id']];
       foreach (['Address', 'Email', 'Phone', 'IM'] as $joinEntity) {
         $joinEntityFields = (array) civicrm_api4($joinEntity, 'getFields', $joinParams);