X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FDedupe%2FFinder.php;h=25fd1adbeaaadec3664f596896f31c51ce26dd5b;hb=910214fb9ee196f15f49ca259af959f06990baf6;hp=8d5e4462c47b27d5069020eeb34f6d9b593a1f2d;hpb=4e74399f10f2aec0901675388388ce2e50786186;p=civicrm-core.git diff --git a/CRM/Dedupe/Finder.php b/CRM/Dedupe/Finder.php index 8d5e4462c4..25fd1adbea 100644 --- a/CRM/Dedupe/Finder.php +++ b/CRM/Dedupe/Finder.php @@ -1,34 +1,18 @@ 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 +83,7 @@ class CRM_Dedupe_Finder { * * @return array * matching contact ids + * @throws \CRM_Core_Exception */ public static function dupesByParams( $params, @@ -144,7 +115,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 +152,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 +173,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 +253,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 +279,7 @@ class CRM_Dedupe_Finder { } } } - if ($table == 'civicrm_phone') { + if ($table === 'civicrm_phone') { $fixes = [ 'phone' => 'phone_numeric', ]; @@ -339,8 +313,6 @@ class CRM_Dedupe_Finder { * -dstName * -weight * -canMerge - * - * @throws CRM_Core_Exception */ public static function parseAndStoreDupePairs($foundDupes, $cacheKeyString) { $cids = [];