* @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();
*
* @return array
* matching contact ids
+ * @throws \CRM_Core_Exception
*/
public static function dupesByParams(
$params,
$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");
}
}
*
* @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));
*
* @return array
* valid $params array for dedupe
+ * @throws \CRM_Core_Exception
*/
public static function formatParams($fields, $ctype) {
$flat = [];
$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]);
}
}
}
}
}
- if ($table == 'civicrm_phone') {
+ if ($table === 'civicrm_phone') {
$fixes = [
'phone' => 'phone_numeric',
];
* @param array $foundDupes
* @param string $cacheKeyString
*
- * @return array Dupe pairs with the keys
+ * @return array
* Dupe pairs with the keys
* -srcID
* -srcName
* -dstName
* -weight
* -canMerge
- *
- * @throws CRM_Core_Exception
*/
public static function parseAndStoreDupePairs($foundDupes, $cacheKeyString) {
$cids = [];
];
$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;
}