diff --git a/CRM/Contact/DAO/Contact.php b/CRM/Contact/DAO/Contact.php
index f6b08d4ddd3c..1dbc2a5f2920 100644
--- a/CRM/Contact/DAO/Contact.php
+++ b/CRM/Contact/DAO/Contact.php
@@ -6,7 +6,7 @@
*
* Generated from xml/schema/CRM/Contact/Contact.xml
* DO NOT EDIT. Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0470d0df786c3ac33a435555a3d026fb)
+ * (GenCodeChecksum:db242115b7297ba205c6abac5b8318c6)
*/
/**
@@ -604,6 +604,7 @@ public static function &fields() {
],
'where' => 'civicrm_contact.contact_type',
'export' => TRUE,
+ 'contactType' => 'Contact',
'table_name' => 'civicrm_contact',
'entity' => 'Contact',
'bao' => 'CRM_Contact_BAO_Contact',
diff --git a/Civi/Api4/Service/Spec/SpecGatherer.php b/Civi/Api4/Service/Spec/SpecGatherer.php
index d77e3a8bc49b..6a0854192284 100644
--- a/Civi/Api4/Service/Spec/SpecGatherer.php
+++ b/Civi/Api4/Service/Spec/SpecGatherer.php
@@ -94,6 +94,9 @@ private function addDAOFields(string $entityName, string $action, RequestSpec $s
if (isset($DAOField['contactType']) && $spec->getValue('contact_type') && $DAOField['contactType'] !== $spec->getValue('contact_type')) {
continue;
}
+ elseif (($DAOField['contactType'] ?? NULL) === 'Contact' && $entityName !== 'Contact') {
+ continue;
+ }
if (!empty($DAOField['component']) && !\CRM_Core_Component::isEnabled($DAOField['component'])) {
continue;
}
diff --git a/Civi/Api4/Utils/FormattingUtil.php b/Civi/Api4/Utils/FormattingUtil.php
index 2aba6212f210..4f4da40dd46f 100644
--- a/Civi/Api4/Utils/FormattingUtil.php
+++ b/Civi/Api4/Utils/FormattingUtil.php
@@ -432,7 +432,7 @@ public static function contactFieldsToRemove($contactType, $prefix): array {
if (!isset(\Civi::$statics[__CLASS__][__FUNCTION__][$contactType])) {
\Civi::$statics[__CLASS__][__FUNCTION__][$contactType] = [];
foreach (\CRM_Contact_DAO_Contact::fields() as $field) {
- if (!empty($field['contactType']) && $field['contactType'] != $contactType) {
+ if (!empty($field['contactType']) && $field['contactType'] !== 'Contact' && $field['contactType'] !== $contactType) {
\Civi::$statics[__CLASS__][__FUNCTION__][$contactType][] = $field['name'];
// Include suffixed variants like prefix_id:label
if (!empty($field['pseudoconstant'])) {
diff --git a/tests/phpunit/api/v4/Action/GetExtraFieldsTest.php b/tests/phpunit/api/v4/Action/GetExtraFieldsTest.php
index ec50d5097326..0ee2a9b93cde 100644
--- a/tests/phpunit/api/v4/Action/GetExtraFieldsTest.php
+++ b/tests/phpunit/api/v4/Action/GetExtraFieldsTest.php
@@ -43,21 +43,21 @@ public function testGetFieldsByContactType(): void {
$individualFields = (array) $getFields->setValues(['contact_type' => 'Individual'])->execute()->indexBy('name');
$this->assertArrayNotHasKey('sic_code', $individualFields);
- $this->assertTrue($individualFields['contact_type']['readonly']);
+ $this->assertArrayNotHasKey('contact_type', $individualFields);
$this->assertArrayHasKey('first_name', $individualFields);
$orgId = Contact::create(FALSE)->addValue('contact_type', 'Organization')->execute()->first()['id'];
$organizationFields = (array) $getFields->setValues(['id' => $orgId])->execute()->indexBy('name');
$this->assertArrayHasKey('organization_name', $organizationFields);
$this->assertArrayHasKey('sic_code', $organizationFields);
- $this->assertTrue($organizationFields['contact_type']['readonly']);
+ $this->assertArrayNotHasKey('contact_type', $organizationFields);
$this->assertArrayNotHasKey('first_name', $organizationFields);
$this->assertArrayNotHasKey('household_name', $organizationFields);
$hhId = Household::create(FALSE)->execute()->first()['id'];
$householdFields = (array) $getFields->setValues(['id' => $hhId])->execute()->indexBy('name');
$this->assertArrayNotHasKey('sic_code', $householdFields);
- $this->assertTrue($householdFields['contact_type']['readonly']);
+ $this->assertArrayNotHasKey('contact_type', $householdFields);
$this->assertArrayNotHasKey('first_name', $householdFields);
$this->assertArrayHasKey('household_name', $householdFields);
}
diff --git a/tests/phpunit/api/v4/Action/GetFieldsTest.php b/tests/phpunit/api/v4/Action/GetFieldsTest.php
index 93e769f3c8d1..8aeab52cc85f 100644
--- a/tests/phpunit/api/v4/Action/GetFieldsTest.php
+++ b/tests/phpunit/api/v4/Action/GetFieldsTest.php
@@ -66,7 +66,7 @@ public function testContactGetFields(): void {
->execute()
->indexBy('name');
// Ensure table & column are returned
- $this->assertEquals('civicrm_contact', $fields['display_name']['table_name']);
+ $this->assertEquals('civicrm_contact', $fields['contact_type']['table_name']);
$this->assertEquals('display_name', $fields['display_name']['column_name']);
// Check suffixes
diff --git a/xml/schema/Contact/Contact.xml b/xml/schema/Contact/Contact.xml
index 778dab43bee5..d03fb9152707 100644
--- a/xml/schema/Contact/Contact.xml
+++ b/xml/schema/Contact/Contact.xml
@@ -53,6 +53,7 @@
true
1.1
3.1
+ Contact
index_contact_type