function loadPeople($data, &$errors = array(), &$warnings = array()) { $system = system::Instance(); $db = DB::Instance(); $flash = Flash::Instance(); if ($this->abort_action == 'A') { // Set encompassing transaction if need to abort all on error $db->StartTrans(); } $data_in = $this->convertData($data); if (is_array($data_in) && count($data_in) > 0) { foreach ($data_in as $line) { $model_data = array(); foreach ($line as $model => $fields) { switch ($model) { case 'Person': $model_data['Party']['type'] = $model; $model_data[$model] = $fields; $model_data[$model]['is_lead'] = empty($fields['accountnumber']) ? true : false; break; case 'PersonAddress': $model_data['Address'] = $fields; $values = false; foreach ($fields as $field => $value) { if (!empty($value)) { $values = true; break; } } if ($values) { $model_data['PartyAddress']['main'] = true; // Check for existing entry $address = new PersonAddress(); $address->loadBy(array('street1', 'street2', 'street3', 'town', 'county', 'postcode'), array($fields['street1'], $fields['street2'], $fields['street3'], $fields['town'], $fields['county'], $fields['postcode'])); if ($address->isLoaded()) { $model_data['PartyAddress']['address_id'] = $model_data['Address'][$address->idField] = $address->{$address->idField}; } } else { unset($model_data['Address']); } break; case 'ContactMethod': foreach ($fields as $type => $value) { if (!empty($value)) { $model_data[$type]['ContactMethod']['contact'] = $value; $model_data[$type]['PartyContactMethod']['main'] = true; switch ($type) { case 'phone': $model_data[$type]['PartyContactMethod']['type'] = 'T'; break; case 'email': $model_data[$type]['PartyContactMethod']['type'] = 'E'; break; case 'fax': $model_data[$type]['PartyContactMethod']['type'] = 'F'; break; case 'mobile': $model_data[$type]['PartyContactMethod']['type'] = 'M'; break; default: $model_data[$type]['PartyContactMethod']['type'] = ''; } // Check for existing entry $contactmethod = new ContactMethod(); $contactmethod->loadBy('contact', $value); if ($contactmethod->isLoaded()) { $model_data[$type]['PartyContactMethod']['contactmethod_id'] = $model_data[$type]['ContactMethod'][$contactmethod->idField] = $contactmethod->{$contactmethod->idField}; } } } break; } } if (!$system->controller->save_model('Person', $model_data, $errors, $warnings, $this->duplicates_action)) { if ($this->abort_action != 'S') { // Abort on Error if ($this->abort_action == 'A') { // Rollback all imported records $db->FailTrans(); $db->CompleteTrans(); } // If not abort_all_on_error, // then imported records up to this point will be saved return false; } // Skip error record and continue, so reset errors array $warnings[] = 'Ignored'; $warnings = array_merge($warnings, $errors); $errors = array(); $flash->clear(); } $system->controller->clearSavedModels(); } } if ($this->abort_action == 'A') { // Everything is OK here, just need to complete transaction // if mode is set to abort all on error $db->CompleteTrans(); } return array('internal_id' => null, 'internal_identifier_field' => '', 'internal_identifier_value' => ''); }