2011-08-27 01:40:47 +02:00
< ? php
/* Copyright ( C ) Kai Blankenhorn < kaib @ bitfolge . de >
2017-03-03 14:04:40 +01:00
* Copyright ( C ) 2005 - 2017 Laurent Destailleur < eldy @ users . sourceforge . org >
2011-08-27 01:40:47 +02:00
*
* 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
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2011-08-27 01:40:47 +02:00
* ( 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 />.
*/
/**
* \file htdocs / core / class / vcard . class . php
* \brief Class to manage vCard files
*/
/**
* Encode a string for vCard
*
2011-09-21 15:33:59 +02:00
* @ param string $string String to encode
* @ return string String encoded
2011-08-27 01:40:47 +02:00
*/
function encode ( $string )
{
return str_replace ( " ; " , " \ ; " ,( dol_quoted_printable_encode ( utf8_decode ( $string ))));
}
/**
* Taken from php documentation comments
* No more used
*
2011-09-21 15:33:59 +02:00
* @ param string $input String
* @ param int $line_max Max length of lines
* @ return string Encoded string
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function dol_quoted_printable_encode ( $input , $line_max = 76 )
2011-08-27 01:40:47 +02:00
{
$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 = " " ;
2011-09-21 15:33:59 +02:00
2011-09-20 18:12:52 +02:00
$num = count ( $lines );
for ( $j = 0 ; $j < $num ; $j ++ )
{
2011-08-27 01:40:47 +02:00
$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 );
}
/**
2012-03-12 15:09:46 +01:00
* Class to buld vCard files
2011-08-27 01:40:47 +02:00
*/
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
*
2011-09-21 15:33:59 +02:00
* @ param int $number numero de telephone
* @ param string $type Type
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setPhoneNumber ( $number , $type = " " )
{
2011-08-27 01:40:47 +02:00
// 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 !
*
2011-09-21 15:33:59 +02:00
* @ param string $type Type
* @ param string $photo Photo
* @ return void
*/
function setPhoto ( $type , $photo )
{ // $type = "GIF" | "JPEG"
2011-08-27 01:40:47 +02:00
$this -> properties [ " PHOTO;TYPE= $type ;ENCODING=BASE64 " ] = base64_encode ( $photo );
}
/**
* mise en forme du nom formate
*
2011-09-21 15:33:59 +02:00
* @ param string $name Name
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setFormattedName ( $name )
{
2011-08-27 01:40:47 +02:00
$this -> properties [ " FN;CHARSET= " . $this -> encoding ] = encode ( $name );
}
/**
* mise en forme du nom complet
*
2011-09-21 15:33:59 +02:00
* @ param string $family Family
* @ param string $first First
* @ param string $additional Additionnal
* @ param string $prefix Prefix
* @ param string $suffix Suffix
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setName ( $family = " " , $first = " " , $additional = " " , $prefix = " " , $suffix = " " )
{
2011-08-27 01:40:47 +02:00
$this -> properties [ " N;CHARSET= " . $this -> encoding ] = encode ( $family ) . " ; " . encode ( $first ) . " ; " . encode ( $additional ) . " ; " . encode ( $prefix ) . " ; " . encode ( $suffix );
$this -> filename = " $first %20 $family .vcf " ;
2015-07-19 11:38:44 +02:00
if ( empty ( $this -> properties [ " FN " ])) $this -> setFormattedName ( trim ( " $prefix $first $additional $family $suffix " ));
2011-08-27 01:40:47 +02:00
}
/**
* mise en forme de l ' anniversaire
*
2011-09-21 15:33:59 +02:00
* @ param timestamp $date Date
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setBirthday ( $date )
2017-03-03 14:04:40 +01:00
{
// $date format is YYYY-MM-DD - RFC 2425 and RFC 2426
$this -> properties [ " BDAY " ] = dol_print_date ( $date , 'dayrfc' );
2011-08-27 01:40:47 +02:00
}
/**
* mise en forme de l ' adresse
*
2011-09-21 15:33:59 +02:00
* @ 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
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setAddress ( $postoffice = " " , $extended = " " , $street = " " , $city = " " , $region = " " , $zip = " " , $country = " " , $type = " HOME;POSTAL " )
{
2011-08-27 01:40:47 +02:00
// $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 ;
2011-12-05 19:03:36 +01:00
$this -> properties [ $key ] = " ; " . encode ( $extended ) . " ; " . encode ( $street ) . " ; " . encode ( $city ) . " ; " . encode ( $region ) . " ; " . encode ( $zip ) . " ; " . encode ( $country );
2011-08-27 01:40:47 +02:00
2011-09-21 15:33:59 +02:00
if ( $this -> properties [ " LABEL; $type ;CHARSET= " . $this -> encoding ] == " " )
{
2011-08-27 01:40:47 +02:00
//$this->setLabel($postoffice, $extended, $street, $city, $region, $zip, $country, $type);
}
}
/**
* mise en forme du label
*
2011-09-21 15:33:59 +02:00
* @ 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
2011-08-27 01:40:47 +02:00
*/
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
*
2011-09-21 15:33:59 +02:00
* @ param string $address EMail
* @ param string $type Vcard type
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setEmail ( $address , $type = " internet,pref " )
{
2011-08-27 01:40:47 +02:00
$this -> properties [ " EMAIL;TYPE= " . $type ] = $address ;
}
/**
* mise en forme de la note
*
2011-09-21 15:33:59 +02:00
* @ param string $note Note
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setNote ( $note )
{
2011-08-27 01:40:47 +02:00
$this -> properties [ " NOTE;CHARSET= " . $this -> encoding ] = encode ( $note );
}
/**
* mise en forme de la fonction
*
2011-09-21 15:33:59 +02:00
* @ param string $title Title
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setTitle ( $title )
{
2011-08-27 01:40:47 +02:00
$this -> properties [ " TITLE;CHARSET= " . $this -> encoding ] = encode ( $title );
}
/**
* mise en forme de la societe
*
2011-09-21 15:33:59 +02:00
* @ param string $org Org
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setOrg ( $org )
{
2011-08-27 01:40:47 +02:00
$this -> properties [ " ORG;CHARSET= " . $this -> encoding ] = encode ( $org );
}
/**
* mise en forme du logiciel generateur
*
2011-09-21 15:33:59 +02:00
* @ param string $prodid Prodid
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setProdId ( $prodid )
{
2011-08-27 01:40:47 +02:00
$this -> properties [ " PRODID;CHARSET= " . $this -> encoding ] = encode ( $prodid );
}
/**
* mise en forme du logiciel generateur
*
2011-09-21 15:33:59 +02:00
* @ param string $uid Uid
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setUID ( $uid )
{
2011-08-27 01:40:47 +02:00
$this -> properties [ " UID;CHARSET= " . $this -> encoding ] = encode ( $uid );
}
/**
* mise en forme de l ' url
*
2011-09-21 15:33:59 +02:00
* @ param string $url URL
* @ param string $type Type
* @ return void
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function setURL ( $url , $type = " " )
{
2011-08-27 01:40:47 +02:00
// $type may be WORK | HOME
$key = " URL " ;
if ( $type != " " ) $key .= " ; $type " ;
$this -> properties [ $key ] = $url ;
}
/**
* permet d ' obtenir une vcard
2011-09-21 15:33:59 +02:00
*
2015-02-10 13:32:00 +01:00
* @ return string
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function getVCard ()
{
2011-08-27 01:40:47 +02:00
$text = " BEGIN:VCARD \r \n " ;
//$text.= "VERSION:3.0\r\n";
$text .= " VERSION:2.1 \r \n " ;
2011-09-21 15:33:59 +02:00
foreach ( $this -> properties as $key => $value )
{
2011-08-27 01:40:47 +02:00
$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
2011-09-21 15:33:59 +02:00
*
* @ return string Filename
2011-08-27 01:40:47 +02:00
*/
2011-09-21 15:33:59 +02:00
function getFileName ()
{
2011-08-27 01:40:47 +02:00
return $this -> filename ;
}
2011-09-21 15:33:59 +02:00
2011-08-27 01:40:47 +02:00
}