* 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
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) {
/**
* 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)) {
'main_id' => $mainId,
'other_id' => $otherId,
];
- $deletedContacts[] = $otherId;
}
else {
$resultStats['skipped'][] = [
else {
CRM_Core_BAO_PrevNextCache::deletePair($mainId, $otherId, $cacheKeyString);
}
+ return $resultStats;
}
/**