* @param bool $checkPermissions
* Respect logged in user's 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 bool
* @throws \CRM_Core_Exception
* @throws \CiviCRM_API3_Exception
*/
- public static function refillCache($rgid, $gid, $cacheKeyString, $criteria, $checkPermissions) {
+ public static function refillCache($rgid, $gid, $cacheKeyString, $criteria, $checkPermissions, $searchLimit = 0) {
if (!$cacheKeyString && $rgid) {
$cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid, $criteria, $checkPermissions);
}
// 2. FILL cache
$foundDupes = array();
if ($rgid && $gid) {
- $foundDupes = CRM_Dedupe_Finder::dupesInGroup($rgid, $gid);
+ $foundDupes = CRM_Dedupe_Finder::dupesInGroup($rgid, $gid, $searchLimit);
}
elseif ($rgid) {
$contactIDs = array();
$contacts = civicrm_api3('Contact', 'get', array_merge(array('options' => array('limit' => 0), 'return' => 'id'), $criteria['contact']));
$contactIDs = array_keys($contacts['values']);
}
- $foundDupes = CRM_Dedupe_Finder::dupes($rgid, $contactIDs, $checkPermissions);
+ $foundDupes = CRM_Dedupe_Finder::dupes($rgid, $contactIDs, $checkPermissions, $searchLimit);
}
if (!empty($foundDupes)) {
* @param bool $checkPermissions
* Respect logged in user permissions.
*
- * @param int $limit
- * Optional limit. This limits the number of contacts for which the code will
- * attempt to find matches.
+ * @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 = array(), $checkPermissions = TRUE, $limit = NULL) {
+ public static function dupes($rgid, $cids = array(), $checkPermissions = TRUE, $searchLimit = 0) {
$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($limit)) {
+ if (empty($rgBao->contactIds) && !empty($searchLimit)) {
$limitedContacts = civicrm_api3('Contact', 'get', array(
'return' => 'id',
'contact_type' => $rgBao->contact_type,
- 'options' => array('limit' => $limit),
+ 'options' => array('limit' => $searchLimit),
));
$rgBao->contactIds = array_keys($limitedContacts['values']);
}
* @param int $gid
* Contact group id (currently, works only with non-smart groups).
*
- * @param int $limit
+ * @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
*/
- public static function dupesInGroup($rgid, $gid, $limit = NULL) {
- $cids = array_keys(CRM_Contact_BAO_Group::getMember($gid, $limit));
+ public static function dupesInGroup($rgid, $gid, $searchLimit = 0) {
+ $cids = array_keys(CRM_Contact_BAO_Group::getMember($gid, $searchLimit));
if (!empty($cids)) {
return self::dupes($rgid, $cids);
}
* @param bool $checkPermissions
* Respect logged in user permissions.
*
+ * @param int $searchLimit
+ * Limit to searching for matches against this many contacts.
+ *
* @return array
* Array of matches meeting the criteria.
*/
- public static function getDuplicatePairs($rule_group_id, $group_id, $reloadCacheIfEmpty, $batchLimit, $isSelected, $orderByClause = '', $includeConflicts = TRUE, $criteria = array(), $checkPermissions = TRUE) {
+ public static function getDuplicatePairs($rule_group_id, $group_id, $reloadCacheIfEmpty, $batchLimit, $isSelected, $orderByClause = '', $includeConflicts = TRUE, $criteria = array(), $checkPermissions = TRUE, $searchLimit = 0) {
$where = self::getWhereString($batchLimit, $isSelected);
$cacheKeyString = self::getMergeCacheKeyString($rule_group_id, $group_id, $criteria, $checkPermissions);
$join = self::getJoinOnDedupeTable();
// If we haven't found any dupes, probably cache is empty.
// Try filling cache and give another try. We don't need to specify include conflicts here are there will not be any
// until we have done some processing.
- CRM_Core_BAO_PrevNextCache::refillCache($rule_group_id, $group_id, $cacheKeyString, $criteria, $checkPermissions);
+ CRM_Core_BAO_PrevNextCache::refillCache($rule_group_id, $group_id, $cacheKeyString, $criteria, $checkPermissions, $searchLimit);
$dupePairs = CRM_Core_BAO_PrevNextCache::retrieve($cacheKeyString, $join, $where, 0, 0, array(), $orderByClause, $includeConflicts);
return $dupePairs;
}