public function tovCard(Turba_Object $object, $version = '2.1', array $fields = null, $skipEmpty = false)
{
global $injector;
$hash = $object->getAttributes();
$attributes = array_keys($this->map);
$vcard = new Horde_Icalendar_Vcard($version);
$formattedname = false;
$charset = $version == '2.1' ? array('CHARSET' => 'UTF-8') : array();
$hooks = $injector->getInstance('Horde_Core_Hooks');
$decode_hook = $hooks->hookExists('decode_attribute', 'turba');
// Tags are stored externally to Turba, so they don't appear in the
// source map.
$attributes[] = '__tags';
foreach ($attributes as $key) {
$val = $object->getValue($key);
if ($skipEmpty && !is_array($val) && !strlen($val)) {
continue;
}
if ($decode_hook) {
try {
$val = $hooks->callHook('decode_attribute', 'turba', array($key, $val, $object));
} catch (Turba_Exception $e) {
}
}
switch ($key) {
case '__uid':
$vcard->setAttribute('UID', $val);
break;
case 'name':
if ($fields && !isset($fields['FN'])) {
break;
}
$vcard->setAttribute('FN', $val, Horde_Mime::is8bit($val) ? $charset : array());
$formattedname = true;
break;
case 'nickname':
case 'alias':
$params = Horde_Mime::is8bit($val) ? $charset : array();
if (!$fields || isset($fields['NICKNAME'])) {
$vcard->setAttribute('NICKNAME', $val, $params);
}
if (!$fields || isset($fields['X-EPOCSECONDNAME'])) {
$vcard->setAttribute('X-EPOCSECONDNAME', $val, $params);
}
break;
case 'homeAddress':
if ($fields && (!isset($fields['LABEL']) || isset($fields['LABEL']->Params['TYPE']) && !$this->_hasValEnum($fields['LABEL']->Params['TYPE']->ValEnum, 'HOME'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('LABEL', $val, array('HOME' => null));
} else {
$vcard->setAttribute('LABEL', $val, array('TYPE' => 'HOME'));
}
break;
case 'workAddress':
if ($fields && (!isset($fields['LABEL']) || isset($fields['LABEL']->Params['TYPE']) && !$this->_hasValEnum($fields['LABEL']->Params['TYPE']->ValEnum, 'WORK'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('LABEL', $val, array('WORK' => null));
} else {
$vcard->setAttribute('LABEL', $val, array('TYPE' => 'WORK'));
}
break;
case 'otherAddress':
if ($fields && !isset($fields['LABEL'])) {
break;
}
$vcard->setAttribute('LABEL', $val);
break;
case 'phone':
if ($fields && !isset($fields['TEL'])) {
break;
}
$vcard->setAttribute('TEL', $val);
break;
case 'homePhone':
if ($fields && (!isset($fields['TEL']) || isset($fields['TEL']->Params['TYPE']) && !$this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'HOME'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('TEL', $val, array('HOME' => null, 'VOICE' => null));
} else {
$vcard->setAttribute('TEL', $val, array('TYPE' => array('HOME', 'VOICE')));
}
break;
case 'workPhone':
if ($fields && (!isset($fields['TEL']) || isset($fields['TEL']->Params['TYPE']) && !$this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'WORK'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('TEL', $val, array('WORK' => null, 'VOICE' => null));
} else {
$vcard->setAttribute('TEL', $val, array('TYPE' => array('WORK', 'VOICE')));
}
break;
case 'cellPhone':
if ($fields && (!isset($fields['TEL']) || isset($fields['TEL']->Params['TYPE']) && !$this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'CELL'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('TEL', $val, array('CELL' => null, 'VOICE' => null));
} else {
$vcard->setAttribute('TEL', $val, array('TYPE' => array('CELL', 'VOICE')));
}
break;
case 'homeCellPhone':
$parameters = array();
if ($fields) {
if (!isset($fields['TEL'])) {
break;
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'CELL')) {
if ($version == '2.1') {
$parameters['CELL'] = null;
$parameters['VOICE'] = null;
} else {
$parameters['TYPE'] = array('CELL', 'VOICE');
}
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'HOME')) {
if ($version == '2.1') {
$parameters['HOME'] = null;
$parameters['VOICE'] = null;
} else {
$parameters['TYPE'] = array('HOME', 'VOICE');
}
}
if (empty($parameters)) {
break;
}
} else {
if ($version == '2.1') {
$parameters = array('CELL' => null, 'HOME' => null, 'VOICE' => null);
} else {
$parameters = array('TYPE' => array('CELL', 'HOME', 'VOICE'));
}
}
$vcard->setAttribute('TEL', $val, $parameters);
break;
case 'workCellPhone':
$parameters = array();
if ($fields) {
if (!isset($fields['TEL'])) {
break;
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'CELL')) {
if ($version == '2.1') {
$parameters['CELL'] = null;
$parameters['VOICE'] = null;
} else {
$parameters['TYPE'] = array('CELL', 'VOICE');
}
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'WORK')) {
if ($version == '2.1') {
$parameters['WORK'] = null;
$parameters['VOICE'] = null;
} else {
$parameters['TYPE'] = array('WORK', 'VOICE');
}
}
if (empty($parameters)) {
break;
}
} else {
if ($version == '2.1') {
$parameters = array('CELL' => null, 'WORK' => null, 'VOICE' => null);
} else {
$parameters = array('TYPE' => array('CELL', 'WORK', 'VOICE'));
}
}
$vcard->setAttribute('TEL', $val, $parameters);
break;
case 'videoCall':
if ($fields && (!isset($fields['TEL']) || isset($fields['TEL']->Params['TYPE']) && !$this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'VIDEO'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('TEL', $val, array('VIDEO' => null));
} else {
$vcard->setAttribute('TEL', $val, array('TYPE' => 'VIDEO'));
}
break;
case 'homeVideoCall':
$parameters = array();
if ($fields) {
if (!isset($fields['TEL'])) {
break;
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'VIDEO')) {
if ($version == '2.1') {
$parameters['VIDEO'] = null;
} else {
$parameters['TYPE'] = 'VIDEO';
}
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'HOME')) {
if ($version == '2.1') {
$parameters['HOME'] = null;
} else {
$parameters['TYPE'] = 'HOME';
}
}
if (empty($parameters)) {
break;
}
} else {
if ($version == '2.1') {
$parameters = array('VIDEO' => null, 'HOME' => null);
} else {
$parameters = array('TYPE' => array('VIDEO', 'HOME'));
}
}
$vcard->setAttribute('TEL', $val, $parameters);
break;
case 'workVideoCall':
$parameters = array();
if ($fields) {
if (!isset($fields['TEL'])) {
break;
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'VIDEO')) {
if ($version == '2.1') {
$parameters['VIDEO'] = null;
} else {
$parameters['TYPE'] = 'VIDEO';
}
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'WORK')) {
if ($version == '2.1') {
$parameters['WORK'] = null;
} else {
$parameters['TYPE'] = 'WORK';
}
}
if (empty($parameters)) {
break;
}
} else {
if ($version == '2.1') {
$parameters = array('VIDEO' => null, 'WORK' => null);
} else {
$parameters = array('TYPE' => array('VIDEO', 'WORK'));
}
}
$vcard->setAttribute('TEL', $val, $parameters);
break;
case 'sip':
if ($fields && !isset($fields['X-SIP'])) {
break;
}
$vcard->setAttribute('X-SIP', $val);
break;
case 'ptt':
if ($fields && (!isset($fields['X-SIP']) || isset($fields['X-SIP']->Params['TYPE']) && !$this->_hasValEnum($fields['X-SIP']->Params['TYPE']->ValEnum, 'POC'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('X-SIP', $val, array('POC' => null));
} else {
$vcard->setAttribute('X-SIP', $val, array('TYPE' => 'POC'));
}
break;
case 'voip':
if ($fields && (!isset($fields['X-SIP']) || isset($fields['X-SIP']->Params['TYPE']) && !$this->_hasValEnum($fields['X-SIP']->Params['TYPE']->ValEnum, 'VOIP'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('X-SIP', $val, array('VOIP' => null));
} else {
$vcard->setAttribute('X-SIP', $val, array('TYPE' => 'VOIP'));
}
break;
case 'shareView':
if ($fields && (!isset($fields['X-SIP']) || isset($fields['X-SIP']->Params['TYPE']) && !$this->_hasValEnum($fields['X-SIP']->Params['TYPE']->ValEnum, 'SWIS'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('X-SIP', $val, array('SWIS' => null));
} else {
$vcard->setAttribute('X-SIP', $val, array('TYPE' => 'SWIS'));
}
break;
case 'imaddress':
if ($fields && !isset($fields['X-WV-ID'])) {
break;
}
$vcard->setAttribute('X-WV-ID', $val);
break;
case 'fax':
if ($fields && (!isset($fields['TEL']) || isset($fields['TEL']->Params['TYPE']) && !$this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'FAX'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('TEL', $val, array('FAX' => null));
} else {
$vcard->setAttribute('TEL', $val, array('TYPE' => 'FAX'));
}
break;
case 'homeFax':
$parameters = array();
if ($fields) {
if (!isset($fields['TEL'])) {
break;
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'FAX')) {
if ($version == '2.1') {
$parameters['FAX'] = null;
} else {
$parameters['TYPE'] = 'FAX';
}
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'HOME')) {
if ($version == '2.1') {
$parameters['HOME'] = null;
} else {
$parameters['TYPE'] = 'HOME';
}
}
if (empty($parameters)) {
break;
}
} else {
if ($version == '2.1') {
$parameters = array('FAX' => null, 'HOME' => null);
} else {
$parameters = array('TYPE' => array('FAX', 'HOME'));
}
}
$vcard->setAttribute('TEL', $val, $parameters);
break;
case 'workFax':
$parameters = array();
if ($fields) {
if (!isset($fields['TEL'])) {
break;
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'FAX')) {
if ($version == '2.1') {
$parameters['FAX'] = null;
} else {
$parameters['TYPE'] = 'FAX';
}
}
if (!isset($fields['TEL']->Params['TYPE']) || $this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'WORK')) {
if ($version == '2.1') {
$parameters['WORK'] = null;
} else {
$parameters['TYPE'] = 'WORK';
}
}
if (empty($parameters)) {
break;
}
} else {
if ($version == '2.1') {
$parameters = array('FAX' => null, 'WORK' => null);
} else {
$parameters = array('TYPE' => array('FAX', 'WORK'));
}
}
$vcard->setAttribute('TEL', $val, $parameters);
if ($version == '2.1') {
$vcard->setAttribute('TEL', $val, array('FAX' => null, 'WORK' => null));
} else {
$vcard->setAttribute('TEL', $val, array('TYPE' => array('FAX', 'WORK')));
}
break;
case 'pager':
if ($fields && (!isset($fields['TEL']) || isset($fields['TEL']->Params['TYPE']) && !$this->_hasValEnum($fields['TEL']->Params['TYPE']->ValEnum, 'PAGER'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('TEL', $val, array('PAGER' => null));
} else {
$vcard->setAttribute('TEL', $val, array('TYPE' => 'PAGER'));
}
break;
case 'email':
if ($fields && !isset($fields['EMAIL'])) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('EMAIL', Horde_Icalendar_Vcard::getBareEmail($val), array('INTERNET' => null));
} else {
$vcard->setAttribute('EMAIL', Horde_Icalendar_Vcard::getBareEmail($val), array('TYPE' => 'INTERNET'));
}
break;
case 'homeEmail':
if ($fields && (!isset($fields['EMAIL']) || isset($fields['EMAIL']->Params['TYPE']) && !$this->_hasValEnum($fields['EMAIL']->Params['TYPE']->ValEnum, 'HOME'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('EMAIL', Horde_Icalendar_Vcard::getBareEmail($val), array('HOME' => null));
} else {
$vcard->setAttribute('EMAIL', Horde_Icalendar_Vcard::getBareEmail($val), array('TYPE' => 'HOME'));
}
break;
case 'workEmail':
if ($fields && (!isset($fields['EMAIL']) || isset($fields['EMAIL']->Params['TYPE']) && !$this->_hasValEnum($fields['EMAIL']->Params['TYPE']->ValEnum, 'WORK'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('EMAIL', Horde_Icalendar_Vcard::getBareEmail($val), array('WORK' => null));
} else {
$vcard->setAttribute('EMAIL', Horde_Icalendar_Vcard::getBareEmail($val), array('TYPE' => 'WORK'));
}
break;
case 'emails':
if ($fields && !isset($fields['EMAIL'])) {
break;
}
$emails = explode(',', $val);
foreach ($emails as $email) {
$vcard->setAttribute('EMAIL', Horde_Icalendar_Vcard::getBareEmail($email));
}
break;
case 'title':
if ($fields && !isset($fields['TITLE'])) {
break;
}
$vcard->setAttribute('TITLE', $val, Horde_Mime::is8bit($val) ? $charset : array());
break;
case 'role':
if ($fields && !isset($fields['ROLE'])) {
break;
}
$vcard->setAttribute('ROLE', $val, Horde_Mime::is8bit($val) ? $charset : array());
break;
case 'notes':
if ($fields && !isset($fields['NOTE'])) {
break;
}
$vcard->setAttribute('NOTE', $val, Horde_Mime::is8bit($val) ? $charset : array());
break;
case '__tags':
$val = $injector->getInstance('Turba_Tagger')->split($val);
case 'businessCategory':
// No CATEGORIES in vCard 2.1
if ($version == '2.1' || $fields && !isset($fields['CATEGORIES'])) {
break;
}
$vcard->setAttribute('CATEGORIES', null, array(), true, $val);
break;
case 'anniversary':
if (!$fields || isset($fields['X-ANNIVERSARY'])) {
$vcard->setAttribute('X-ANNIVERSARY', $val);
}
break;
case 'spouse':
if (!$fields || isset($fields['X-SPOUSE'])) {
$vcard->setAttribute('X-SPOUSE', $val);
}
break;
case 'children':
if (!$fields || isset($fields['X-CHILDREN'])) {
$vcard->setAttribute('X-CHILDREN', $val);
}
break;
case 'website':
if ($fields && !isset($fields['URL'])) {
break;
}
$vcard->setAttribute('URL', $val);
break;
case 'homeWebsite':
if ($fields && (!isset($fields['URL']) || isset($fields['URL']->Params['TYPE']) && !$this->_hasValEnum($fields['URL']->Params['TYPE']->ValEnum, 'HOME'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('URL', $val, array('HOME' => null));
} else {
$vcard->setAttribute('URL', $val, array('TYPE' => 'HOME'));
}
break;
case 'workWebsite':
if ($fields && (!isset($fields['URL']) || isset($fields['URL']->Params['TYPE']) && !$this->_hasValEnum($fields['URL']->Params['TYPE']->ValEnum, 'WORK'))) {
break;
}
if ($version == '2.1') {
$vcard->setAttribute('URL', $val, array('WORK' => null));
} else {
$vcard->setAttribute('URL', $val, array('TYPE' => 'WORK'));
}
break;
case 'freebusyUrl':
if ($version == '2.1' || $fields && !isset($fields['FBURL'])) {
break;
}
$vcard->setAttribute('FBURL', $val);
break;
case 'birthday':
if ($fields && !isset($fields['BDAY'])) {
break;
}
$vcard->setAttribute('BDAY', $val);
break;
case 'timezone':
if ($fields && !isset($fields['TZ'])) {
break;
}
$vcard->setAttribute('TZ', $val, array('VALUE' => 'text'));
break;
case 'latitude':
if ($fields && !isset($fields['GEO'])) {
break;
}
if (isset($hash['longitude'])) {
$vcard->setAttribute('GEO', array('latitude' => $val, 'longitude' => $hash['longitude']));
}
break;
case 'homeLatitude':
if ($fields && (!isset($fields['GEO']) || isset($fields['GEO']->Params['TYPE']) && !$this->_hasValEnum($fields['GEO']->Params['TYPE']->ValEnum, 'HOME'))) {
break;
}
if (isset($hash['homeLongitude'])) {
if ($version == '2.1') {
$vcard->setAttribute('GEO', array('latitude' => $val, 'longitude' => $hash['homeLongitude']), array('HOME' => null));
} else {
$vcard->setAttribute('GEO', array('latitude' => $val, 'longitude' => $hash['homeLongitude']), array('TYPE' => 'HOME'));
}
}
break;
case 'workLatitude':
if ($fields && (!isset($fields['GEO']) || isset($fields['GEO']->Params['TYPE']) && !$this->_hasValEnum($fields['GEO']->Params['TYPE']->ValEnum, 'HOME'))) {
break;
}
if (isset($hash['workLongitude'])) {
if ($version == '2.1') {
$vcard->setAttribute('GEO', array('latitude' => $val, 'longitude' => $hash['workLongitude']), array('WORK' => null));
} else {
$vcard->setAttribute('GEO', array('latitude' => $val, 'longitude' => $hash['workLongitude']), array('TYPE' => 'WORK'));
}
}
break;
case 'photo':
case 'logo':
$name = Horde_String::upper($key);
$params = array();
if (strlen($hash[$key])) {
$params['ENCODING'] = 'b';
}
if (isset($hash[$key . 'type'])) {
$params['TYPE'] = $hash[$key . 'type'];
}
if ($fields && (!isset($fields[$name]) || isset($params['TYPE']) && isset($fields[$name]->Params['TYPE']) && !$this->_hasValEnum($fields[$name]->Params['TYPE']->ValEnum, $params['TYPE']))) {
break;
}
$vcard->setAttribute($name, base64_encode($hash[$key]), $params);
break;
}
}
// No explicit firstname/lastname in data source: we have to guess.
if (!isset($hash['lastname']) && isset($hash['name'])) {
$this->_guessName($hash);
}
$a = array(Horde_Icalendar_Vcard::N_FAMILY => isset($hash['lastname']) ? $hash['lastname'] : '', Horde_Icalendar_Vcard::N_GIVEN => isset($hash['firstname']) ? $hash['firstname'] : '', Horde_Icalendar_Vcard::N_ADDL => isset($hash['middlenames']) ? $hash['middlenames'] : '', Horde_Icalendar_Vcard::N_PREFIX => isset($hash['namePrefix']) ? $hash['namePrefix'] : '', Horde_Icalendar_Vcard::N_SUFFIX => isset($hash['nameSuffix']) ? $hash['nameSuffix'] : '');
$val = implode(';', $a);
if (!$fields || isset($fields['N'])) {
$vcard->setAttribute('N', $val, Horde_Mime::is8bit($val) ? $charset : array(), false, $a);
}
if (!$formattedname && (!$fields || isset($fields['FN']))) {
if ($object->getValue('name')) {
$val = $object->getValue('name');
} elseif (!empty($this->alternativeName) && isset($hash[$this->alternativeName])) {
$val = $hash[$this->alternativeName];
} else {
$val = '';
}
$vcard->setAttribute('FN', $val, Horde_Mime::is8bit($val) ? $charset : array());
}
$org = array();
if (!empty($hash['company']) || !$skipEmpty && array_key_exists('company', $hash)) {
$org[] = $hash['company'];
}
if (!empty($hash['department']) || !$skipEmpty && array_key_exists('department', $hash)) {
$org[] = $hash['department'];
}
if (count($org) && (!$fields || isset($fields['ORG']))) {
$val = implode(';', $org);
$vcard->setAttribute('ORG', $val, Horde_Mime::is8bit($val) ? $charset : array(), false, $org);
}
if ((!$fields || isset($fields['ADR'])) && (!empty($hash['commonAddress']) || !empty($hash['commonStreet']) || !empty($hash['commonPOBox']) || !empty($hash['commonExtended']) || !empty($hash['commonCity']) || !empty($hash['commonProvince']) || !empty($hash['commonPostalCode']) || !empty($hash['commonCountry']) || !$skipEmpty && (array_key_exists('commonAddress', $hash) || array_key_exists('commonStreet', $hash) || array_key_exists('commonPOBox', $hash) || array_key_exists('commonExtended', $hash) || array_key_exists('commonCity', $hash) || array_key_exists('commonProvince', $hash) || array_key_exists('commonPostalCode', $hash) || array_key_exists('commonCountry', $hash)))) {
/* We can't know if this particular Turba source uses a single
* address field or multiple for
* street/city/province/postcode/country. Try to deal with
* both. */
if (isset($hash['commonAddress']) && !isset($hash['commonStreet'])) {
$hash['commonStreet'] = $hash['commonAddress'];
}
$a = array(Horde_Icalendar_Vcard::ADR_POB => isset($hash['commonPOBox']) ? $hash['commonPOBox'] : '', Horde_Icalendar_Vcard::ADR_EXTEND => isset($hash['commonExtended']) ? $hash['commonExtended'] : '', Horde_Icalendar_Vcard::ADR_STREET => isset($hash['commonStreet']) ? $hash['commonStreet'] : '', Horde_Icalendar_Vcard::ADR_LOCALITY => isset($hash['commonCity']) ? $hash['commonCity'] : '', Horde_Icalendar_Vcard::ADR_REGION => isset($hash['commonProvince']) ? $hash['commonProvince'] : '', Horde_Icalendar_Vcard::ADR_POSTCODE => isset($hash['commonPostalCode']) ? $hash['commonPostalCode'] : '', Horde_Icalendar_Vcard::ADR_COUNTRY => isset($hash['commonCountry']) ? Horde_Nls::getCountryISO($hash['commonCountry']) : '');
$val = implode(';', $a);
if ($version == '2.1') {
$params = array();
if (Horde_Mime::is8bit($val)) {
$params['CHARSET'] = 'UTF-8';
}
} else {
$params = array('TYPE' => '');
}
$vcard->setAttribute('ADR', $val, $params, true, $a);
}
if ((!$fields || isset($fields['ADR']) && (!isset($fields['ADR']->Params['TYPE']) || $this->_hasValEnum($fields['ADR']->Params['TYPE']->ValEnum, 'HOME'))) && (!empty($hash['homeAddress']) || !empty($hash['homeStreet']) || !empty($hash['homePOBox']) || !empty($hash['homeExtended']) || !empty($hash['homeCity']) || !empty($hash['homeProvince']) || !empty($hash['homePostalCode']) || !empty($hash['homeCountry']) || !$skipEmpty && (array_key_exists('homeAddress', $hash) || array_key_exists('homeStreet', $hash) || array_key_exists('homePOBox', $hash) || array_key_exists('homeExtended', $hash) || array_key_exists('homeCity', $hash) || array_key_exists('homeProvince', $hash) || array_key_exists('homePostalCode', $hash) || array_key_exists('homeCountry', $hash)))) {
if (isset($hash['homeAddress']) && !isset($hash['homeStreet'])) {
$hash['homeStreet'] = $hash['homeAddress'];
}
$a = array(Horde_Icalendar_Vcard::ADR_POB => isset($hash['homePOBox']) ? $hash['homePOBox'] : '', Horde_Icalendar_Vcard::ADR_EXTEND => isset($hash['homeExtended']) ? $hash['homeExtended'] : '', Horde_Icalendar_Vcard::ADR_STREET => isset($hash['homeStreet']) ? $hash['homeStreet'] : '', Horde_Icalendar_Vcard::ADR_LOCALITY => isset($hash['homeCity']) ? $hash['homeCity'] : '', Horde_Icalendar_Vcard::ADR_REGION => isset($hash['homeProvince']) ? $hash['homeProvince'] : '', Horde_Icalendar_Vcard::ADR_POSTCODE => isset($hash['homePostalCode']) ? $hash['homePostalCode'] : '', Horde_Icalendar_Vcard::ADR_COUNTRY => isset($hash['homeCountry']) ? Horde_Nls::getCountryISO($hash['homeCountry']) : '');
$val = implode(';', $a);
if ($version == '2.1') {
$params = array('HOME' => null);
if (Horde_Mime::is8bit($val)) {
$params['CHARSET'] = 'UTF-8';
}
} else {
$params = array('TYPE' => 'HOME');
}
$vcard->setAttribute('ADR', $val, $params, true, $a);
}
if ((!$fields || isset($fields['ADR']) && (!isset($fields['ADR']->Params['TYPE']) || $this->_hasValEnum($fields['ADR']->Params['TYPE']->ValEnum, 'WORK'))) && (!empty($hash['workAddress']) || !empty($hash['workStreet']) || !empty($hash['workPOBox']) || !empty($hash['workExtended']) || !empty($hash['workCity']) || !empty($hash['workProvince']) || !empty($hash['workPostalCode']) || !empty($hash['workCountry']) || !$skipEmpty && (array_key_exists('workAddress', $hash) || array_key_exists('workStreet', $hash) || array_key_exists('workPOBox', $hash) || array_key_exists('workExtended', $hash) || array_key_exists('workCity', $hash) || array_key_exists('workProvince', $hash) || array_key_exists('workPostalCode', $hash) || array_key_exists('workCountry', $hash)))) {
if (isset($hash['workAddress']) && !isset($hash['workStreet'])) {
$hash['workStreet'] = $hash['workAddress'];
}
$a = array(Horde_Icalendar_Vcard::ADR_POB => isset($hash['workPOBox']) ? $hash['workPOBox'] : '', Horde_Icalendar_Vcard::ADR_EXTEND => isset($hash['workExtended']) ? $hash['workExtended'] : '', Horde_Icalendar_Vcard::ADR_STREET => isset($hash['workStreet']) ? $hash['workStreet'] : '', Horde_Icalendar_Vcard::ADR_LOCALITY => isset($hash['workCity']) ? $hash['workCity'] : '', Horde_Icalendar_Vcard::ADR_REGION => isset($hash['workProvince']) ? $hash['workProvince'] : '', Horde_Icalendar_Vcard::ADR_POSTCODE => isset($hash['workPostalCode']) ? $hash['workPostalCode'] : '', Horde_Icalendar_Vcard::ADR_COUNTRY => isset($hash['workCountry']) ? Horde_Nls::getCountryISO($hash['workCountry']) : '');
$val = implode(';', $a);
if ($version == '2.1') {
$params = array('WORK' => null);
if (Horde_Mime::is8bit($val)) {
$params['CHARSET'] = 'UTF-8';
}
} else {
$params = array('TYPE' => 'WORK');
}
$vcard->setAttribute('ADR', $val, $params, true, $a);
}
return $vcard;
}