+--------------------------------------------------------------------+
*/
+use Civi\Api4\Contact;
use Civi\Api4\CustomGroup;
/**
// This parameter causes blank fields to be be emptied out.
// We can probably remove.
$params['updateBlankLocInfo'] = TRUE;
+ if (empty($params['contact_type']) || ($params['contact_type'] === 'Organization' && empty($params['organization_name']))) {
+ // Ensuring this is set addresses https://lab.civicrm.org/dev/core/-/issues/4156
+ // but not that RM_Dedupe_MergerTest::testMergeWithEmployer covers this scenario
+ // so refactoring of this is safe.
+ $contact = Contact::get(FALSE)->addWhere('id', '=', $contactID)->addSelect('organization_name', 'contact_type')->execute()->first();
+ $params['contact_type'] = $contact['contact_type'];
+ if (empty($params['organization_name']) && $params['contact_type'] === 'Organization') {
+ $params['organization_name'] = $contact['organization_name'];
+ }
+ }
$data = self::formatProfileContactParams($params, $contactID);
+
CRM_Contact_BAO_Contact::create($data);
}
int $contactID
) {
- $data = $contactDetails = [];
+ $data = ['contact_type' => $params['contact_type']];
// get the contact details (hier)
$details = CRM_Contact_BAO_Contact::getHierContactDetails($contactID, []);
$contactDetails = $details[$contactID];
- $data['contact_type'] = $contactDetails['contact_type'] ?? NULL;
$data['contact_sub_type'] = $contactDetails['contact_sub_type'] ?? NULL;
//fix contact sub type CRM-5125
}
}
- if (!isset($data['contact_type'])) {
- $data['contact_type'] = 'Individual';
- }
-
return $data;
}
<?php
+use Civi\Api4\Contact;
+
/**
* Class CRM_Dedupe_DedupeMergerTest
*
// update the text custom field for duplicate contact 1 with value 'def'
$this->callAPISuccess('Contact', 'create', [
'id' => $duplicateContactID1,
- "{$customFieldName}" => 'def',
+ $customFieldName => 'def',
]);
$this->assertCustomFieldValue($duplicateContactID1, 'def', $customFieldName);
CRM_Core_DAO_AllCoreTables::flush();
$contact1 = $this->individualCreate();
$contact2 = $this->individualCreate(['api.Im.create' => ['name' => 'chat_handle']]);
- $this->callAPISuccess('Contact', 'merge', ['to_keep_id' => $contact1, 'to_remove_id' => $contact2]);
+ $this->callAPISuccess('Contact', 'merge', [
+ 'to_keep_id' => $contact1,
+ 'to_remove_id' => $contact2,
+ ]);
+ }
+
+ /**
+ * Test that organization name is updated for employees of merged organizations..
+ *
+ * @throws \CRM_Core_Exception
+ */
+ public function testMergeWithEmployer(): void {
+ $organizationToRemoveID = $this->organizationCreate(['organization_name' => 'remove']);
+ $organizationToKeepID = $this->organizationCreate(['organization_name' => 'keep']);
+ $individualID = $this->createContactWithEmployerRelationship([
+ 'contact_id_b' => $organizationToRemoveID,
+ ]);
+ $employerName = Contact::get()->addSelect('organization_name')->addWhere('id', '=', $individualID)->execute()->first()['organization_name'];
+ $this->assertEquals('remove', $employerName);
+ $this->callAPISuccess('Contact', 'merge', ['to_keep_id' => $organizationToKeepID, 'to_remove_id' => $organizationToRemoveID, 'mode' => 'aggressive']);
+ $employerName = Contact::get()->addSelect('organization_name')->addWhere('id', '=', $individualID)->execute()->first()['organization_name'];
+ $this->assertEquals('keep', $employerName);
}
/**