private function importAddress()

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,
            ]);
        }
    }