%PDF- %PDF-
Direktori : /home1/lightco1/public_html/lightingrepublic.com.au/libraries/koowa/view/ |
Current File : //home1/lightco1/public_html/lightingrepublic.com.au/libraries/koowa/view/vcard.php |
<?php /** * @version $Id$ * @package Koowa_View * @copyright Copyright (C) 2007 - 2012 Johan Janssens. All rights reserved. * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> * @link http://www.nooku.org */ /** * Vcard Class * * Complies to version 2.1 of the vCard specification * * @author Johan Janssens <johan@nooku.org> * @package Koowa_View * @see http://www.imc.org/pdi/ * @see http://en.wikipedia.org/wiki/VCard * @uses KFilter */ class KViewVcard extends KViewFile { /** * The Vcard properties * * @var array */ protected $_properties; /** * Initializes the options for the object * * Called from {@link __construct()} as a first step of object instantiation. * * @param object An optional KConfig object with configuration options * @return void */ protected function _initialize(KConfig $config) { $config->append(array( 'mimetype' => 'text/x-vcard', )); parent::_initialize($config); } /** * Return the views output * * @return string The output of the view */ public function display() { //Set the filename $filename = $this->getService('koowa:filter.filename')->sanitize($this->_properties['FN']); $this->filename = $filename.'.vcf'; //Render the vcard $data = 'BEGIN:VCARD'; $data .= "\r\n"; $data .= 'VERSION:2.1'; $data .= "\r\n"; foreach( $this->_properties as $key => $value ) { $data .= "$key:$value"; $data .= "\r\n"; } $data .= 'REV:'. date( 'Y-m-d' ) .'T'. date( 'H:i:s' ). 'Z'; $data .= "\r\n"; $data .= 'END:VCARD'; $data .= "\r\n"; $this->output = $data; parent::display(); } /** * A structured representation of the name of the person, place or thing * * @param string Family name * @param string First name * @param string Additional name * @param string Prefix * @param string Suffix * @return KViewVCard */ public function setName( $family = '', $first = '', $additional = '', $prefix = '', $suffix = '' ) { $this->_properties["N"] = "$family;$first;$additional;$prefix;$suffix"; $this->setFormattedName( trim( "$prefix $first $additional $family $suffix" ) ); return $this; } /** * The formatted name string * * @param string Name * @return KViewVCard */ public function setFormattedName($name) { $this->_properties['FN'] = $this->_quoted_printable_encode($name); return $this; } /** * The name and optionally the unit(s) of the organization * * This property is based on the X.520 Organization Name attribute and the X.520 Organization Unit attribute * * @param string Organisation * @return KViewVCard */ public function setOrg( $org ) { $this->_properties['ORG'] = trim( $org ); return $this; } /** * Specifies the job title, functional position or function of the individual * within an organization (V. P. Research and Development) * * @param string Title * @return KViewVCard */ public function setTitle( $title ) { $this->_properties['TITLE'] = trim( $title ); return $this; } /** * The role, occupation, or business category within an organization (eg. Executive) * * @param string Role * @return KViewVCard */ public function setRole( $role ) { $this->_properties['ROLE'] = trim( $role ); return $this; } /** * The canonical number string for a telephone number for telephony communication * * @param string Phone number * @param string Type [PREF|WORK|HOME|VOICE|FAX|MSG|CELL|PAGER|BBS|CAR|MODEM|ISDN|VIDEO] or a combination, e.g. "PREF;WORK;VOICE" * @return KViewVCard */ public function setPhoneNumber($number, $type = 'PREF;WORK;VOICE') { $this->_properties['TEL;'.$type] = $number; return $this; } /** * A structured representation of the physical delivery address * * @param string Postoffice * @param string Extended * @param string Street * @param string City * @param string Region * @param string Zip * @param string Country * @param string Type [DOM|INTL|POSTAL|PARCEL|HOME|WORK] or a combination e.g. "WORK;PARCEL;POSTAL" * @return KViewVCard */ public function setAddress( $postoffice = '', $extended = '', $street = '', $city = '', $region = '', $zip = '', $country = '', $type = 'WORK;POSTAL' ) { $data = $this->_encode( $postoffice ); $data .= ';' . $this->_encode( $extended ); $data .= ';' . $this->_encode( $street ); $data .= ';' . $this->_encode( $city ); $data .= ';' . $this->_encode( $region); $data .= ';' . $this->_encode( $zip ); $data .= ';' . $this->_encode( $country ); $this->_properties['ADR;'.$type] = $data; return $this; } /** * Addressing label for physical delivery to the person/object * * @param string Postoffice * @param string Extended * @param string Street * @param string City * @param string Region * @param string Zip * @param string Country * @param string Type [DOM|INTL|POSTAL|PARCEL|HOME|WORK] or a combination e.g. "WORK;PARCEL;POSTAL" * @return KViewVCard */ public function setLabel($postoffice = '', $extended = '', $street = '', $city = '', $region = '', $zip = '', $country = '', $type = 'WORK;POSTAL') { $label = ''; if ($postoffice != '') { $label.= $postoffice; $label.= "\r\n"; } if ($extended != '') { $label.= $extended; $label.= "\r\n"; } if ($street != '') { $label.= $street; $label.= "\r\n"; } if ($zip != '') { $label.= $zip .' '; } if ($city != '') { $label.= $city; $label.= "\r\n"; } if ($region != '') { $label.= $region; $label.= "\r\n"; } if ($country != '') { $country.= $country; $label.= "\r\n"; } $this->_properties["LABEL;$type;ENCODING=QUOTED-PRINTABLE"] = $this->_quoted_printable_encode($label); return $this; } /** * The address for electronic mail communication * * @param string Email * @return KViewVCard */ public function setEmail($address) { $this->_properties['EMAIL;PREF;INTERNET'] = $address; return $this; } /** * An URL is a representation of an Internet location that can be used to obtain real-time information * * @param string Url * @param string Type [WORK|HOME] * @return KViewVCard */ public function setURL($url, $type = 'WORK') { $this->_properties['URL;'.$type] = $url; return $this; } /** * An image or photograph of the individual associated with the vCard * * @param string Photo data to be encoded * @param string Type [GIF|JPEG] * @return KViewVCard */ public function setPhoto($photo, $type = 'JPEG') { $this->_properties["PHOTO;TYPE=$type;ENCODING=BASE64"] = base64_encode($photo); return $this; } /** * Date of birth of the individual * * @param string Date YYYY-MM-DD * @return KViewVCard */ public function setBirthday($date) { $this->_properties['BDAY'] = $date; return $this; } /** * Specifies supplemental information or a comment that is associated with the vCard * * @param string Note * @return KViewVCard */ public function setNote($note) { $this->_properties['NOTE;ENCODING=QUOTED-PRINTABLE'] = $this->_quoted_printable_encode($note); return $this; } /** * Encode * * @param string String to encode * @return string Encoded string */ protected function _encode($string) { return $this->escape($this->_quoted_printable_encode($string)); } /** * Escape * * @param string String to escape * @return string Escaped string */ protected function _escape($string) { return str_replace(';',"\;",$string); } /** * Quote for printable output * * @param string Input * @param int Max line length * @return string */ protected function _quoted_printable_encode($input, $line_max = 76) { $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); $lines = preg_split("/(?:\r\n|\r|\n)/", $input); $eol = "\r\n"; $linebreak = '=0D=0A'; $escape = '='; $output = ''; for ($j = 0; $j < count($lines); $j++) { $line = $lines[$j]; $linlen = strlen($line); $newline = ''; for($i = 0; $i < $linlen; $i++) { $c = substr($line, $i, 1); $dec = ord($c); if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only $c = '=20'; } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required $h2 = floor($dec/16); $h1 = floor($dec%16); $c = $escape.$hex["$h2"] . $hex["$h1"]; } if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay $newline = " "; } $newline .= $c; } $output .= $newline; if ($j<count($lines)-1) { $output .= $linebreak; } } return trim($output); } }