primo commit
This commit is contained in:
109
components/com_contact/src/View/Contact/VcfView.php
Normal file
109
components/com_contact/src/View/Contact/VcfView.php
Normal file
@ -0,0 +1,109 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_contact
|
||||
*
|
||||
* @copyright (C) 2010 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Contact\Site\View\Contact;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\MVC\View\AbstractView;
|
||||
use Joomla\CMS\MVC\View\GenericDataException;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* View to create a VCF for a contact item
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
class VcfView extends AbstractView
|
||||
{
|
||||
/**
|
||||
* The contact item
|
||||
*
|
||||
* @var \stdClass
|
||||
*/
|
||||
protected $item;
|
||||
|
||||
/**
|
||||
* Execute and display a template script.
|
||||
*
|
||||
* @param string $tpl The name of the template file to parse; automatically searches through the template paths.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws GenericDataException
|
||||
*/
|
||||
public function display($tpl = null)
|
||||
{
|
||||
// Get model data.
|
||||
$item = $this->get('Item');
|
||||
|
||||
// Check for errors.
|
||||
if (\count($errors = $this->get('Errors'))) {
|
||||
throw new GenericDataException(implode("\n", $errors), 500);
|
||||
}
|
||||
|
||||
$this->getDocument()->setMimeEncoding('text/directory', true);
|
||||
|
||||
// Compute lastname, firstname and middlename
|
||||
$item->name = trim($item->name);
|
||||
|
||||
// "Lastname, Firstname Middlename" format support
|
||||
// e.g. "de Gaulle, Charles"
|
||||
$namearray = explode(',', $item->name);
|
||||
|
||||
if (\count($namearray) > 1) {
|
||||
$lastname = $namearray[0];
|
||||
$card_name = $lastname;
|
||||
$name_and_midname = trim($namearray[1]);
|
||||
|
||||
$firstname = '';
|
||||
|
||||
if (!empty($name_and_midname)) {
|
||||
$namearray = explode(' ', $name_and_midname);
|
||||
|
||||
$firstname = $namearray[0];
|
||||
$middlename = (\count($namearray) > 1) ? $namearray[1] : '';
|
||||
$card_name = $firstname . ' ' . ($middlename ? $middlename . ' ' : '') . $card_name;
|
||||
}
|
||||
} else {
|
||||
// "Firstname Middlename Lastname" format support
|
||||
$namearray = explode(' ', $item->name);
|
||||
|
||||
$middlename = (\count($namearray) > 2) ? $namearray[1] : '';
|
||||
$firstname = array_shift($namearray);
|
||||
$lastname = \count($namearray) ? end($namearray) : '';
|
||||
$card_name = $firstname . ($middlename ? ' ' . $middlename : '') . ($lastname ? ' ' . $lastname : '');
|
||||
}
|
||||
|
||||
$rev = date('c', strtotime($item->modified));
|
||||
|
||||
Factory::getApplication()->setHeader('Content-disposition', 'attachment; filename="' . $card_name . '.vcf"', true);
|
||||
|
||||
$vcard = [];
|
||||
$vcard[] = 'BEGIN:VCARD';
|
||||
$vcard[] = 'VERSION:3.0';
|
||||
$vcard[] = 'N:' . $lastname . ';' . $firstname . ';' . $middlename;
|
||||
$vcard[] = 'FN:' . $item->name;
|
||||
$vcard[] = 'TITLE:' . $item->con_position;
|
||||
$vcard[] = 'TEL;TYPE=WORK,VOICE:' . $item->telephone;
|
||||
$vcard[] = 'TEL;TYPE=WORK,FAX:' . $item->fax;
|
||||
$vcard[] = 'TEL;TYPE=WORK,MOBILE:' . $item->mobile;
|
||||
$vcard[] = 'ADR;TYPE=WORK:;;' . $item->address . ';' . $item->suburb . ';' . $item->state . ';' . $item->postcode . ';' . $item->country;
|
||||
$vcard[] = 'LABEL;TYPE=WORK:' . $item->address . "\n" . $item->suburb . "\n" . $item->state . "\n" . $item->postcode . "\n" . $item->country;
|
||||
$vcard[] = 'EMAIL;TYPE=PREF,INTERNET:' . $item->email_to;
|
||||
$vcard[] = 'URL:' . $item->webpage;
|
||||
$vcard[] = 'REV:' . $rev . 'Z';
|
||||
$vcard[] = 'END:VCARD';
|
||||
|
||||
echo implode("\n", $vcard);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user