diff --git a/Civi/Api4/Service/Spec/SpecGatherer.php b/Civi/Api4/Service/Spec/SpecGatherer.php index 94a4abc073a9..5053ae84d9f8 100644 --- a/Civi/Api4/Service/Spec/SpecGatherer.php +++ b/Civi/Api4/Service/Spec/SpecGatherer.php @@ -122,6 +122,7 @@ private function addCustomFields($entity, RequestSpec $spec) { $query = CustomField::get(FALSE) ->setSelect(['custom_group_id.name', 'custom_group_id.title', '*']) + ->addWhere('is_active', '=', TRUE) ->addWhere('custom_group_id.is_multiple', '=', '0'); // Contact custom groups are extra complicated because contact_type can be a value for extends @@ -196,6 +197,7 @@ private function addCustomFields($entity, RequestSpec $spec) { private function getCustomGroupFields($customGroup, RequestSpec $specification) { $customFields = CustomField::get(FALSE) ->addWhere('custom_group_id.name', '=', $customGroup) + ->addWhere('is_active', '=', TRUE) ->setSelect(['custom_group_id.name', 'custom_group_id.table_name', 'custom_group_id.title', '*']) ->execute(); diff --git a/tests/phpunit/api/v4/Custom/BasicCustomFieldTest.php b/tests/phpunit/api/v4/Custom/BasicCustomFieldTest.php index c12421fdfe2a..41137824eea5 100644 --- a/tests/phpunit/api/v4/Custom/BasicCustomFieldTest.php +++ b/tests/phpunit/api/v4/Custom/BasicCustomFieldTest.php @@ -95,6 +95,25 @@ public function testWithSingleField(): void { ->execute() ->first(); $this->assertEquals(NULL, $contact['MyIndividualFields.FavColor']); + + // Disable the field and it disappears from getFields and from the API output. + CustomField::update(FALSE) + ->addWhere('custom_group_id:name', '=', 'MyIndividualFields') + ->addWhere('name', '=', 'FavColor') + ->addValue('is_active', FALSE) + ->execute(); + + $getFields = Contact::getFields(FALSE) + ->execute()->column('name'); + $this->assertContains('first_name', $getFields); + $this->assertNotContains('MyIndividualFields.FavColor', $getFields); + + $contact = Contact::get(FALSE) + ->addSelect('MyIndividualFields.FavColor') + ->addWhere('id', '=', $contactId) + ->execute() + ->first(); + $this->assertArrayNotHasKey('MyIndividualFields.FavColor', $contact); } public function testWithTwoFields() { diff --git a/tests/phpunit/api/v4/Custom/CustomValueTest.php b/tests/phpunit/api/v4/Custom/CustomValueTest.php index dd632c2f6f0d..ffe2f517d00f 100644 --- a/tests/phpunit/api/v4/Custom/CustomValueTest.php +++ b/tests/phpunit/api/v4/Custom/CustomValueTest.php @@ -90,7 +90,7 @@ public function testCRUD() { $this->assertEquals('secondary', $entity['searchable']); // Retrieve and check the fields of CustomValue = Custom_$group - $fields = CustomValue::getFields($group)->setLoadOptions(TRUE)->setCheckPermissions(FALSE)->execute(); + $fields = CustomValue::getFields($group, FALSE)->setLoadOptions(TRUE)->execute(); $expectedResult = [ [ 'custom_group' => $group, @@ -252,6 +252,16 @@ public function testCRUD() { } } + // Disable a field + CustomField::update(FALSE) + ->addValue('is_active', FALSE) + ->addWhere('id', '=', $multiField['id']) + ->execute(); + + $result = CustomValue::get($group)->execute()->single(); + $this->assertArrayHasKey($colorFieldName, $result); + $this->assertArrayNotHasKey($multiFieldName, $result); + // CASE 4: Test CustomValue::delete // There is only record left whose id = 3, delete that record on basis of criteria id = 3 CustomValue::delete($group)->addWhere("id", "=", 3)->execute();