From f00283b58cb47baf82d00115f4bb203f5ef780a9 Mon Sep 17 00:00:00 2001 From: eileen Date: Thu, 3 Mar 2016 13:59:10 +1300 Subject: [PATCH] CRM-18106 create activity against contact deleted by merge --- CRM/Dedupe/Merger.php | 44 ++++++++++++++++++++-------- tests/phpunit/api/v3/ContactTest.php | 10 +++++++ 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/CRM/Dedupe/Merger.php b/CRM/Dedupe/Merger.php index d2e0b6f72e..de2e18dca1 100644 --- a/CRM/Dedupe/Merger.php +++ b/CRM/Dedupe/Merger.php @@ -1832,27 +1832,19 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } CRM_Contact_BAO_Contact::createProfileContact($submitted, CRM_Core_DAO::$_nullArray, $mainId); - unset($submitted); } CRM_Utils_Hook::post('merge', 'Contact', $mainId, CRM_Core_DAO::$_nullObject); - - // Create activity for merge. - $messageActivity = ts('Contact ID %1 has been merged and deleted.', array(1 => $otherId)); - civicrm_api3('activity', 'create', array( - 'subject' => $messageActivity, - 'source_contact_id' => CRM_Core_Session::singleton()->getLoggedInContactID(), - 'target_contact_id' => $mainId, - 'activity_type_id' => 'Contact Merged', - 'status_id' => 'Completed', - )); + self::createMergeActivities($mainId, $otherId); return TRUE; } /** + * Get fields in the contact table suitable for merging. + * * @return array - * Array of field names which will be compared, so everything except ID. + * Array of field names to be potentially merged. */ public static function getContactFields() { $contactFields = CRM_Contact_DAO_Contact::fields(); @@ -1929,4 +1921,32 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } } + /** + * Create activities tracking the merge on affected contacts. + * + * @param int $mainId + * @param int $otherId + * + * @throws \CiviCRM_API3_Exception + */ + public static function createMergeActivities($mainId, $otherId) { + $params = array( + 1 => $otherId, + 2 => $mainId, + ); + $activity = civicrm_api3('activity', 'create', array( + 'subject' => ts('Contact ID %1 has been merged and deleted.', $params), + 'target_contact_id' => $mainId, + 'activity_type_id' => 'Contact Merged', + 'status_id' => 'Completed', + )); + civicrm_api3('activity', 'create', array( + 'subject' => ts('Contact ID %1 has been merged into Contact ID %2 and deleted.', $params), + 'target_contact_id' => $otherId, + 'activity_type_id' => 'Contact Deleted by Merge', + 'parent_id' => $activity['id'], + 'status_id' => 'Completed', + )); + } + } diff --git a/tests/phpunit/api/v3/ContactTest.php b/tests/phpunit/api/v3/ContactTest.php index 4e9599f022..21bf13ed4c 100644 --- a/tests/phpunit/api/v3/ContactTest.php +++ b/tests/phpunit/api/v3/ContactTest.php @@ -2872,6 +2872,16 @@ class api_v3_ContactTest extends CiviUnitTestCase { 'activity_type_id' => 'Contact Merged', )); $this->assertEquals(date('Y-m-d'), date('Y-m-d', strtotime($activity['activity_date_time']))); + $activity2 = $this->callAPISuccess('Activity', 'getsingle', array( + 'target_contact_id' => $otherContact['id'], + 'activity_type_id' => 'Contact Deleted by Merge', + )); + $this->assertEquals($activity['id'], $activity2['parent_id']); + $this->assertEquals('Normal', civicrm_api3('option_value', 'getvalue', array( + 'value' => $activity['priority_id'], + 'return' => 'label', + 'option_group_id' => 'priority', + ))); } -- 2.25.1