172 lines
6.5 KiB
PHP
172 lines
6.5 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
+--------------------------------------------------------------------+
|
||
|
| CiviCRM version 4.7 |
|
||
|
+--------------------------------------------------------------------+
|
||
|
| Copyright CiviCRM LLC (c) 2004-2017 |
|
||
|
+--------------------------------------------------------------------+
|
||
|
| This file is a part of CiviCRM. |
|
||
|
| |
|
||
|
| CiviCRM is free software; you can copy, modify, and distribute it |
|
||
|
| under the terms of the GNU Affero General Public License |
|
||
|
| Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
|
||
|
| |
|
||
|
| CiviCRM is distributed in the hope that it will be useful, but |
|
||
|
| WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||
|
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
|
||
|
| See the GNU Affero General Public License for more details. |
|
||
|
| |
|
||
|
| You should have received a copy of the GNU Affero General Public |
|
||
|
| License and the CiviCRM Licensing Exception along |
|
||
|
| with this program; if not, contact CiviCRM LLC |
|
||
|
| at info[AT]civicrm[DOT]org. If you have questions about the |
|
||
|
| GNU Affero General Public License or the licensing of CiviCRM, |
|
||
|
| see the CiviCRM license FAQ at http://civicrm.org/licensing |
|
||
|
+--------------------------------------------------------------------+
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @package CRM
|
||
|
* @copyright CiviCRM LLC (c) 2004-2017
|
||
|
*/
|
||
|
|
||
|
require_once 'Contact/Vcard/Build.php';
|
||
|
|
||
|
/**
|
||
|
* vCard export class.
|
||
|
*/
|
||
|
class CRM_Contact_Page_View_Vcard extends CRM_Contact_Page_View {
|
||
|
|
||
|
/**
|
||
|
* 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'])) {
|
||
|
$vcard->setBirthday(CRM_Utils_Array::value('birth_date', $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'];
|
||
|
}
|
||
|
if (!empty($location['supplemental_address_3'])) {
|
||
|
$extend .= ', ' . $location['supplemental_address_3'];
|
||
|
}
|
||
|
$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();
|
||
|
}
|
||
|
|
||
|
}
|