3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2017 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2017
34 require_once 'Contact/Vcard/Build.php';
39 class CRM_Contact_Page_View_Vcard
extends CRM_Contact_Page_View
{
42 * Heart of the vCard data assignment process.
44 * The runner gets all the metadata for the contact and calls the writeVcard method to output the vCard
47 public function run() {
54 $params['id'] = $params['contact_id'] = $this->_contactId
;
55 $contact = CRM_Contact_BAO_Contact
::retrieve($params, $defaults, $ids);
57 // now that we have the contact's data - let's build the vCard
58 // TODO: non-US-ASCII support (requires changes to the Contact_Vcard_Build class)
59 $vcardNames = CRM_Core_PseudoConstant
::get('CRM_Core_DAO_Address', 'location_type_id', array('labelColumn' => 'vcard_name'));
60 $vcard = new Contact_Vcard_Build('2.1');
62 if ($defaults['contact_type'] == 'Individual') {
63 $vcard->setName(CRM_Utils_Array
::value('last_name', $defaults),
64 CRM_Utils_Array
::value('first_name', $defaults),
65 CRM_Utils_Array
::value('middle_name', $defaults),
66 CRM_Utils_Array
::value('prefix', $defaults),
67 CRM_Utils_Array
::value('suffix', $defaults)
69 $organizationName = CRM_Utils_Array
::value('organization_name', $defaults);
70 if ($organizationName !== NULL) {
71 $vcard->addOrganization($organizationName);
74 elseif ($defaults['contact_type'] == 'Organization') {
75 $vcard->setName($defaults['organization_name'], '', '', '', '');
77 elseif ($defaults['contact_type'] == 'Household') {
78 $vcard->setName($defaults['household_name'], '', '', '', '');
80 $vcard->setFormattedName($defaults['display_name']);
81 $vcard->setSortString($defaults['sort_name']);
83 if (!empty($defaults['nick_name'])) {
84 $vcard->addNickname($defaults['nick_name']);
87 if (!empty($defaults['job_title'])) {
88 $vcard->setTitle($defaults['job_title']);
91 if (!empty($defaults['birth_date'])) {
92 $vcard->setBirthday(CRM_Utils_Array
::value('birth_date', $defaults));
95 if (!empty($defaults['home_URL'])) {
96 $vcard->setURL($defaults['home_URL']);
99 // TODO: $vcard->setGeo($lat, $lon);
100 if (!empty($defaults['address'])) {
101 $stateProvices = CRM_Core_PseudoConstant
::stateProvince();
102 $countries = CRM_Core_PseudoConstant
::country();
103 foreach ($defaults['address'] as $location) {
104 // we don't keep PO boxes in separate fields
106 $extend = CRM_Utils_Array
::value('supplemental_address_1', $location);
107 if (!empty($location['supplemental_address_2'])) {
108 $extend .= ', ' . $location['supplemental_address_2'];
110 $street = CRM_Utils_Array
::value('street_address', $location);
111 $locality = CRM_Utils_Array
::value('city', $location);
113 if (!empty($location['state_province_id'])) {
114 $region = $stateProvices[CRM_Utils_Array
::value('state_province_id', $location)];
117 if (!empty($location['country_id'])) {
118 $country = $countries[CRM_Utils_Array
::value('country_id', $location)];
121 $postcode = CRM_Utils_Array
::value('postal_code', $location);
122 if (!empty($location['postal_code_suffix'])) {
123 $postcode .= '-' . $location['postal_code_suffix'];
126 $vcard->addAddress($pob, $extend, $street, $locality, $region, $postcode, $country);
127 $vcardName = $vcardNames[$location['location_type_id']];
129 $vcard->addParam('TYPE', $vcardName);
131 if (!empty($location['is_primary'])) {
132 $vcard->addParam('TYPE', 'PREF');
136 if (!empty($defaults['phone'])) {
137 foreach ($defaults['phone'] as $phone) {
138 $vcard->addTelephone($phone['phone']);
139 $vcardName = $vcardNames[$phone['location_type_id']];
141 $vcard->addParam('TYPE', $vcardName);
143 if ($phone['is_primary']) {
144 $vcard->addParam('TYPE', 'PREF');
149 if (!empty($defaults['email'])) {
150 foreach ($defaults['email'] as $email) {
151 $vcard->addEmail($email['email']);
152 $vcardName = $vcardNames[$email['location_type_id']];
154 $vcard->addParam('TYPE', $vcardName);
156 if ($email['is_primary']) {
157 $vcard->addParam('TYPE', 'PREF');
162 // all that's left is sending the vCard to the browser
163 $filename = CRM_Utils_String
::munge($defaults['display_name']);
164 $vcard->send($filename . '.vcf', 'attachment', 'utf-8');
165 CRM_Utils_System
::civiExit();