Skip to content
World Wide Web Server edited this page Jul 4, 2012 · 15 revisions

The following function on a new controller will be used to load, construct from a vcard contact data and then download the file(zipped or plain .vcf):

<code>function linkvcard($id = false)
{
    $this->load->library('vcard');
    $datavcard = $this->getvcard($id);
    if (is_array($datavcard))
    {    
        $this->vcard->vcard($datavcard);
    }
    else
    {
        $this->vcard->vcard();
        
    }
    $this->vcard->zipdownload();
}</code>

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]] * Extended Class Library for Codeigniter from * --------------------------------------------------------------------------------------------------------------------------- */

/**

  • 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
    ";

    $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
    ";

    $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
      "; /
      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() { /
      $this->log .= "vcard download() called
      "; 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"); echo $this->card; */ 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
      "; if (!$this->card) { $this->build(); } if (!$this->filename) { $this->filename = trim($this->data['display_name']); } $this->filename = str_replace(" ", "_", $this->filename); //echo $this->card;
      $datavcard = $this->getvcard();

      $name = $this->filename.".vcf"; //$datavcard = 'A Data String!';

      $this->ci->zip->add_data($name, $datavcard);

      // Write the zip file to a folder on your server. $this->ci->zip->archive(base_url().'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
      "; 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
      "; 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; }

    /**

    • 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); }

      }

      //$this->ci->zip->add_data($vcardsdata); // Write the zip file to a folder on your server. $this->ci->zip->archive(base_url().'vcards/'.$filename.'.zip'); // Download the file to your desktop. $this->ci->zip->download($filename.'.zip'); return true; }

} ?>

Clone this wiki locally