X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FDedupe%2FFinder.php;h=63725439a91682537e8bbe6a607bcfffb67bbb2c;hb=1a90ac89b2105a58fce3b815eb4870114be643ad;hp=7b6c936e72dfedcd603ca3912055beecdb0f8755;hpb=d6c79fecdf83fb0ee72271aa678e35ddf7a236b2;p=civicrm-core.git diff --git a/CRM/Dedupe/Finder.php b/CRM/Dedupe/Finder.php index 7b6c936e72..63725439a9 100644 --- a/CRM/Dedupe/Finder.php +++ b/CRM/Dedupe/Finder.php @@ -51,31 +51,17 @@ class CRM_Dedupe_Finder { * @param bool $checkPermissions * Respect logged in user permissions. * - * @param int $searchLimit - * Limit for the number of contacts to be used for comparison. - * The search methodology finds all matches for the searchedContacts so this limits - * the number of searched contacts, not the matches found. - * * @return array * Array of (cid1, cid2, weight) dupe triples * - * @throws CiviCRM_API3_Exception * @throws Exception */ - public static function dupes($rgid, $cids = [], $checkPermissions = TRUE, $searchLimit = 0) { + public static function dupes($rgid, $cids = [], $checkPermissions = TRUE) { $rgBao = new CRM_Dedupe_BAO_RuleGroup(); $rgBao->id = $rgid; $rgBao->contactIds = $cids; if (!$rgBao->find(TRUE)) { - CRM_Core_Error::fatal("Dedupe rule not found for selected contacts"); - } - if (empty($rgBao->contactIds) && !empty($searchLimit)) { - $limitedContacts = civicrm_api3('Contact', 'get', [ - 'return' => 'id', - 'contact_type' => $rgBao->contact_type, - 'options' => ['limit' => $searchLimit], - ]); - $rgBao->contactIds = array_keys($limitedContacts['values']); + throw new CRM_Core_Exception('Dedupe rule not found for selected contacts'); } $rgBao->fillTable(); @@ -113,6 +99,7 @@ class CRM_Dedupe_Finder { * * @return array * matching contact ids + * @throws \CRM_Core_Exception */ public static function dupesByParams( $params, @@ -144,7 +131,7 @@ class CRM_Dedupe_Finder { $rgBao->contact_type = $ctype; $rgBao->used = $used; if (!$rgBao->find(TRUE)) { - CRM_Core_Error::fatal("$used rule for $ctype does not exist"); + throw new CRM_Core_Exception("$used rule for $ctype does not exist"); } } @@ -181,6 +168,7 @@ class CRM_Dedupe_Finder { * * @return array * array of (cid1, cid2, weight) dupe triples + * @throws \CiviCRM_API3_Exception */ public static function dupesInGroup($rgid, $gid, $searchLimit = 0) { $cids = array_keys(CRM_Contact_BAO_Group::getMember($gid, TRUE, $searchLimit)); @@ -201,6 +189,7 @@ class CRM_Dedupe_Finder { * * @return array * valid $params array for dedupe + * @throws \CRM_Core_Exception */ public static function formatParams($fields, $ctype) { $flat = []; @@ -280,7 +269,8 @@ class CRM_Dedupe_Finder { $matches = []; if (preg_match('/(.*)-(Primary-[\d+])$|(.*)-(\d+|Primary)$/', $key, $matches)) { $return = array_values(array_filter($matches)); - $flat[$return[1]] = $value; + // make sure the first occurrence is kept, not the last + $flat[$return[1]] = empty($flat[$return[1]]) ? $value : $flat[$return[1]]; unset($flat[$key]); } } @@ -305,7 +295,7 @@ class CRM_Dedupe_Finder { } } } - if ($table == 'civicrm_phone') { + if ($table === 'civicrm_phone') { $fixes = [ 'phone' => 'phone_numeric', ]; @@ -339,8 +329,6 @@ class CRM_Dedupe_Finder { * -dstName * -weight * -canMerge - * - * @throws CRM_Core_Exception */ public static function parseAndStoreDupePairs($foundDupes, $cacheKeyString) { $cids = []; @@ -376,9 +364,8 @@ class CRM_Dedupe_Finder { ]; $data = CRM_Core_DAO::escapeString(serialize($row)); - $values[] = " ( 'civicrm_contact', $dstID, $srcID, '$cacheKeyString', '$data' ) "; + CRM_Core_BAO_PrevNextCache::setItem('civicrm_contact', $dstID, $srcID, $cacheKeyString, $data); } - CRM_Core_BAO_PrevNextCache::setItem($values); return $mainContacts; }