<?php

$addr = array();
$addr['lastname'] = getIfSet($rec, 0);
$addr['firstname'] = getIfSet($rec, 1);
$addr['company'] = "";
// tbd at export
$date_parts = explode(".", getIfSet($rec, 2));
if (count($date_parts) == 3) {
    $addr['bday'] = ltrim($date_parts[0], "0");
    $addr['bmonth'] = MonthToName($date_parts[1]);
    $addr['byear'] = $date_parts[2];
}
$addr['address'] = getIfSet($rec, 3) . "\n" . getIfSet($rec, 4) . " " . getIfSet($rec, 5);
$addr['home'] = getIfSet($rec, 6);
$addr['mobile'] = getIfSet($rec, 7);
$addr['work'] = getIfSet($rec, 9);
$addr['fax'] = getIfSet($rec, 10);
$addr['email'] = getIfSet($rec, 8);
$addr['email2'] = getIfSet($rec, 11);
$addr['address2'] = str_replace(", ", "\n", getIfSet($rec, 12));
$addr['phone2'] = getIfSet($rec, 13);
 function __construct($file_lines)
 {
     //
     // Concat multi-line records (e.g.: photos)
     //
     $concated_lines = array();
     foreach ($file_lines as $file_line) {
         $file_line = str_replace("\n", "", $file_line);
         $file_line = str_replace("\r", "", $file_line);
         if (preg_match('/^  /', $file_line)) {
             $concated_lines[count($concated_lines) - 1] .= preg_replace('/^  /', '', $file_line);
         } else {
             $concated_lines[] = $file_line;
         }
     }
     $file_lines = $concated_lines;
     //
     // Split every line to semi-structured records
     //
     $addresses = array();
     foreach ($file_lines as $vcards_line) {
         // Parse and add a field to the addess.
         $res = self::parseLine($vcards_line);
         if (isset($res['pkey'])) {
             $address[$res['pkey']][] = $res['value'];
         }
         // Init the new address
         if ($res['key'] == "BEGIN") {
             $address = array();
         }
         // Add the  address to the list
         if ($res['key'] == "END") {
             $addresses[] = $address;
         }
     }
     foreach ($addresses as $address) {
         $dest_addr = array();
         foreach ($address as $type => $entries) {
             //
             // "N" Type, X.520 based, delimiter ";" (5 fields)
             //
             // Family Name;Given Name;Additional Names;Honorific Prefixes;Honorific Suffixes
             //
             if ($type == "N") {
                 $dest_addr['lastname'] = $entries[0]['SEMI-COLON'][0];
                 $dest_addr['firstname'] = $entries[0]['SEMI-COLON'][1];
             }
             //
             // "ADR" Type, delimiter ";" (7 fields)
             //
             // post office box; the extended address; the street
             // address; the locality (e.g., city); the region (e.g., state or
             // province); the postal code; the country name
             //
             if ($type == "ADR") {
                 foreach ($entries as $entry) {
                     $street = $entry['SEMI-COLON'][2];
                     $city = $entry['SEMI-COLON'][3];
                     $postal_code = $entry['SEMI-COLON'][5];
                     $country = $entry['SEMI-COLON'][6];
                     $dest_address = trim($street . "\n" . $postal_code . " " . $city . "\n" . $country);
                     if (strlen($dest_address) > 0) {
                         if (self::checkType($entry, 'HOME')) {
                             $dest_addr['address'] = $dest_address;
                         } else {
                             $dest_addr['address2'] = $dest_address;
                         }
                     }
                 }
             }
             //
             // "EMAIL" e-Mail addresses
             //
             if ($type == "EMAIL") {
                 $dest_addr['email'] = $entries[0]['VALUE'];
                 if (isset($entries[1]['VALUE'])) {
                     $dest_addr['email2'] = $entries[1]['VALUE'];
                 }
                 if (isset($entries[2]['VALUE'])) {
                     $dest_addr['email3'] = $entries[2]['VALUE'];
                 }
             }
             //
             // "URL" homepage
             //
             if ($type == "URL") {
                 foreach ($entries as $entry) {
                     if (self::checkType($entry, 'HOME')) {
                         $dest_addr['homepage'] = $entry['VALUE'];
                     } elseif (!isset($dest_addr['homepage'])) {
                         $dest_addr['homepage'] = $entry['VALUE'];
                     }
                 }
             }
             //
             // "TEL" Type, X.500 Telephone Number attribute
             //
             if ($type == "TEL") {
                 foreach ($entries as $entry) {
                     // Mapping:
                     // * Paste value in correct field.
                     if (self::checkType($entry, 'HOME')) {
                         $dest_addr['home'] = $entry['VALUE'];
                     } elseif (self::checkType($entry, 'FAX')) {
                         $dest_addr['fax'] = $entry['VALUE'];
                     } elseif (self::checkType($entry, 'WORK')) {
                         $dest_addr['work'] = $entry['VALUE'];
                     } elseif (self::checkType($entry, 'CELL')) {
                         $dest_addr['mobile'] = $entry['VALUE'];
                     } else {
                         $dest_addr['phone2'] = $entry['VALUE'];
                     }
                 }
             }
             //
             // "BDAY" Type, Birthday
             //
             // Examples
             //
             // - BDAY:19960415
             // - BDAY:1996-04-15
             // - BDAY:1953-10-15T23:10:00Z
             // - BDAY:1987-09-27T08:30:00-06:00
             //
             if ($type == "BDAY") {
                 if (strlen($entries[0]['VALUE']) == 8) {
                     $dest_addr['bday'] = ltrim(substr($entries[0]['VALUE'], 6, 2), "0");
                     $dest_addr['bmonth'] = MonthToName(ltrim(substr($entries[0]['VALUE'], 4, 2), "0"));
                     $dest_addr['byear'] = substr($entries[0]['VALUE'], 0, 4);
                 } elseif (strlen($entries[0]['VALUE']) >= 10) {
                     $date = substr($entries[0]['VALUE'], 0, 10);
                     $date_parts = explode("-", $date);
                     $dest_addr['bday'] = ltrim($date_parts[2], "0");
                     $dest_addr['byear'] = $date_parts[0];
                     $dest_addr['bmonth'] = MonthToName($date_parts[1]);
                 }
             }
             if ($type == "X-ANNIVERSARY") {
                 if (strlen($entries[0]['VALUE']) == 8) {
                     $dest_addr['aday'] = ltrim(substr($entries[0]['VALUE'], 6, 2), "0");
                     $dest_addr['amonth'] = MonthToName(ltrim(substr($entries[0]['VALUE'], 4, 2), "0"));
                     $dest_addr['ayear'] = substr($entries[0]['VALUE'], 0, 4);
                 } elseif (strlen($entries[0]['VALUE']) >= 10) {
                     $date = substr($entries[0]['VALUE'], 0, 10);
                     $date_parts = explode("-", $date);
                     $dest_addr['aday'] = ltrim($date_parts[2], "0");
                     $dest_addr['ayear'] = $date_parts[0];
                     $dest_addr['amonth'] = MonthToName($date_parts[1]);
                 }
             }
             //
             // "ORG" Type, the Company
             //
             if ($type == "ORG") {
                 $dest_addr['company'] = $entries[0]['VALUE'];
             }
             //
             // "TITLE" Type, the title
             //
             if ($type == "TITLE") {
                 $dest_addr['title'] = $entries[0]['VALUE'];
             }
             //
             // "NOTE" Type, just Notes
             //
             if ($type == "NOTE") {
                 $dest_addr['notes'] = $entries[0]['VALUE'];
             }
             //
             // "PHOTO" Type, the photo
             //
             if ($type == "PHOTO") {
                 $dest_addr['photo'] = $entries[0]['VALUE'];
             }
         }
         $this->ab[] = $dest_addr;
     }
 }