/** * Parser factory * * Creates an instance of the correct parser class, based on the * parameter passed. For example, File_IMC::parse('vCard') creates * a new object to parse a vCard file. * * @param string Type of file to parse, vCard or vCalendar * @return object */ function parse($format) { $filename = 'File/IMC/Parse/' . $format . '.php'; $classname = 'File_IMC_Parse_' . $format; if (!file_exists($filename)) { return File_IMC::raiseError('No builder driver exists for format: ' . $format, FILE_IMC_ERROR_INVALID_DRIVER); } include_once $filename; if (!class_exists($classname)) { return File_IMC::raiseError('No parser driver exists for format: ' . $format, FILE_IMC_ERROR_INVALID_DRIVER); } $class = new $classname(); return $class; }
/** * build_vcard * * @param array Contact properties. * @return object VCard object. */ function build_vcard($contactprops) { $vcard = File_IMC::build('vCard'); $vcard->setVersion('2.1'); $charset = 'UTF-8'; //// GENERAL INFORMATION $vcard->setName($this->toUTF8(isset($contactprops[PR_SURNAME]) ? $contactprops[PR_SURNAME] : ''), $this->toUTF8(isset($contactprops[PR_GIVEN_NAME]) ? $contactprops[PR_GIVEN_NAME] : ''), $this->toUTF8(isset($contactprops[PR_MIDDLE_NAME]) ? $contactprops[PR_MIDDLE_NAME] : ''), $this->toUTF8(isset($contactprops[PR_DISPLAY_NAME_PREFIX]) ? $contactprops[PR_DISPLAY_NAME_PREFIX] : ''), ''); $vcard->addParam('CHARSET', $charset); $vcard->setFormattedName($this->toUTF8(isset($contactprops[PR_DISPLAY_NAME]) ? $contactprops[PR_DISPLAY_NAME] : '')); $vcard->addParam('CHARSET', $charset); if (isset($contactprops[PR_BIRTHDAY])) { $vcard->setBirthday($this->toUTF8(date('Y-m-d', $contactprops[PR_BIRTHDAY]))); } if (isset($contactprops[PR_PROFESSION])) { $vcard->setRole($this->toUTF8($contactprops[PR_PROFESSION])); } if (isset($contactprops[PR_NICKNAME])) { $vcard->addNickname($this->toUTF8($contactprops[PR_NICKNAME])); } if (isset($contactprops[PR_COMPANY_NAME])) { $vcard->addOrganization($this->toUTF8($contactprops[PR_COMPANY_NAME])); } //$this->toUTF8($contactprops[PR_DEPARTMENT_NAME] // how to append this as outlook does and prevent escaping of ';' ?? if (isset($contactprops[PR_TITLE])) { $vcard->setTitle($this->toUTF8($contactprops[PR_TITLE])); } if (isset($this->specialprops["email1"]) && isset($contactprops[$this->specialprops["email1"]])) { $vcard->addEmail($this->toUTF8($contactprops[$this->specialprops["email1"]])); } if (isset($contactprops[PR_BUSINESS_HOME_PAGE])) { $vcard->setUrl($this->toUTF8($contactprops[PR_BUSINESS_HOME_PAGE])); $vcard->addParam('TYPE', 'WORK'); } if (isset($contactprops[PR_COMMENT])) { $vcard->setNote($this->toUTF8($contactprops[PR_COMMENT])); } //// HOME ADDRESS $v1 = $v2 = $v3 = $v4 = $v5 = $v6 = ''; if (isset($contactprops[PR_HOME_ADDRESS_POST_OFFICE_BOX])) { $v1 = $contactprops[PR_HOME_ADDRESS_POST_OFFICE_BOX]; } if (isset($contactprops[PR_HOME_ADDRESS_STREET])) { $v2 = $contactprops[PR_HOME_ADDRESS_STREET]; } if (isset($contactprops[PR_HOME_ADDRESS_CITY])) { $v3 = $contactprops[PR_HOME_ADDRESS_CITY]; } if (isset($contactprops[PR_HOME_ADDRESS_STATE_OR_PROVINCE])) { $v4 = $contactprops[PR_HOME_ADDRESS_STATE_OR_PROVINCE]; } if (isset($contactprops[PR_HOME_ADDRESS_POSTAL_CODE])) { $v5 = $contactprops[PR_HOME_ADDRESS_POSTAL_CODE]; } if (isset($contactprops[PR_HOME_ADDRESS_COUNTRY])) { $v6 = $contactprops[PR_HOME_ADDRESS_COUNTRY]; } if ($v1 != '' || $v2 != '' || $v3 != '' || $v4 != '' || $v5 != '' || $v6 != '') { $vcard->addAddress($this->toUTF8($v1), '', $this->toUTF8($v2), $this->toUTF8($v3), $this->toUTF8($v4), $this->toUTF8($v5), $this->toUTF8($v6)); $vcard->addParam('TYPE', 'HOME'); } //// WORK ADDRESS $v1 = $v2 = $v3 = $v4 = $v5 = $v6 = ''; // business post office pox (where to get this from?) if (isset($this->specialprops["business_street"]) && isset($contactprops[$this->specialprops["business_street"]])) { $v2 = $contactprops[$this->specialprops["business_street"]]; } if (isset($this->specialprops["business_city"]) && isset($contactprops[$this->specialprops["business_city"]])) { $v3 = $contactprops[$this->specialprops["business_city"]]; } if (isset($this->specialprops["business_state"]) && isset($contactprops[$this->specialprops["business_state"]])) { $v4 = $contactprops[$this->specialprops["business_state"]]; } if (isset($this->specialprops["business_postcode"]) && isset($contactprops[$this->specialprops["business_postcode"]])) { $v5 = $contactprops[$this->specialprops["business_postcode"]]; } if (isset($this->specialprops["business_country"]) && isset($contactprops[$this->specialprops["business_country"]])) { $v6 = $contactprops[$this->specialprops["business_country"]]; } if ($v1 != '' || $v2 != '' || $v3 != '' || $v4 != '' || $v5 != '' || $v6 != '') { $vcard->addAddress($this->toUTF8($v1), '', $this->toUTF8($v2), $this->toUTF8($v3), $this->toUTF8($v4), $this->toUTF8($v5), $this->toUTF8($v6)); $vcard->addParam('TYPE', 'WORK'); } //// PHONE NUMBERS if (isset($contactprops[PR_HOME_TELEPHONE_NUMBER])) { $vcard->addTelephone($this->toUTF8($contactprops[PR_HOME_TELEPHONE_NUMBER])); $vcard->addParam('TYPE', 'HOME'); } if (isset($contactprops[PR_BUSINESS_TELEPHONE_NUMBER])) { $vcard->addTelephone($this->toUTF8($contactprops[PR_BUSINESS_TELEPHONE_NUMBER])); $vcard->addParam('TYPE', 'WORK'); } if (isset($contactprops[PR_HOME2_TELEPHONE_NUMBER])) { $vcard->addTelephone($this->toUTF8($contactprops[PR_HOME2_TELEPHONE_NUMBER])); $vcard->addParam('TYPE', 'HOME'); } if (isset($contactprops[PR_BUSINESS2_TELEPHONE_NUMBER])) { $vcard->addTelephone($this->toUTF8($contactprops[PR_BUSINESS2_TELEPHONE_NUMBER])); $vcard->addParam('TYPE', 'WORK'); } if (isset($contactprops[PR_MOBILE_TELEPHONE_NUMBER])) { $vcard->addTelephone($this->toUTF8($contactprops[PR_MOBILE_TELEPHONE_NUMBER])); $vcard->addParam('TYPE', 'CELL'); } if (isset($contactprops[PR_HOME_FAX_NUMBER])) { $vcard->addTelephone($this->toUTF8($contactprops[PR_HOME_FAX_NUMBER])); $vcard->addParam('TYPE', 'HOME'); $vcard->addParam('TYPE', 'FAX'); } if (isset($contactprops[PR_BUSINESS_FAX_NUMBER])) { $vcard->addTelephone($this->toUTF8($contactprops[PR_BUSINESS_FAX_NUMBER])); $vcard->addParam('TYPE', 'WORK'); $vcard->addParam('TYPE', 'FAX'); } if (isset($contactprops[PR_OTHER_TELEPHONE_NUMBER])) { $vcard->addTelephone($this->toUTF8($contactprops[PR_OTHER_TELEPHONE_NUMBER])); } return $vcard; }