* take the input parameter list as specified in the data model and
* convert it into the same format that we use in QF and BAO object
*
- * @param array $params Associative array of property name/value
+ * @param array $params Associative array of property name/value
* pairs to insert in new contact.
- * @param array $values The reformatted properties that we can use internally
+ * @param array $values The reformatted properties that we can use internally
*
- * @param array $create Is the formatted Values array going to
+ * @param array|bool $create Is the formatted Values array going to
* be used for CRM_vent_BAO_Participant:create()
*
* @return array|CRM_Error
* take the input parameter list as specified in the data model and
* convert it into the same format that we use in QF and BAO object
*
- * @param array $params Associative array of property name/value
+ * @param array $params Associative array of property name/value
* pairs to insert in new contact.
- * @param array $values The reformatted properties that we can use internally
+ * @param array $values The reformatted properties that we can use internally
* '
*
+ * @param bool $create
+ * @param null $onDuplicate
+ *
* @return array|CRM_Error
* @access public
*/
}
}
}
- elseif ($params['contribution_id'] || $params['trxn_id'] || $params['invoice_id']) {
+ elseif (!empty($params['contribution_id']) || !empty($params['trxn_id']) || !empty($params['invoice_id'])) {
//when update mode check contribution id or trxn id or
//invoice id
$contactId = new CRM_Contribute_DAO_Contribution();
- if ($params['contribution_id']) {
+ if (!empty($params['contribution_id'])) {
$contactId->id = $params['contribution_id'];
}
- elseif ($params['trxn_id']) {
+ elseif (!empty($params['trxn_id'])) {
$contactId->trxn_id = $params['trxn_id'];
}
- elseif ($params['invoice_id']) {
+ elseif (!empty($params['invoice_id'])) {
$contactId->invoice_id = $params['invoice_id'];
}
if ($contactId->find(TRUE)) {
}
}
}
+ else {
+ if ($onDuplicate == CRM_Import_Parser::DUPLICATE_UPDATE) {
+ return civicrm_api3_create_error("Empty Contribution and Invoice and Transaction ID. Row was skipped.");
+ }
+ else {
+ return civicrm_api3_create_error("Empty Contact and External ID. Row was skipped.");
+ }
+ }
break;
case 'receive_date':
case 'soft_credit':
//import contribution record according to select contact type
// validate contact id and external identifier.
- $value[$key] = '';
- if (!isset($params['contribution_id']) && empty($params['contribution_id']) && $onDuplicate == CRM_Import_Parser::DUPLICATE_UPDATE) {
- $errorMsg = ts("Empty Contribution Id. Row was skipped.");
- return civicrm_api3_create_error($errorMsg, $value[$key]);
- }
- elseif (!isset($params['contribution_contact_id']) && empty($params['contribution_contact_id']) && $onDuplicate != CRM_Import_Parser::DUPLICATE_UPDATE) {
- $errorMsg = ts("Empty Contact Id. Row was skipped.");
- return civicrm_api3_create_error($errorMsg, $value[$key]);
- }
+ $value[$key] = $mismatchContactType = $softCreditContactIds = '';
if (isset($params[$key]) && is_array($params[$key])) {
foreach ($params[$key] as $softKey => $softParam) {
$contactId = CRM_Utils_Array::value('contact_id', $softParam);
$externalId = CRM_Utils_Array::value('external_identifier', $softParam);
- if (isset($softParam['contact_id']) && !empty($softParam['contact_id'])) {
- $softCreditContactIds = implode(', ', array_map(function ($entry) {
- return $entry['contact_id'];
- }, $params[$key]));
- }
- else {
- $softCreditContactIds='';
- }
+ $email = CRM_Utils_Array::value('email', $softParam);
if ($contactId || $externalId) {
require_once 'CRM/Contact/DAO/Contact.php';
$contact = new CRM_Contact_DAO_Contact();
$contact->id = $contactId;
$contact->external_identifier = $externalId;
-
$errorMsg = NULL;
if (!$contact->find(TRUE)) {
- $errorMsg = (isset($softCreditContactIds) && $softCreditContactIds) ? ts("Invalid ContactId ($softCreditContactIds) specified for Soft Credit contact data. Row was skipped.") : ts("Empty ContactId specified for Soft Credit contact data. Row was skipped.");
+ $field = $contactId ? ts('Contact ID') : ts('External ID');
+ $errorMsg = ts("Soft Credit %1 - %2 doesn't exist. Row was skipped.",
+ array(1 => $field, 2 => $contactId ? $contactId : $externalId));
}
if ($errorMsg) {
$values[$key][$softKey] = $softParam;
$values[$key][$softKey]['contact_id'] = $contact->id;
}
- else {
+ elseif ($email) {
+ if (!CRM_Utils_Rule::email($email)) {
+ return civicrm_api3_create_error("Invalid email address $email provided for Soft Credit. Row was skipped");
+ }
+
// get the contact id from duplicate contact rule, if more than one contact is returned
// we should return error, since current interface allows only one-one mapping
- $softParams = $params['soft_credit'];
- $softParams['contact_type'] = $params['contact_type'];
-
- $error = _civicrm_api3_deprecated_duplicate_formatted_contact($softParams);
-
- if (isset($error['error_message']['params'][0])) {
- $matchedIDs = explode(',', $error['error_message']['params'][0]);
-
- // check if only one contact is found
- if (count($matchedIDs) > 1) {
- return civicrm_api3_create_error($error['error_message']['message'], $value[$key]);
- }
- else {
- $values['soft_credit'] = $matchedIDs[0];
- }
+ $emailParams = array('email' => $email, 'contact_type' => $params['contact_type']);
+ $checkDedupe = _civicrm_api3_deprecated_duplicate_formatted_contact($emailParams);
+ if (!$checkDedupe['is_error']) {
+ return civicrm_api3_create_error("Invalid email address(doesn't exist) $email for Soft Credit. Row was skipped");
}
else {
- $errorMsg = (isset($softCreditContactIds) && $softCreditContactIds) ? ts("Invalid ContactId ($softCreditContactIds) specified for Soft Credit contact data. Row was skipped.") : ts("Empty ContactId specified for Soft Credit contact data. Row was skipped.");
- return civicrm_api3_create_error($errorMsg, $value[$key]);
+ $matchingContactIds = explode(',', $checkDedupe['error_message']['params'][0]);
+ if (count($matchingContactIds) > 1) {
+ return civicrm_api3_create_error("Invalid email address(duplicate) $email for Soft Credit. Row was skipped");
+ }
+ elseif (count($matchingContactIds) == 1) {
+ $contactId = $matchingContactIds[0];
+ unset($softParam['email']);
+ $values[$key][$softKey] = $softParam + array('contact_id' => $contactId);
+ }
}
}
}
- }
- break;
+ }
+ break;
case 'pledge_payment':
case 'pledge_id':
* take the input parameter list as specified in the data model and
* convert it into the same format that we use in QF and BAO object
*
- * @param array $params Associative array of property name/value
+ * @param array $params Associative array of property name/value
* pairs to insert in new contact.
- * @param array $values The reformatted properties that we can use internally
+ * @param array $values The reformatted properties that we can use internally
*
- * @param array $create Is the formatted Values array going to
+ * @param array|bool $create Is the formatted Values array going to
* be used for CRM_Activity_BAO_Activity::create()
*
* @return array|CRM_Error
*
* @param <type> $params
*
- * @return <type>
+ * @return array <type>
*/
function _civicrm_api3_deprecated_duplicate_formatted_contact($params) {
$id = CRM_Utils_Array::value('id', $params);
$valid = CRM_Core_BAO_CustomValue::typecheck(CRM_Utils_Array::value('type', $value),
CRM_Utils_Array::value('value', $value)
);
- if (!$valid) {
+ if (!$valid && $value['is_required']) {
return civicrm_api3_create_error('Invalid value for custom field \'' .
CRM_Utils_Array::value('name', $custom) . '\''
);
}
-
/**
* @deprecated - this is part of the import parser not the API & needs to be moved on out
*
- * @param <type> $params
- * @param <type> $onDuplicate
+ * @param $params
+ * @param $onDuplicate
*
- * @return <type>
+ * @internal param $ <type> $params
+ * @internal param $ <type> $onDuplicate
+ *
+ * @return array|bool <type>
*/
function _civicrm_api3_deprecated_create_participant_formatted($params, $onDuplicate) {
require_once 'CRM/Event/Import/Parser.php';
*
* @param <type> $params
*
- * @return <type>
+ * @param bool $checkDuplicate
+ *
+ * @return array|bool <type>
*/
function _civicrm_api3_deprecated_participant_check_params($params, $checkDuplicate = FALSE) {
}
}
+/**
+ * @param $params
+ * @param bool $dupeCheck
+ * @param bool $dupeErrorArray
+ * @param bool $requiredCheck
+ * @param null $dedupeRuleGroupID
+ *
+ * @return array|null
+ */
function _civicrm_api3_deprecated_contact_check_params(
&$params,
$dupeCheck = TRUE,
/**
*
- * @param <type> $result
- * @param <type> $activityTypeID
+ * @param $result
+ * @param $activityTypeID
+ *
+ * @internal param $ <type> $result
+ * @internal param $ <type> $activityTypeID
*
- * @return <type> $params
+ * @return array <type> $params
*/
function _civicrm_api3_deprecated_activity_buildmailparams($result, $activityTypeID) {
// get ready for collecting data about activity to be created