public function fromASContact(Horde_ActiveSync_Message_Contact $message)
{
$hash = array();
foreach (self::$_asMap as $turbaField => $asField) {
if (!$message->isGhosted($asField)) {
try {
$hash[$turbaField] = $message->{$asField};
} catch (InvalidArgumentException $e) {
}
}
}
/* Requires special handling */
try {
if ($message->getProtocolVersion() >= Horde_ActiveSync::VERSION_TWELVE) {
if (!empty($message->airsyncbasebody)) {
$hash['notes'] = $message->airsyncbasebody->data;
}
} else {
$hash['notes'] = $message->body;
}
} catch (InvalidArgumentException $e) {
}
// picture ($message->picture *should* already be base64 encdoed)
if (!$message->isGhosted('picture')) {
$hash['photo'] = base64_decode($message->picture);
if (!empty($hash['photo'])) {
$hash['phototype'] = Horde_Mime_Magic::analyzeData($hash['photo']);
} else {
$hash['phototype'] = null;
}
}
/* Email addresses */
$hash['emails'] = array();
if (!$message->isGhosted('email1address')) {
$e = Horde_Icalendar_Vcard::getBareEmail($message->email1address);
$hash['emails'][] = $hash['email'] = $e ? $e : '';
}
if (!$message->isGhosted('email2address')) {
$e = Horde_Icalendar_Vcard::getBareEmail($message->email2address);
$hash['emails'][] = $hash['homeEmail'] = $e ? $e : '';
}
if (!$message->isGhosted('email3address')) {
$e = Horde_Icalendar_Vcard::getBareEmail($message->email3address);
$hash['emails'][] = $hash['workEmail'] = $e ? $e : '';
}
$hash['emails'] = implode(',', $hash['emails']);
/* Categories */
if (is_array($message->categories) && count($message->categories)) {
$hash['__tags'] = $message->categories;
}
/* Children */
if (is_array($message->children) && count($message->children)) {
// We use a comma as incoming delimiter as it's the most
// common even though it might be used withing a name string.
$hash['children'] = implode(', ', $message->children);
} elseif (!$message->isGhosted('children')) {
$hash['children'] = '';
}
/* Birthday and Anniversary */
if (!empty($message->birthday)) {
$bday = clone $message->birthday;
$bday->setTimezone(date_default_timezone_get());
$hash['birthday'] = $bday->format('Y-m-d');
} elseif (!$message->isGhosted('birthday')) {
$hash['birthday'] = '';
}
if (!empty($message->anniversary)) {
$anniversary = clone $message->anniversary;
$anniversary->setTimezone(date_default_timezone_get());
$hash['anniversary'] = $anniversary->format('Y-m-d');
} elseif (!$message->isGhosted('anniversary')) {
$hash['anniversary'] = '';
}
/* Countries */
include 'Horde/Nls/Countries.php';
if (!empty($message->homecountry)) {
if (!empty($this->map['homeCountryFree'])) {
$hash['homeCountryFree'] = $message->homecountry;
} else {
$country = array_search($message->homecountry, $countries);
if ($country === false) {
$country = $message->homecountry;
}
$hash['homeCountry'] = $country;
}
} elseif (!$message->isGhosted('homecountry')) {
$hash['homeCountry'] = '';
}
if (!empty($message->businesscountry)) {
if (!empty($this->map['workCountryFree'])) {
$hash['workCountryFree'] = $message->businesscountry;
} else {
$country = array_search($message->businesscountry, $countries);
if ($country === false) {
$country = $message->businesscountry;
}
$hash['workCountry'] = $country;
}
} elseif (!$message->isGhosted('businesscountry')) {
$hash['workCountry'] = '';
}
if (!empty($message->othercountry)) {
if (!empty($this->map['otherCountryFree'])) {
$hash['otherCountryFree'] = $message->othercountry;
} else {
$country = array_search($message->othercountry, $countries);
if ($country === false) {
$country = $message->othercountry;
}
$hash['otherCountry'] = $country;
}
} elseif (!$message->isGhosted('othercountry')) {
$hash['otherCountry'] = '';
}
return $hash;
}