forked from bcit-ci/CodeIgniter
-
Notifications
You must be signed in to change notification settings - Fork 0
vCard Library
Derek Jones edited this page Jul 5, 2012
·
15 revisions
Category:Library::Export vCard Data
The code for installation (with steps): vCard Download
The little explanation:
The PHP vCard Class Library (applications/libraries/Vcard.php):
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
/*
* ---------------------------------------------------------------------------------------------------------------------------
* vCard library for Code Igniter applications extended from class_vcard from Troy Wolf [[email protected]]
* <[email protected]>
* ---------------------------------------------------------------------------------------------------------------------------
*/
/**
* Codeigniter vCard library
*/
class Vcard
{
/**
* vcard variables
**/
protected $ci;
protected $log;
protected $data; //array of this vcard's contact data
private $filename; //filename for download file naming
private $class; //PUBLIC, PRIVATE, CONFIDENTIAL
private $revision_date; //vCard Date
private $card; //vCard String
/**
* __construct
**/
public function __construct()
{
$this->ci =& get_instance();
//$ci->load->library('session');
$this->ci->load->library('zip');
}
/**
*The Vcards class constructor. You can set some defaults here if desired.
*
*/
function Vcard($data = false) {
$this->log = "New vcard() called<br />";
$this->data = array(
"display_name"=>null
,"first_name"=>null
,"last_name"=>null
,"additional_name"=>null
,"name_prefix"=>null
,"name_suffix"=>null
,"nickname"=>null
,"title"=>null
,"role"=>null
,"department"=>null
,"company"=>null
,"work_po_box"=>null
,"work_extended_address"=>null
,"work_address"=>null
,"work_city"=>null
,"work_state"=>null
,"work_postal_code"=>null
,"work_country"=>null
,"home_po_box"=>null
,"home_extended_address"=>null
,"home_address"=>null
,"home_city"=>null
,"home_state"=>null
,"home_postal_code"=>null
,"home_country"=>null
,"office_tel"=>null
,"home_tel"=>null
,"cell_tel"=>null
,"fax_tel"=>null
,"pager_tel"=>null
,"email1"=>null
,"email2"=>null
,"url"=>null
,"photo"=>null
,"birthday"=>null
,"timezone"=>null
,"sort_string"=>null
,"note"=>null
);
if(is_array($data))
{
foreach($data as $item => $value)
{
$this->data[$item] = $value;
}
}
return true;
}
/**
*The Reload method. This metod update the DATA array content.
*
*/
function reload($data = false) {
$this->log = "reload() called<br />";
$this->data = array(
"display_name"=>null
,"first_name"=>null
,"last_name"=>null
,"additional_name"=>null
,"name_prefix"=>null
,"name_suffix"=>null
,"nickname"=>null
,"title"=>null
,"role"=>null
,"department"=>null
,"company"=>null
,"work_po_box"=>null
,"work_extended_address"=>null
,"work_address"=>null
,"work_city"=>null
,"work_state"=>null
,"work_postal_code"=>null
,"work_country"=>null
,"home_po_box"=>null
,"home_extended_address"=>null
,"home_address"=>null
,"home_city"=>null
,"home_state"=>null
,"home_postal_code"=>null
,"home_country"=>null
,"office_tel"=>null
,"home_tel"=>null
,"cell_tel"=>null
,"fax_tel"=>null
,"pager_tel"=>null
,"email1"=>null
,"email2"=>null
,"url"=>null
,"photo"=>null
,"birthday"=>null
,"timezone"=>null
,"sort_string"=>null
,"note"=>null
);
if(is_array($data))
{
foreach($data as $item => $value)
{
$this->data[$item] = $value;
}
}
$this->build();
return $this->card;
}
/**
* Build method checks all the values, builds appropriate defaults for
* missing values, generates the vcard data string
*
* @param
* @return VCF file
*/
function build() {
$this->log .= "vcard build() called<br />";
/*
For many of the values, if they are not passed in, we set defaults or
build them based on other values.
*/
if (!$this->class) { $this->class = "PUBLIC"; }
if (!$this->data['display_name']) {
$this->data['display_name'] = trim($this->data['first_name']." ".$this->data['last_name']);
}
if (!$this->data['sort_string']) { $this->data['sort_string'] = $this->data['last_name']; }
if (!$this->data['sort_string']) { $this->data['sort_string'] = $this->data['company']; }
if (!$this->data['timezone']) { $this->data['timezone'] = date("O"); }
if (!$this->revision_date) { $this->revision_date = date('Y-m-d H:i:s'); }
$this->card = "BEGIN:VCARD\r\n";
$this->card .= "VERSION:3.0\r\n";
$this->card .= "CLASS:".$this->class."\r\n";
$this->card .= "PRODID:-//Vcard Extended Class from [email protected]//NONSGML Version 1//EN\r\n";
$this->card .= "REV:".$this->revision_date."\r\n";
$this->card .= "FN:".$this->data['display_name']."\r\n";
$this->card .= "N:"
.$this->data['last_name'].";"
.$this->data['first_name'].";"
.$this->data['additional_name'].";"
.$this->data['name_prefix'].";"
.$this->data['name_suffix']."\r\n";
if ($this->data['nickname']) { $this->card .= "NICKNAME:".$this->data['nickname']."\r\n"; }
if ($this->data['title']) { $this->card .= "TITLE:".$this->data['title']."\r\n"; }
if ($this->data['company']) { $this->card .= "ORG:".$this->data['company']; }
if ($this->data['department']) { $this->card .= ";".$this->data['department']; }
$this->card .= "\r\n";
if ($this->data['work_po_box']
|| $this->data['work_extended_address']
|| $this->data['work_address']
|| $this->data['work_city']
|| $this->data['work_state']
|| $this->data['work_postal_code']
|| $this->data['work_country']) {
$this->card .= "ADR;TYPE=work:"
.$this->data['work_po_box'].";"
.$this->data['work_extended_address'].";"
.$this->data['work_address'].";"
.$this->data['work_city'].";"
.$this->data['work_state'].";"
.$this->data['work_postal_code'].";"
.$this->data['work_country']."\r\n";
}
if ($this->data['home_po_box']
|| $this->data['home_extended_address']
|| $this->data['home_address']
|| $this->data['home_city']
|| $this->data['home_state']
|| $this->data['home_postal_code']
|| $this->data['home_country']) {
$this->card .= "ADR;TYPE=home:"
.$this->data['home_po_box'].";"
.$this->data['home_extended_address'].";"
.$this->data['home_address'].";"
.$this->data['home_city'].";"
.$this->data['home_state'].";"
.$this->data['home_postal_code'].";"
.$this->data['home_country']."\r\n";
}
if ($this->data['email1']) { $this->card .= "EMAIL;TYPE=internet,pref:".$this->data['email1']."\r\n"; }
if ($this->data['email2']) { $this->card .= "EMAIL;TYPE=internet:".$this->data['email2']."\r\n"; }
if ($this->data['office_tel']) { $this->card .= "TEL;TYPE=work,voice:".$this->data['office_tel']."\r\n"; }
if ($this->data['home_tel']) { $this->card .= "TEL;TYPE=home,voice:".$this->data['home_tel']."\r\n"; }
if ($this->data['cell_tel']) { $this->card .= "TEL;TYPE=cell,voice:".$this->data['cell_tel']."\r\n"; }
if ($this->data['fax_tel']) { $this->card .= "TEL;TYPE=work,fax:".$this->data['fax_tel']."\r\n"; }
if ($this->data['pager_tel']) { $this->card .= "TEL;TYPE=work,pager:".$this->data['pager_tel']."\r\n"; }
if ($this->data['url']) { $this->card .= "URL;TYPE=work:".$this->data['url']."\r\n"; }
if ($this->data['birthday']) { $this->card .= "BDAY:".$this->data['birthday']."\r\n"; }
if ($this->data['role']) { $this->card .= "ROLE:".$this->data['role']."\r\n"; }
if ($this->data['note']) { $this->card .= "NOTE:".$this->data['note']."\r\n"; }
$this->card .= "TZ:".$this->data['timezone']."\r\n";
$this->card .= "END:VCARD\r\n";
}
/**
* Download method streams the vcard to the browser client.
*
* @param
* @return VCF file
*/
function download() {
echo $this->getvcard();
return true;
}
/**
* Zipdownload method. Streams the vcard zipped to the browser client.
*
* @param
* @return VCF file ZIPPED
*/
function zipdownload() {
$this->log .= "vcard download() called<br />";
if (!$this->card) { $this->build(); }
if (!$this->filename) { $this->filename = trim($this->data['display_name']); }
$this->filename = str_replace(" ", "_", $this->filename);
$datavcard = $this->getvcard();
$name = $this->filename.".vcf";
$this->ci->zip->add_data($name, $datavcard);
// Write the zip file to a folder on your server.
$this->ci->zip->archive('./vcards/'.$this->filename.'.zip');
// Download the file to your desktop.
$this->ci->zip->download($this->filename.'.zip');
return true;
}
/**
* Get Vcard for Download.
*
* @param
* @return VCF file
*/
function getvcard() {
$this->log .= "vcard download() called<br />";
if (!$this->card) { $this->build(); }
if (!$this->filename) { $this->filename = trim($this->data['display_name']); }
$this->filename = str_replace(" ", "_", $this->filename);
header("Content-type: text/directory");
header("Content-Disposition: attachment; filename=".$this->filename.".vcf");
header("Pragma: public");
return $this->card;
//return true;
}
/**
* Get Vcard for Download.
*
* @param
* @return VCF file
*/
function returnvcard() {
$this->log .= "vcard download() called<br />";
if (!$this->card) { $this->build(); }
if (!$this->filename) { $this->filename = trim($this->data['display_name']); }
$this->filename = str_replace(" ", "_", $this->filename);
return $this->card;
//return true;
}
/**
* Zip Download method. Streams the vcard ARRAY zipped to the browser client.
*
* @param
* @return VCF file ZIPPED
*/
function zipdownloads($filename = false, $vcards = false) {
foreach($vcards as $item => $value)
{
foreach($value as $key => $val)
{
$this->ci->zip->add_data($key, $val);
}
}
// Write the zip file to a folder on your server.
$this->ci->zip->archive('./vcards/'.$filename.'.zip');
// Download the file to your desktop.
$this->ci->zip->download($filename.'.zip');
return true;
}
}
?>
The controller example:
<?php
class exportvcard extends Controller {
function exportvcard()
{
parent::Controller();
}
function index()
{
$this->load->view('vcard');
}
function linkvcard($id = false)
{
$this->load->library('vcard');
$datavcard = $this->getvcard();
//var_dump($datavcard);
if (is_array($datavcard))
{
$this->vcard->vcard($datavcard);
}
else
{
$this->vcard->vcard();
}
$this->vcard->zipdownload();
}
function getvcard()
{
$datavcarddata = array();
/*
filename is the name of the .vcf file that will be sent to the user if you
call the download() method. If you leave this blank, the class will
automatically build a filename using the contact's data.
*/
#$datavcarddata['filename'] = "";
/*
If you leave this blank, the current timestamp will be used.
*/
#$datavcardrevision_date'] = "";
/*
Possible values are PUBLIC, PRIVATE, and CONFIDENTIAL. If you leave class
blank, it will default to PUBLIC.
*/
//$datavcarddata['class'] = "PUBLIC";
/*
Contact's name data.
If you leave display_name blank, it will be built using the first and last name.
*/
#$datavcarddata['display_name'] = "";
$datavcarddata['first_name'] = "Carlos";
$datavcarddata['last_name'] = "Alcala";
$datavcarddata['additional_name'] = "J"; //Middle name
$datavcarddata['name_prefix'] = "Mr."; //Mr. Mrs. Dr.
$datavcarddata['name_suffix'] = ""; //DDS, MD, III, other designations.
$datavcarddata['nickname'] = "CJ";
/*
Contact's company, department, title, profession
*/
$datavcarddata['company'] = "ONLINE BOLIVIA";
#$datavcarddata['department'] = "";
$datavcarddata['title'] = "Senior Web Developer";
$datavcarddata['role'] = "Developer";
/*
Contact's work address
*/
#$datavcarddata['work_po_box'] = "";
#$datavcarddata['work_extended_address'] = "";
$datavcarddata['work_address'] = "1766 Rircado Ayala";
$datavcarddata['work_city'] = "Cochabamba City";
$datavcarddata['work_state'] = "CO";
$datavcarddata['work_postal_code'] = "1766";
#$datavcarddata['work_country'] = "United States of America";
/*
Contact's home address
*/
#$datavcarddata['home_po_box'] = "";
#$datavcarddata['home_extended_address'] = "";
$datavcarddata['home_address'] = "1766 Rircado Ayala";
$datavcarddata['home_city'] = "Cochabamba City";
$datavcarddata['home_state'] = "CO";
$datavcarddata['home_postal_code'] = "1766";
#$datavcarddata['home_country'] = "United States of America";
/*
Contact's telephone numbers.
*/
$datavcarddata['office_tel'] = "";
#$datavcarddata['home_tel'] = "";
$datavcarddata['cell_tel'] = "(591) 4-4540412";
$datavcarddata['fax_tel'] = "";
#$datavcarddata['pager_tel'] = "";
/*
Contact's email addresses
*/
$datavcarddata['email1'] = "[email protected]";
#$datavcarddata['email2'] = "";
/*
Contact's website
*/
$datavcarddata['url'] = "http://www.carlos-alcala.com";
/*
Some other contact data.
*/
#$datavcarddata['photo'] = ""; //Enter a URL.
$datavcarddata['birthday'] = "1979-07-06";
$datavcarddata['timezone'] = "-04:00";
/*
If you leave this blank, the class will default to using last_name or company.
*/
#$datavcarddata['sort_string'] = "";
/*
Notes about this contact.
*/
$datavcarddata['note'] = "Carlos is an amazing dev!";
return $datavcarddata;
}
}
/* End of file exportvcard.php */
/* Location: ./system/application/controllers/exportvcard.php */
And finally the vcard view, with a simple href to the exportvcard/linkvcard function:
<p>Export vCard :</p>
<?php echo anchor("exportvcard/linkvcard",'Export Carlos vCard'); ?>
<p><br />Page rendered in {elapsed_time} seconds</p>
I hope this would be usefull for everyone.
Thanks for your comments,
Carlos