diff --git a/CRM/Dedupe/Merger.php b/CRM/Dedupe/Merger.php index c5079be6cd60..588a0ab778df 100644 --- a/CRM/Dedupe/Merger.php +++ b/CRM/Dedupe/Merger.php @@ -586,7 +586,7 @@ public static function retrieveFields($main, $other) { * A 'safe' value skips the merge if there are any un-resolved conflicts. * Does a force merge otherwise. * @param bool $autoFlip to let api decide which contact to retain and which to delete. - * Wether to let api decide which contact to retain and which to delete. + * Whether to let api decide which contact to retain and which to delete. * @param int $batchLimit number of merges to carry out in one batch. * @param int $isSelected if records with is_selected column needs to be processed. * diff --git a/api/v3/Job.php b/api/v3/Job.php index 306f6de0aaeb..33605856c270 100644 --- a/api/v3/Job.php +++ b/api/v3/Job.php @@ -474,22 +474,25 @@ function civicrm_api3_job_process_respondent($params) { * * @return array * API Result Array + * @throws \CiviCRM_API3_Exception */ function civicrm_api3_job_process_batch_merge($params) { - $rgid = CRM_Utils_Array::value('rgid', $params); + $rule_group_id = CRM_Utils_Array::value('rgid', $params); + if (!$rule_group_id) { + $rule_group_id = civicrm_api3('RuleGroup', 'getvalue', array( + 'contact_type' => 'Individual', + 'used' => 'Unsupervised', + 'return' => 'id', + )); + } $gid = CRM_Utils_Array::value('gid', $params); $mode = CRM_Utils_Array::value('mode', $params, 'safe'); $autoFlip = CRM_Utils_Array::value('auto_flip', $params, TRUE); - $result = CRM_Dedupe_Merger::batchMerge($rgid, $gid, $mode, $autoFlip); + $result = CRM_Dedupe_Merger::batchMerge($rule_group_id, $gid, $mode, $autoFlip); - if ($result['is_error'] == 0) { - return civicrm_api3_create_success(); - } - else { - return civicrm_api3_create_error($result['messages']); - } + return civicrm_api3_create_success($result, $params); } /** @@ -499,7 +502,7 @@ function civicrm_api3_job_process_batch_merge($params) { */ function _civicrm_api3_job_process_batch_merge_spec(&$params) { $params['rgid'] = array( - 'title' => 'rule group id', + 'title' => 'Dedupe rule group id, defaults to Contact Unsupervised rule', 'type' => CRM_Utils_Type::T_INT, ); $params['gid'] = array( diff --git a/api/v3/RuleGroup.php b/api/v3/RuleGroup.php new file mode 100644 index 000000000000..bbd4ff05bbd6 --- /dev/null +++ b/api/v3/RuleGroup.php @@ -0,0 +1,83 @@ + 'Semi-formal explanation of runtime job parameters', 'is_active' => 1, ); - $result = $this->callAPIFailure('job', 'create', $params); + $this->callAPIFailure('job', 'create', $params); } /** @@ -296,6 +296,13 @@ public function testCallDisableExpiredRelationships() { $this->contactDelete($orgID); } + /** + * Test the batch merge function. + */ + public function testBatchMerge() { + $this->callAPISuccess('Job', 'process_batch_merge', array()); + } + /** * @param $op * @param string $objectName