/htdocs/core/class/vcard.class.php
PHP | 337 lines | 139 code | 33 blank | 165 comment | 24 complexity | 361aca984718b1a3f4b4c05d2102d02c MD5 | raw file
Possible License(s): LGPL-3.0, LGPL-2.1, GPL-3.0, MIT
- <?php
- /* Copyright (C) Kai Blankenhorn <kaib@bitfolge.de>
- * Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * v2.0 Initial creation Kai Blankenhorn
- * 2007 v3.0 Laurent Destailleur eldy@users.sourceforge.net
- * Added functions (as in http://www.ietf.org/rfc/rfc2426.txt):
- * setTitle setOrg setProdId setUID
- */
- /**
- * \file htdocs/core/class/vcard.class.php
- * \brief Class to manage vCard files
- */
- /**
- * Encode a string for vCard
- *
- * @param string $string String to encode
- * @return string String encoded
- */
- function encode($string)
- {
- return str_replace(";","\;",(dol_quoted_printable_encode(utf8_decode($string))));
- }
- /**
- * Taken from php documentation comments
- * No more used
- *
- * @param string $input String
- * @param int $line_max Max length of lines
- * @return string Encoded string
- */
- function dol_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 = "";
- $num = count($lines);
- for ($j = 0; $j < $num; $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;
- } // end of for
- $output .= $newline;
- if ($j<count($lines)-1) $output .= $linebreak;
- }
- return trim($output);
- }
- /**
- * Class to buld vCard files
- */
- class vCard
- {
- var $properties;
- var $filename;
- //var $encoding="UTF-8";
- var $encoding="ISO-8859-1;ENCODING=QUOTED-PRINTABLE";
- /**
- * mise en forme du numero de telephone
- *
- * @param int $number numero de telephone
- * @param string $type Type
- * @return void
- */
- function setPhoneNumber($number, $type="")
- {
- // type may be PREF | WORK | HOME | VOICE | FAX | MSG | CELL | PAGER | BBS | CAR | MODEM | ISDN | VIDEO or any senseful combination, e.g. "PREF;WORK;VOICE"
- $key = "TEL";
- if ($type!="") $key .= ";".$type;
- $key.= ";CHARSET=".$this->encoding;
- $this->properties[$key] = encode($number);
- }
- /**
- * mise en forme de la photo
- * warning NON TESTE !
- *
- * @param string $type Type
- * @param string $photo Photo
- * @return void
- */
- function setPhoto($type, $photo)
- { // $type = "GIF" | "JPEG"
- $this->properties["PHOTO;TYPE=$type;ENCODING=BASE64"] = base64_encode($photo);
- }
- /**
- * mise en forme du nom formate
- *
- * @param string $name Name
- * @return void
- */
- function setFormattedName($name)
- {
- $this->properties["FN;CHARSET=".$this->encoding] = encode($name);
- }
- /**
- * mise en forme du nom complet
- *
- * @param string $family Family
- * @param string $first First
- * @param string $additional Additionnal
- * @param string $prefix Prefix
- * @param string $suffix Suffix
- * @return void
- */
- function setName($family="", $first="", $additional="", $prefix="", $suffix="")
- {
- $this->properties["N;CHARSET=".$this->encoding] = encode($family).";".encode($first).";".encode($additional).";".encode($prefix).";".encode($suffix);
- $this->filename = "$first%20$family.vcf";
- if ($this->properties["FN"]=="") $this->setFormattedName(trim("$prefix $first $additional $family $suffix"));
- }
- /**
- * mise en forme de l'anniversaire
- *
- * @param timestamp $date Date
- * @return void
- */
- function setBirthday($date)
- { // $date format is YYYY-MM-DD
- $this->properties["BDAY"] = $date;
- }
- /**
- * mise en forme de l'adresse
- *
- * @param string $postoffice Postoffice
- * @param string $extended Extended
- * @param string $street Street
- * @param string $city City
- * @param string $region Region
- * @param string $zip Zip
- * @param string $country Country
- * @param string $type Type
- * @return void
- */
- function setAddress($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL")
- {
- // $type may be DOM | INTL | POSTAL | PARCEL | HOME | WORK or any combination of these: e.g. "WORK;PARCEL;POSTAL"
- $key = "ADR";
- if ($type!="") $key.= ";$type";
- $key.= ";CHARSET=".$this->encoding;
- $this->properties[$key] = ";".encode($extended).";".encode($street).";".encode($city).";".encode($region).";".encode($zip).";".encode($country);
- if ($this->properties["LABEL;$type;CHARSET=".$this->encoding] == "")
- {
- //$this->setLabel($postoffice, $extended, $street, $city, $region, $zip, $country, $type);
- }
- }
- /**
- * mise en forme du label
- *
- * @param string $postoffice Postoffice
- * @param string $extended Extended
- * @param string $street Street
- * @param string $city City
- * @param string $region Region
- * @param string $zip Zip
- * @param string $country Country
- * @param string $type Type
- * @return void
- */
- function setLabel($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL") {
- $label = "";
- if ($postoffice!="") $label.= "$postoffice\r\n";
- if ($extended!="") $label.= "$extended\r\n";
- if ($street!="") $label.= "$street\r\n";
- if ($zip!="") $label.= "$zip ";
- if ($city!="") $label.= "$city\r\n";
- if ($region!="") $label.= "$region\r\n";
- if ($country!="") $country.= "$country\r\n";
- $this->properties["LABEL;$type;CHARSET=".$this->encoding] = encode($label);
- }
- /**
- * mise en forme de l'email
- *
- * @param string $address EMail
- * @param string $type Vcard type
- * @return void
- */
- function setEmail($address,$type="internet,pref")
- {
- $this->properties["EMAIL;TYPE=".$type] = $address;
- }
- /**
- * mise en forme de la note
- *
- * @param string $note Note
- * @return void
- */
- function setNote($note)
- {
- $this->properties["NOTE;CHARSET=".$this->encoding] = encode($note);
- }
- /**
- * mise en forme de la fonction
- *
- * @param string $title Title
- * @return void
- */
- function setTitle($title)
- {
- $this->properties["TITLE;CHARSET=".$this->encoding] = encode($title);
- }
- /**
- * mise en forme de la societe
- *
- * @param string $org Org
- * @return void
- */
- function setOrg($org)
- {
- $this->properties["ORG;CHARSET=".$this->encoding] = encode($org);
- }
- /**
- * mise en forme du logiciel generateur
- *
- * @param string $prodid Prodid
- * @return void
- */
- function setProdId($prodid)
- {
- $this->properties["PRODID;CHARSET=".$this->encoding] = encode($prodid);
- }
- /**
- * mise en forme du logiciel generateur
- *
- * @param string $uid Uid
- * @return void
- */
- function setUID($uid)
- {
- $this->properties["UID;CHARSET=".$this->encoding] = encode($uid);
- }
- /**
- * mise en forme de l'url
- *
- * @param string $url URL
- * @param string $type Type
- * @return void
- */
- function setURL($url, $type="")
- {
- // $type may be WORK | HOME
- $key = "URL";
- if ($type!="") $key.= ";$type";
- $this->properties[$key] = $url;
- }
- /**
- * permet d'obtenir une vcard
- *
- * @return void
- */
- function getVCard()
- {
- $text = "BEGIN:VCARD\r\n";
- //$text.= "VERSION:3.0\r\n";
- $text.= "VERSION:2.1\r\n";
- foreach($this->properties as $key => $value)
- {
- $text.= "$key:$value\r\n";
- }
- $text.= "REV:".date("Y-m-d")."T".date("H:i:s")."Z\r\n";
- $text.= "MAILER: Dolibarr\r\n";
- $text.= "END:VCARD\r\n";
- return $text;
- }
- /**
- * permet d'obtenir le nom de fichier
- *
- * @return string Filename
- */
- function getFileName()
- {
- return $this->filename;
- }
- }
- ?>