Skip to content

Commit

Permalink
Merge pull request #15184 from eileenmcnaughton/dedupe9
Browse files Browse the repository at this point in the history
dev/core#1230 [Ref] Rationalise dedupe code loop.
  • Loading branch information
eileenmcnaughton authored Oct 16, 2019
2 parents 1d13789 + b068bfd commit 4cef1bb
Showing 1 changed file with 27 additions and 16 deletions.
43 changes: 27 additions & 16 deletions CRM/Dedupe/Merger.php
Original file line number Diff line number Diff line change
Expand Up @@ -866,6 +866,10 @@ public static function getMergeStatsMsg($stats) {
* Respect logged in user permissions.
*
* @return array|bool
*
* @throws \API_Exception
* @throws \CRM_Core_Exception
* @throws \CiviCRM_API3_Exception
*/
public static function merge($dupePairs = [], $cacheParams = [], $mode = 'safe',
$redirectForPerformance = FALSE, $checkPermissions = TRUE
Expand All @@ -883,16 +887,17 @@ public static function merge($dupePairs = [], $cacheParams = [], $mode = 'safe',
unset($dupePairs[$index]);
continue;
}
CRM_Utils_Hook::merge('flip', $dupes, $dupes['dstID'], $dupes['srcID']);
$mainId = $dupes['dstID'];
$otherId = $dupes['srcID'];

if (!$mainId || !$otherId) {
// return error
return FALSE;
if (($result = self::dedupePair($dupes, $mode, $checkPermissions, $cacheKeyString)) === FALSE) {
unset($dupePairs[$index]);
continue;
}
if (!empty($result['merged'])) {
$deletedContacts[] = $result['merged'][0]['other_id'];
$resultStats['merged'][] = ($result['merged'][0]);
}
else {
$resultStats['skipped'][] = ($result['skipped'][0]);
}

self::dedupePair($resultStats, $deletedContacts, $mode, $checkPermissions, $mainId, $otherId, $cacheKeyString);
}

if ($cacheKeyString && !$redirectForPerformance) {
Expand Down Expand Up @@ -2111,20 +2116,26 @@ public static function mergeLocations($mainId, $otherId, $migrationInfo) {
/**
* Dedupe a pair of contacts.
*
* @param array $resultStats
* @param array $deletedContacts
* @param array $dupes
* @param string $mode
* @param bool $checkPermissions
* @param int $mainId
* @param int $otherId
* @param string $cacheKeyString
*
* @return bool|array
* @throws \CRM_Core_Exception
* @throws \CiviCRM_API3_Exception
* @throws \API_Exception
*/
protected static function dedupePair(&$resultStats, &$deletedContacts, $mode, $checkPermissions, $mainId, $otherId, $cacheKeyString) {

protected static function dedupePair($dupes, $mode = 'safe', $checkPermissions = TRUE, $cacheKeyString = NULL) {
CRM_Utils_Hook::merge('flip', $dupes, $dupes['dstID'], $dupes['srcID']);
$mainId = $dupes['dstID'];
$otherId = $dupes['srcID'];
$resultStats = [];

if (!$mainId || !$otherId) {
// return error
return FALSE;
}
$migrationInfo = [];
$conflicts = [];
if (!CRM_Dedupe_Merger::skipMerge($mainId, $otherId, $migrationInfo, $mode, $conflicts)) {
Expand All @@ -2133,7 +2144,6 @@ protected static function dedupePair(&$resultStats, &$deletedContacts, $mode, $c
'main_id' => $mainId,
'other_id' => $otherId,
];
$deletedContacts[] = $otherId;
}
else {
$resultStats['skipped'][] = [
Expand All @@ -2149,6 +2159,7 @@ protected static function dedupePair(&$resultStats, &$deletedContacts, $mode, $c
else {
CRM_Core_BAO_PrevNextCache::deletePair($mainId, $otherId, $cacheKeyString);
}
return $resultStats;
}

/**
Expand Down

0 comments on commit 4cef1bb

Please sign in to comment.