<?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; } }