in app/Services/VCard/ImportVCard.php [736:783]
private function importAddress(Contact $contact, VCard $entry): void
{
if (! $entry->ADR) {
return;
}
$addresses = $contact->addresses()
->get()
->sortBy('id');
foreach ($entry->ADR as $adr) {
$parts = $adr->getParts();
$addressContent = [
'account_id' => $contact->account_id,
'contact_id' => $contact->id,
'street' => $this->formatValue(Arr::get($parts, '2')),
'city' => $this->formatValue(Arr::get($parts, '3')),
'province' => $this->formatValue(Arr::get($parts, '4')),
'postal_code' => $this->formatValue(Arr::get($parts, '5')),
'country' => CountriesHelper::find(Arr::get($parts, '6')),
'labels' => preg_split('/,/', (string) $adr['TYPE']),
];
// We assume addresses are in the same order
$address = $addresses->shift();
if (is_null($address)) {
// Address does not exist
app(CreateAddress::class)->execute($addressContent);
} else {
// Address has to be updated
$address = app(UpdateAddress::class)->execute([
'address_id' => $address->id,
'name' => $address->name,
] +
$addressContent
);
}
}
foreach ($addresses as $address) {
// Remaining addresses have to be removed
app(DestroyAddress::class)->execute([
'account_id' => $contact->account_id,
'address_id' => $address->id,
]);
}
}