/**
  * 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;
     }
 }
Exemplo n.º 2
0
 /**
  * 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'];
 }