throw new \Civi\API\Exception\UnauthorizedException('Permission denied to modify contact record');
}
- $dupeCheck = CRM_Utils_Array::value('dupe_check', $params, FALSE);
- $values = _civicrm_api3_contact_check_params($params, $dupeCheck);
+ if (!empty($params['dupe_check'])) {
+ $ids = CRM_Contact_BAO_Contact::getDuplicateContacts($params, $params['contact_type'], 'Unsupervised', array(), $params['check_permission']);
+ if (count($ids) > 0) {
+ throw new API_Exception("Found matching contacts: " . implode(',', $ids), "duplicate", array("ids" => $ids));
+ }
+ }
+
+ $values = _civicrm_api3_contact_check_params($params);
if ($values) {
return $values;
}
_civicrm_api3_object_to_array_unique_fields($contact, $values[$contact->id]);
}
+ $values = _civicrm_api3_contact_formatResult($params, $values);
+
return civicrm_api3_create_success($values, $params, 'Contact', 'create');
}
$options = array();
_civicrm_api3_contact_get_supportanomalies($params, $options);
$contacts = _civicrm_api3_get_using_query_object('Contact', $params, $options);
+ $contacts = _civicrm_api3_contact_formatResult($params, $contacts);
return civicrm_api3_create_success($contacts, $params, 'Contact');
}
+/**
+ * Filter the result.
+ *
+ * @param array $result
+ *
+ * @return array
+ * @throws \CRM_Core_Exception
+ */
+function _civicrm_api3_contact_formatResult($params, $result) {
+ $apiKeyPerms = array('edit api keys', 'administer CiviCRM');
+ $allowApiKey = empty($params['check_permissions']) || CRM_Core_Permission::check(array($apiKeyPerms));
+ if (!$allowApiKey) {
+ if (is_array($result)) {
+ // Single-value $result
+ if (isset($result['api_key'])) {
+ unset($result['api_key']);
+ }
+
+ // Multi-value $result
+ foreach ($result as $key => $row) {
+ if (is_array($row)) {
+ unset($result[$key]['api_key']);
+ }
+ }
+ }
+ }
+ return $result;
+}
+
/**
* Get number of contacts matching the supplied criteria.
*
'title' => 'Primary Address Supplemental Address 2',
'type' => CRM_Utils_Type::T_STRING,
);
+ $params['supplemental_address_3'] = array(
+ 'title' => 'Primary Address Supplemental Address 3',
+ 'type' => CRM_Utils_Type::T_STRING,
+ );
$params['current_employer'] = array(
'title' => 'Current Employer',
'type' => CRM_Utils_Type::T_STRING,
* This function is on it's way out.
*
* @param array $params
- * @param bool $dupeCheck
*
* @return null
* @throws API_Exception
* @throws CiviCRM_API3_Exception
*/
-function _civicrm_api3_contact_check_params(&$params, $dupeCheck) {
+function _civicrm_api3_contact_check_params(&$params) {
switch (strtolower(CRM_Utils_Array::value('contact_type', $params))) {
case 'household':
}
}
- if ($dupeCheck) {
- // check for record already existing
- $dedupeParams = CRM_Dedupe_Finder::formatParams($params, $params['contact_type']);
-
- // CRM-6431
- // setting 'check_permission' here means that the dedupe checking will be carried out even if the
- // person does not have permission to carry out de-dupes
- // this is similar to the front end form
- if (isset($params['check_permission'])) {
- $dedupeParams['check_permission'] = $params['check_permission'];
- }
-
- $ids = CRM_Dedupe_Finder::dupesByParams($dedupeParams, $params['contact_type'], 'Unsupervised', array());
-
- if (count($ids) > 0) {
- throw new API_Exception("Found matching contacts: " . implode(',', $ids), "duplicate", array("ids" => $ids));
- }
- }
-
// The BAO no longer supports the legacy param "current_employer" so here is a shim for api backward-compatability
if (!empty($params['current_employer'])) {
$organizationParams = array(
'organization_name' => $params['current_employer'],
);
- $dedupParams = CRM_Dedupe_Finder::formatParams($organizationParams, 'Organization');
-
- $dedupParams['check_permission'] = FALSE;
- $dupeIds = CRM_Dedupe_Finder::dupesByParams($dedupParams, 'Organization', 'Supervised');
+ $dupeIds = CRM_Contact_BAO_Contact::getDuplicateContacts($organizationParams, 'Organization', 'Supervised', array(), FALSE);
// check for mismatch employer name and id
if (!empty($params['employer_id']) && !in_array($params['employer_id'], $dupeIds)) {
* -int main_id: main contact id with whom merge has to happen
* -int other_id: duplicate contact which would be deleted after merge operation
* -string mode: "safe" skips the merge if there are no conflicts. Does a force merge otherwise.
- * -boolean auto_flip: whether to let api decide which contact to retain and which to delete.
*
* @return array
* API Result Array
- * @throws CiviCRM_API3_Exception
+ * @throws API_Exception
*/
function civicrm_api3_contact_merge($params) {
if (($result = CRM_Dedupe_Merger::merge(array(
), array(), $params['mode'])) != FALSE) {
return civicrm_api3_create_success($result, $params);
}
- throw new CiviCRM_API3_Exception('Merge failed');
+ throw new API_Exception('Merge failed');
}
/**
// Contact api doesn't support array(LIKE => 'foo') syntax
if (!empty($request['input'])) {
$request['params'][$request['search_field']] = $request['input'];
+ // Temporarily override wildcard setting
+ if (Civi::settings()->get('includeWildCardInName') != $request['add_wildcard']) {
+ Civi::$statics['civicrm_api3_contact_getlist']['override_wildcard'] = !$request['add_wildcard'];
+ Civi::settings()->set('includeWildCardInName', $request['add_wildcard']);
+ }
}
}
$output[] = $data;
}
}
+ // Restore wildcard override by _civicrm_api3_contact_getlist_params
+ if (isset(Civi::$statics['civicrm_api3_contact_getlist']['override_wildcard'])) {
+ Civi::settings()->set('includeWildCardInName', Civi::$statics['civicrm_api3_contact_getlist']['override_wildcard']);
+ unset(Civi::$statics['civicrm_api3_contact_getlist']['override_wildcard']);
+ }
return $output;
}
* API formatted array
*/
function civicrm_api3_contact_duplicatecheck($params) {
- $dedupeParams = CRM_Dedupe_Finder::formatParams($params['match'], $params['match']['contact_type']);
-
- // CRM-6431
- // setting 'check_permission' here means that the dedupe checking will be carried out even if the
- // person does not have permission to carry out de-dupes
- // this is similar to the front end form
- if (isset($params['check_permission'])) {
- $dedupeParams['check_permission'] = $params['check_permission'];
- }
-
- $dupes = CRM_Dedupe_Finder::dupesByParams($dedupeParams, $params['match']['contact_type'], 'Unsupervised', array(), CRM_Utils_Array::value('dedupe_rule_id', $params));
+ $dupes = CRM_Contact_BAO_Contact::getDuplicateContacts(
+ $params['match'],
+ $params['match']['contact_type'],
+ 'Unsupervised',
+ array(),
+ CRM_Utils_Array::value('check_permissions', $params),
+ CRM_Utils_Array::value('dedupe_rule_id', $params)
+ );
$values = empty($dupes) ? array() : array_fill_keys($dupes, array());
return civicrm_api3_create_success($values, $params, 'Contact', 'duplicatecheck');
}