<?php // report all errors error_reporting(E_ALL); // include the class file require_once 'Contact_Vcard_Build.php'; // instantiate a builder object // (defaults to version 3.0) $vcard = new Contact_Vcard_Build(); // set a formatted name $vcard->setFormattedName('Bolivar Shagnasty'); // set the structured name parts $vcard->setName('Shagnasty', 'Bolivar', 'Odysseus', 'Mr.', 'III'); // add a work email. note that we add the value // first and the param after -- Contact_Vcard_Build // is smart enough to add the param in the correct // place. $vcard->addEmail('*****@*****.**'); $vcard->addParam('TYPE', 'WORK'); // add a home/preferred email $vcard->addEmail('*****@*****.**'); $vcard->addParam('TYPE', 'HOME'); $vcard->addParam('TYPE', 'PREF'); // add a work address $vcard->addAddress('POB 101', 'Suite 202', '123 Main', 'Beverly Hills', 'CA', '90210', 'US'); $vcard->addParam('TYPE', 'WORK'); // send the vcard $vcard->send('boshag.txt', 'inline');
/** * Heart of the vCard data assignment process. * * The runner gets all the metadata for the contact and calls the writeVcard method to output the vCard * to the user. */ public function run() { $this->preProcess(); $params = array(); $defaults = array(); $ids = array(); $params['id'] = $params['contact_id'] = $this->_contactId; $contact = CRM_Contact_BAO_Contact::retrieve($params, $defaults, $ids); // now that we have the contact's data - let's build the vCard // TODO: non-US-ASCII support (requires changes to the Contact_Vcard_Build class) $vcardNames = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id', array('labelColumn' => 'vcard_name')); $vcard = new Contact_Vcard_Build('2.1'); if ($defaults['contact_type'] == 'Individual') { $vcard->setName(CRM_Utils_Array::value('last_name', $defaults), CRM_Utils_Array::value('first_name', $defaults), CRM_Utils_Array::value('middle_name', $defaults), CRM_Utils_Array::value('prefix', $defaults), CRM_Utils_Array::value('suffix', $defaults)); $organizationName = CRM_Utils_Array::value('organization_name', $defaults); if ($organizationName !== NULL) { $vcard->addOrganization($organizationName); } } elseif ($defaults['contact_type'] == 'Organization') { $vcard->setName($defaults['organization_name'], '', '', '', ''); } elseif ($defaults['contact_type'] == 'Household') { $vcard->setName($defaults['household_name'], '', '', '', ''); } $vcard->setFormattedName($defaults['display_name']); $vcard->setSortString($defaults['sort_name']); if (!empty($defaults['nick_name'])) { $vcard->addNickname($defaults['nick_name']); } if (!empty($defaults['job_title'])) { $vcard->setTitle($defaults['job_title']); } if (!empty($defaults['birth_date_display'])) { $vcard->setBirthday(CRM_Utils_Array::value('birth_date_display', $defaults)); } if (!empty($defaults['home_URL'])) { $vcard->setURL($defaults['home_URL']); } // TODO: $vcard->setGeo($lat, $lon); if (!empty($defaults['address'])) { $stateProvices = CRM_Core_PseudoConstant::stateProvince(); $countries = CRM_Core_PseudoConstant::country(); foreach ($defaults['address'] as $location) { // we don't keep PO boxes in separate fields $pob = ''; $extend = CRM_Utils_Array::value('supplemental_address_1', $location); if (!empty($location['supplemental_address_2'])) { $extend .= ', ' . $location['supplemental_address_2']; } $street = CRM_Utils_Array::value('street_address', $location); $locality = CRM_Utils_Array::value('city', $location); $region = NULL; if (!empty($location['state_province_id'])) { $region = $stateProvices[CRM_Utils_Array::value('state_province_id', $location)]; } $country = NULL; if (!empty($location['country_id'])) { $country = $countries[CRM_Utils_Array::value('country_id', $location)]; } $postcode = CRM_Utils_Array::value('postal_code', $location); if (!empty($location['postal_code_suffix'])) { $postcode .= '-' . $location['postal_code_suffix']; } $vcard->addAddress($pob, $extend, $street, $locality, $region, $postcode, $country); $vcardName = $vcardNames[$location['location_type_id']]; if ($vcardName) { $vcard->addParam('TYPE', $vcardName); } if (!empty($location['is_primary'])) { $vcard->addParam('TYPE', 'PREF'); } } } if (!empty($defaults['phone'])) { foreach ($defaults['phone'] as $phone) { $vcard->addTelephone($phone['phone']); $vcardName = $vcardNames[$phone['location_type_id']]; if ($vcardName) { $vcard->addParam('TYPE', $vcardName); } if ($phone['is_primary']) { $vcard->addParam('TYPE', 'PREF'); } } } if (!empty($defaults['email'])) { foreach ($defaults['email'] as $email) { $vcard->addEmail($email['email']); $vcardName = $vcardNames[$email['location_type_id']]; if ($vcardName) { $vcard->addParam('TYPE', $vcardName); } if ($email['is_primary']) { $vcard->addParam('TYPE', 'PREF'); } } } // all that's left is sending the vCard to the browser $filename = CRM_Utils_String::munge($defaults['display_name']); $vcard->send($filename . '.vcf', 'attachment', 'utf-8'); CRM_Utils_System::civiExit(); }
function executeExportvcard() { global $controller, $GenderOption; require_once 'Contact_Vcard_Build.php'; $vcard = new Contact_Vcard_Build(); $apf_contact = DB_DataObject::factory('ApfContact'); $apf_contact->get($apf_contact->escape($controller->getID())); // set a formatted name $vcard->setFormattedName($apf_contact->getName()); // set the structured name parts $vcard->setName($apf_contact->getName(), '', '', $GenderOption[$apf_contact->getGender()], ''); // add a work email. note that we add the value // first and the param after -- Contact_Vcard_Build // is smart enough to add the param in the correct // place. $vcard->addEmail($apf_contact->getEmail()); $vcard->addParam('TYPE', 'WORK'); // add a home/preferred email $vcard->addEmail($apf_contact->getEmail()); $vcard->addParam('TYPE', 'HOME'); $vcard->addParam('TYPE', 'PREF'); // add a home/preferred Telephone $vcard->addTelephone($apf_contact->getPhone()); $vcard->addParam('TYPE', 'HOME'); $vcard->addParam('TYPE', 'PREF'); // add a home/preferred Telephone $vcard->addTelephone($apf_contact->getMobile()); $vcard->addParam('TYPE', 'CELL'); $vcard->addParam('TYPE', 'VOICE'); // add a work address $vcard->addAddress('', '', $apf_contact->getAddrees(), '', '', '', 'CN'); $vcard->addParam('TYPE', 'WORK'); $vcard->addParam('TYPE', 'HOME'); // set the title (checks for colon-escaping) // $vcard->setTitle('The Title: The Subtitle'); $vcard->send($apf_contact->getName() . ".vcf"); exit; }