/** * handle the values in import mode * * @param int $onDuplicate the code for what action to take on duplicates * @param array $values the array of values belonging to this line * * @return boolean the result of this processing * @access public */ function import($onDuplicate, &$values) { // first make sure this is a valid line $response = $this->summary($values); if ($response != CRM_HISTORY_IMPORT_PARSER_VALID) { return $response; } $params =& $this->getActiveFieldParams(); //for date-Formats $session =& CRM_Core_Session::singleton(); $dateType = $session->get("dateTypes"); foreach ($params as $key => $val) { if ($key == 'activity_date') { if ($val) { if ($dateType == 1) { $params[$key] = CRM_Utils_Date::customFormat($val, '%Y%m%d'); } else { CRM_Utils_Date::convertToDefaultDate($params, $dateType, $key); } } } } //date-Format part ends $formatted = array(); if ($GLOBALS['_CRM_HISTORY_IMPORT_PARSER_ACTIVITYHISTORY']['indieFields'] == null) { require_once 'CRM/Core/DAO/ActivityHistory.php'; $tempIndieFields =& CRM_Core_DAO_ActivityHistory::import(); $GLOBALS['_CRM_HISTORY_IMPORT_PARSER_ACTIVITYHISTORY']['indieFields'] = $tempIndieFields; } foreach ($params as $key => $field) { if ($field == null || $field === '') { continue; } $value = array($key => $field); _crm_add_formatted_history_param($value, $formatted); } if ($this->_contactIdIndex < 0) { if ($GLOBALS['_CRM_HISTORY_IMPORT_PARSER_ACTIVITYHISTORY']['cIndieFields'] == null) { require_once 'CRM/Contact/BAO/Contact.php'; $cTempIndieFields = CRM_Contact_BAO_Contact::importableFields('Individual', null); $GLOBALS['_CRM_HISTORY_IMPORT_PARSER_ACTIVITYHISTORY']['cIndieFields'] = $cTempIndieFields; } foreach ($params as $key => $field) { if ($field == null || $field === '') { continue; } if (is_array($field)) { foreach ($field as $value) { $break = false; if (is_array($value)) { foreach ($value as $name => $testForEmpty) { if ($name !== 'phone_type' && ($testForEmpty === '' || $testForEmpty == null)) { $break = true; break; } } } else { $break = true; } if (!$break) { _crm_add_formatted_param($value, $contactFormatted); } } continue; } $value = array($key => $field); if (array_key_exists($key, $GLOBALS['_CRM_HISTORY_IMPORT_PARSER_ACTIVITYHISTORY']['cIndieFields'])) { if (substr($key, 0, 6) != 'custom') { $value['contact_type'] = 'Individual'; } } _crm_add_formatted_param($value, $contactFormatted); } $contactFormatted['contact_type'] = 'Individual'; $error = _crm_duplicate_formatted_contact($contactFormatted); if (CRM_History_Import_Parser_ActivityHistory::isDuplicate($error)) { $matchedIDs = explode(',', $error->_errors[0]['params'][0]); if (count($matchedIDs) > 1) { array_unshift($values, "Multiple matching contact records detected for this row. The activity history was not imported"); return CRM_HISTORY_IMPORT_PARSER_ERROR; } else { $cid = $matchedIDs[0]; $formatted['entity_id'] = $cid; $formatted['entity_table'] = 'civicrm_contact'; $newHistory = crm_create_activity_history($formatted); if (is_a($newHistory, CRM_Core_Error)) { array_unshift($values, $newHistory->_errors[0]['message']); return CRM_HISTORY_IMPORT_PARSER_ERROR; } $this->_newHistory[] = $newHistory->id; return CRM_HISTORY_IMPORT_PARSER_VALID; } } else { require_once 'CRM/Core/DAO/DupeMatch.php'; $dao =& new CRM_Core_DAO_DupeMatch(); $dao->find(true); $fieldsArray = explode('AND', $dao->rule); foreach ($fieldsArray as $value) { if (array_key_exists(trim($value), $params)) { $paramValue = $params[trim($value)]; if (is_array($paramValue)) { $disp .= $params[trim($value)][0][trim($value)] . " "; } else { $disp .= $params[trim($value)] . " "; } } } array_unshift($values, "No matching Contact found for (" . $disp . ")"); return CRM_HISTORY_IMPORT_PARSER_ERROR; } } else { $formatted['entity_table'] = 'civicrm_contact'; $newHistory = crm_create_activity_history($formatted); if (is_a($newHistory, CRM_Core_Error)) { array_unshift($values, $newHistory->_errors[0]['message']); return CRM_HISTORY_IMPORT_PARSER_ERROR; } $this->_newHistory[] = $newHistory->id; return CRM_HISTORY_IMPORT_PARSER_VALID; } }
/** * combine all the importable fields from the lower levels object * * The ordering is important, since currently we do not have a weight * scheme. Adding weight is super important and should be done in the * next week or so, before this can be called complete. * * @param NULL * * @return array array of importable Fields * @access public */ function &importableFields() { if (!$GLOBALS['_CRM_CORE_BAO_HISTORY']['_importableFields']) { if (!$GLOBALS['_CRM_CORE_BAO_HISTORY']['_importableFields']) { $GLOBALS['_CRM_CORE_BAO_HISTORY']['_importableFields'] = array(); } if (!$status) { $fields = array('' => array('title' => ts('- do not import -'))); } else { $fields = array('' => array('title' => ts('- Contribution Fields -'))); } require_once 'CRM/Core/DAO/ActivityHistory.php'; $tmpFields = CRM_Core_DAO_ActivityHistory::import(); $contactFields = CRM_Contact_BAO_Contact::importableFields('Individual', null); require_once 'CRM/Core/DAO/DupeMatch.php'; $dao =& new CRM_Core_DAO_DupeMatch(); $dao->find(true); $fieldsArray = explode('AND', $dao->rule); $tmpConatctField = array(); if (is_array($fieldsArray)) { foreach ($fieldsArray as $value) { $tmpConatctField[trim($value)] = $contactFields[trim($value)]; $tmpConatctField[trim($value)]['title'] = $tmpConatctField[trim($value)]['title'] . " (match to contact)"; } } $fields = array_merge($fields, $tmpConatctField); $fields = array_merge($fields, $tmpFields); $fields = array_merge($fields, CRM_Core_BAO_CustomField::getFieldsForImport('Activities')); $GLOBALS['_CRM_CORE_BAO_HISTORY']['_importableFields'] = $fields; } return $GLOBALS['_CRM_CORE_BAO_HISTORY']['_importableFields']; }