2011-08-27 01:40:47 +02:00
< ? php
2024-09-20 00:32:44 +02:00
/* Copyright ( C ) Kai Blankenhorn < kaib @ bitfolge . de >
* Copyright ( C ) 2005 - 2017 Laurent Destailleur < eldy @ users . sourceforge . org >
* Copyright ( C ) 2020 Tobias Sekan < tobias . sekan @ startmail . com >
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
* Copyright ( C ) 2024 Frédéric France < frederic . france @ free . fr >
2020-04-24 14:38:46 +02:00
*
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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2011-08-27 01:40:47 +02:00
*/
/**
* \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 )
{
2023-01-15 01:31:23 +01:00
return str_replace ( " ; " , " \ ; " , ( dol_quoted_printable_encode ( $string )));
2011-08-27 01:40:47 +02:00
}
/**
* 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
*/
2019-01-27 15:20:16 +01:00
function dol_quoted_printable_encode ( $input , $line_max = 76 )
2011-08-27 01:40:47 +02:00
{
2020-10-31 14:32:18 +01: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 = " " ;
$num = count ( $lines );
2021-02-23 22:03:23 +01:00
for ( $j = 0 ; $j < $num ; $j ++ ) {
2020-10-31 14:32:18 +01: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
2021-03-01 20:37:16 +01:00
$h2 = floor ( $dec / 16 );
$h1 = floor ( $dec % 16 );
2024-09-30 10:05:24 +02:00
$c = $escape . $hex [( int ) $h2 ] . $hex [( int ) $h1 ];
2020-10-31 14:32:18 +01:00
}
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 ;
2021-02-23 22:03:23 +01:00
if ( $j < count ( $lines ) - 1 ) {
$output .= $linebreak ;
}
2020-10-31 14:32:18 +01:00
}
return trim ( $output );
2011-08-27 01:40:47 +02:00
}
/**
2024-01-13 19:48:20 +01:00
* Class to build vCard files
2011-08-27 01:40:47 +02:00
*/
class vCard
{
2020-11-19 22:25:02 +01:00
/**
2024-09-30 10:05:24 +02:00
* @ var array < string , ? string > array of properties
2020-11-19 22:25:02 +01:00
*/
2020-10-31 14:32:18 +01:00
public $properties ;
2020-11-19 22:25:02 +01:00
/**
* @ var string filename
*/
2020-10-31 14:32:18 +01:00
public $filename ;
2020-11-19 22:25:02 +01:00
/**
* @ var string encoding
*/
2024-11-17 01:09:56 +01:00
public $encoding = " CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE " ;
2020-10-31 14:32:18 +01:00
/**
2024-08-31 18:18:45 +02:00
* Format phone number .
2020-10-31 14:32:18 +01:00
*
2024-09-20 00:32:44 +02:00
* @ param string $number numero de telephone
2023-01-07 18:35:26 +01:00
* @ param string $type Type ( 'cell' )
2020-10-31 14:32:18 +01:00
* @ return void
*/
public 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 " ;
2021-02-23 22:03:23 +01:00
if ( $type != " " ) {
$key .= " ; " . $type ;
}
2023-01-10 16:31:12 +01:00
$key .= " ;VALUE=uri " ;
//$key .= ";".$this->encoding;
$this -> properties [ $key ] = 'tel:' . $number ;
2020-10-31 14:32:18 +01:00
}
/**
2024-08-31 18:18:45 +02:00
* Format photo .
2020-10-31 14:32:18 +01:00
* warning NON TESTE !
*
2023-01-10 16:31:12 +01:00
* @ param string $type Type 'image/jpeg' or 'JPEG'
2020-10-31 14:32:18 +01:00
* @ param string $photo Photo
* @ return void
*/
public function setPhoto ( $type , $photo )
{
// $type = "GIF" | "JPEG"
2023-01-10 16:31:12 +01:00
//$this->properties["PHOTO;MEDIATYPE=$type;ENCODING=BASE64"] = base64_encode($photo);
$this -> properties [ " PHOTO;MEDIATYPE= $type " ] = $photo ; // must be url of photo
//$this->properties["PHOTO;TYPE=$type;ENCODING=BASE64"] = base64_encode($photo); // must be content of image
2020-10-31 14:32:18 +01:00
}
/**
2024-08-31 18:18:45 +02:00
* Format name .
2020-10-31 14:32:18 +01:00
*
* @ param string $name Name
* @ return void
*/
public function setFormattedName ( $name )
{
2024-10-06 21:08:40 +02:00
$stringencoded = encode ( $name );
$stringnotencoded = $name ;
$key = " FN " ;
if ( $stringencoded != $stringnotencoded ) {
$key .= " ; " . $this -> encoding ;
}
$this -> properties [ $key ] = $stringencoded ;
2020-10-31 14:32:18 +01:00
}
/**
2024-08-31 18:18:45 +02:00
* Format the name .
* Set also the filename to use 'firstname lastname.vcf'
2020-10-31 14:32:18 +01:00
*
* @ param string $family Family name
* @ param string $first First name
* @ param string $additional Additional ( e . g . second name , nick name )
2023-01-10 16:31:12 +01:00
* @ param string $prefix Title prefix ( e . g . " Mr. " , " Ms. " , " Prof. " )
2020-10-31 14:32:18 +01:00
* @ param string $suffix Suffix ( e . g . " sen. " for senior , " jun. " for junior )
* @ return void
*/
public function setName ( $family = " " , $first = " " , $additional = " " , $prefix = " " , $suffix = " " )
{
2023-01-10 16:31:12 +01:00
//$this->properties["N;".$this->encoding] = encode($family).";".encode($first).";".encode($additional).";".encode($prefix).";".encode($suffix);
2024-11-17 01:09:56 +01:00
$this -> properties [ " N; " . $this -> encoding ] = encode ( $family ) . " ; " . encode ( $first ) . " ; " . encode ( $additional ) . " ; " . encode ( $prefix ) . " ; " . encode ( $suffix );
2024-10-06 21:08:40 +02:00
2020-10-31 14:32:18 +01:00
$this -> filename = " $first %20 $family .vcf " ;
2024-10-06 21:08:40 +02:00
2021-02-23 22:03:23 +01:00
if ( empty ( $this -> properties [ " FN " ])) {
$this -> setFormattedName ( trim ( " $prefix $first $additional $family $suffix " ));
}
2020-10-31 14:32:18 +01:00
}
/**
2024-08-31 18:18:45 +02:00
* Format the birth date
2020-10-31 14:32:18 +01:00
*
* @ param integer $date Date
* @ return void
*/
public function setBirthday ( $date )
{
2023-01-10 16:31:12 +01:00
// $date format is YYYY-MM-DD - RFC 2425 and RFC 2426 for vcard v3
// $date format is YYYYMMDD or ISO8601 for vcard v4
$this -> properties [ " BDAY " ] = dol_print_date ( $date , 'dayxcard' );
2020-10-31 14:32:18 +01:00
}
/**
2023-01-15 01:25:07 +01:00
* Address
2020-10-31 14:32:18 +01: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
2023-01-07 18:35:26 +01:00
* @ param string $label Label
2020-10-31 14:32:18 +01:00
* @ return void
*/
2023-01-15 01:25:07 +01:00
public function setAddress ( $postoffice = " " , $extended = " " , $street = " " , $city = " " , $region = " " , $zip = " " , $country = " " , $type = " " , $label = " " )
2020-10-31 14:32:18 +01:00
{
// $type may be DOM | INTL | POSTAL | PARCEL | HOME | WORK or any combination of these: e.g. "WORK;PARCEL;POSTAL"
$key = " ADR " ;
2021-02-23 22:03:23 +01:00
if ( $type != " " ) {
2022-07-29 11:08:04 +02:00
$key .= " ; " . $type ;
2021-02-23 22:03:23 +01:00
}
2023-01-07 18:35:26 +01:00
if ( $label != " " ) {
$key .= ';LABEL="' . encode ( $label ) . '"' ;
}
2024-10-06 21:08:40 +02:00
$stringencoded = encode ( $postoffice ) . " ; " . encode ( $extended ) . " ; " . encode ( $street ) . " ; " . encode ( $city ) . " ; " . encode ( $region ) . " ; " . encode ( $zip ) . " ; " . encode ( $country );
$stringnotencoded = $postoffice . " ; " . $extended . " ; " . $street . " ; " . $city . " ; " . $region . " ; " . $zip . " ; " . $country ;
if ( $stringencoded != $stringnotencoded ) {
$key .= " ; " . $this -> encoding ;
}
$this -> properties [ $key ] = $stringencoded ;
2020-10-31 14:32:18 +01:00
2023-01-07 18:35:26 +01:00
//if ($this->properties["LABEL;".$type.";".$this->encoding] == '') {
2024-08-19 02:05:27 +02:00
//$this->setLabel($postoffice, $extended, $street, $city, $region, $zip, $country, $type);
2022-07-29 11:08:04 +02:00
//}
2020-10-31 14:32:18 +01:00
}
/**
2023-01-15 01:25:07 +01:00
* Address ( old standard )
2020-10-31 14:32:18 +01: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
2023-01-15 01:25:07 +01:00
* @ deprecated
2020-10-31 14:32:18 +01:00
*/
2023-01-07 18:35:26 +01:00
public function setLabel ( $postoffice = " " , $extended = " " , $street = " " , $city = " " , $region = " " , $zip = " " , $country = " " , $type = " HOME " )
2020-10-31 14:32:18 +01:00
{
$label = " " ;
2021-02-23 22:03:23 +01:00
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 " ;
}
2020-10-31 14:32:18 +01:00
2023-01-07 18:35:26 +01:00
$this -> properties [ " LABEL; $type ; " . $this -> encoding ] = encode ( $label );
2020-10-31 14:32:18 +01:00
}
/**
* Add a e - mail address to this vCard
*
* @ param string $address E - mail address
2023-06-09 15:12:34 +02:00
* @ param string $type ( optional ) The type of the e - mail ( typical " PREF " or " INTERNET " )
2020-10-31 14:32:18 +01:00
* @ return void
*/
2023-01-07 18:35:26 +01:00
public function setEmail ( $address , $type = " " )
2020-10-31 14:32:18 +01:00
{
$key = " EMAIL " ;
2024-10-06 21:08:40 +02:00
if ( $type === " PREF " ) {
2023-06-09 15:15:48 +02:00
$key .= " ;PREF=1 " ;
} elseif ( ! empty ( $type )) {
2024-10-06 21:08:40 +02:00
if ( stripos ( $type , 'TYPE=' ) === 0 ) {
$key .= " ; " . $type ;
} else {
$key .= " ;TYPE= " . dol_strtolower ( $type );
}
2021-02-23 22:03:23 +01:00
}
2020-10-31 14:32:18 +01:00
$this -> properties [ $key ] = $address ;
}
/**
* mise en forme de la note
*
* @ param string $note Note
* @ return void
*/
public function setNote ( $note )
{
2023-01-07 18:35:26 +01:00
$this -> properties [ " NOTE; " . $this -> encoding ] = encode ( $note );
2020-10-31 14:32:18 +01:00
}
/**
* mise en forme de la fonction
*
* @ param string $title Title
* @ return void
*/
public function setTitle ( $title )
{
2023-01-07 18:35:26 +01:00
$this -> properties [ " TITLE; " . $this -> encoding ] = encode ( $title );
2020-10-31 14:32:18 +01:00
}
/**
* mise en forme de la societe
*
* @ param string $org Org
* @ return void
*/
public function setOrg ( $org )
{
2023-01-07 18:35:26 +01:00
$this -> properties [ " ORG; " . $this -> encoding ] = encode ( $org );
2020-10-31 14:32:18 +01:00
}
/**
* mise en forme du logiciel generateur
*
* @ param string $prodid Prodid
* @ return void
*/
public function setProdId ( $prodid )
{
2023-01-10 16:31:12 +01:00
$this -> properties [ " PRODID " ] = encode ( $prodid );
2020-10-31 14:32:18 +01:00
}
/**
* mise en forme du logiciel generateur
*
* @ param string $uid Uid
* @ return void
*/
public function setUID ( $uid )
{
2023-01-10 16:31:12 +01:00
$this -> properties [ " UID " ] = encode ( $uid );
2020-10-31 14:32:18 +01:00
}
/**
* mise en forme de l ' url
*
* @ param string $url URL
* @ param string $type Type
* @ return void
*/
public function setURL ( $url , $type = " " )
{
// $type may be WORK | HOME
$key = " URL " ;
2021-02-23 22:03:23 +01:00
if ( $type != " " ) {
$key .= " ; $type " ;
}
2020-10-31 14:32:18 +01:00
$this -> properties [ $key ] = $url ;
}
/**
2024-08-31 18:18:45 +02:00
* Return string of a vcard
2020-10-31 14:32:18 +01:00
*
* @ return string
*/
public function getVCard ()
{
$text = " BEGIN:VCARD \r \n " ;
2023-01-07 18:35:26 +01:00
$text .= " VERSION:4.0 \r \n " ; // With V4, all encoding are UTF-8
2020-10-31 14:32:18 +01:00
//$text.= "VERSION:2.1\r\n";
2021-02-23 22:03:23 +01:00
foreach ( $this -> properties as $key => $value ) {
2024-11-17 01:09:56 +01:00
$newkey = preg_replace ( '/(?<!QUOTED|UTF)-.*$/' , '' , $key ); // remove suffix -twitter, -facebook, ...
2023-01-15 02:16:35 +01:00
$text .= $newkey . " : " . $value . " \r \n " ;
2020-10-31 14:32:18 +01:00
}
2023-01-10 16:31:12 +01:00
$text .= " REV: " . date ( " Ymd " ) . " T " . date ( " His " ) . " Z \r \n " ;
2023-01-07 18:35:26 +01:00
//$text .= "MAILER: Dolibarr\r\n";
2020-10-31 14:32:18 +01:00
$text .= " END:VCARD \r \n " ;
2024-08-31 18:18:45 +02:00
2020-10-31 14:32:18 +01:00
return $text ;
}
/**
2024-08-31 18:18:45 +02:00
* Return name of a file
2020-10-31 14:32:18 +01:00
*
* @ return string Filename
*/
public function getFileName ()
{
return $this -> filename ;
}
2020-04-24 14:38:46 +02:00
2023-01-07 04:05:59 +01:00
/**
* Return a VCARD string
2023-01-15 01:25:07 +01:00
* See RFC https :// datatracker . ietf . org / doc / html / rfc6350
2023-01-07 04:05:59 +01:00
*
2024-09-30 10:05:24 +02:00
* @ param User | Contact $object Object ( User or Contact )
* @ param ? Societe $company Company . May be null .
2023-01-10 16:31:12 +01:00
* @ param Translate $langs Lang object
* @ param string $urlphoto Full public URL of photo
2024-08-31 18:18:45 +02:00
* @ param string $outdir Directory where to store the temporary file
2023-01-10 16:31:12 +01:00
* @ return string String
2023-01-07 04:05:59 +01:00
*/
2024-08-31 18:18:45 +02:00
public function buildVCardString ( $object , $company , $langs , $urlphoto = '' , $outdir = '' )
2023-01-07 04:05:59 +01:00
{
2023-01-07 19:11:38 +01:00
global $dolibarr_main_instance_unique_id ;
2023-01-07 04:05:59 +01:00
$this -> setProdId ( 'Dolibarr ' . DOL_VERSION );
2024-10-06 21:08:40 +02:00
$this -> setUID ( 'DOL-USERID-' . dol_trunc ( md5 ( 'vcard' . $dolibarr_main_instance_unique_id ), 8 , 'right' , 'UTF-8' , 1 ) . '-' . $object -> id );
2023-01-07 04:05:59 +01:00
$this -> setName ( $object -> lastname , $object -> firstname , " " , $object -> civility_code , " " );
$this -> setFormattedName ( $object -> getFullName ( $langs , 1 ));
2023-01-10 16:31:12 +01:00
if ( $urlphoto ) {
$mimetype = dol_mimetype ( $urlphoto );
if ( $mimetype ) {
$this -> setPhoto ( $mimetype , $urlphoto );
}
}
if ( $object -> office_phone ) {
$this -> setPhoneNumber ( $object -> office_phone , " TYPE=WORK,VOICE " );
}
2024-10-06 21:08:40 +02:00
if ( $object -> office_fax ) {
$this -> setPhoneNumber ( $object -> office_fax , " TYPE=WORK,FAX " );
}
2023-01-10 16:31:12 +01:00
/* disabled
if ( $object -> personal_mobile ) {
$this -> setPhoneNumber ( $object -> personal_mobile , " TYPE=CELL,VOICE " );
} */
if ( $object -> user_mobile ) {
$this -> setPhoneNumber ( $object -> user_mobile , " TYPE=CELL,VOICE " );
}
if ( ! empty ( $object -> socialnetworks )) {
foreach ( $object -> socialnetworks as $key => $val ) {
2024-08-19 02:05:27 +02:00
if ( empty ( $val )) { // Discard social network if empty
2023-03-29 18:11:24 +02:00
continue ;
}
2023-01-10 16:31:12 +01:00
$urlsn = '' ;
if ( $key == 'linkedin' ) {
if ( ! preg_match ( '/^http/' , $val )) {
$urlsn = 'https://www.' . $key . '.com/company/' . urlencode ( $val );
} else {
$urlsn = $val ;
}
} elseif ( $key == 'youtube' ) {
if ( ! preg_match ( '/^http/' , $val )) {
$urlsn = 'https://www.' . $key . '.com/user/' . urlencode ( $val );
} else {
$urlsn = $val ;
}
} else {
if ( ! preg_match ( '/^http/' , $val )) {
$urlsn = 'https://www.' . $key . '.com/' . urlencode ( $val );
} else {
$urlsn = $val ;
}
}
if ( $urlsn ) {
2023-01-15 02:19:47 +01:00
$this -> properties [ " SOCIALPROFILE;TYPE=WORK- " . $key ] = $key . ':' . $urlsn ;
2023-01-10 16:31:12 +01:00
}
}
}
2023-01-07 04:05:59 +01:00
$country = $object -> country_code ? $object -> country : '' ;
2024-01-24 11:42:26 +01:00
// User address
2024-10-06 21:08:40 +02:00
$addressalreadyset = 0 ;
2024-01-24 11:42:26 +01:00
if ( ! ( $object -> element != 'user' ) || getDolUserInt ( 'USER_PUBLIC_SHOW_ADDRESS' , 0 , $object )) {
if ( $object -> address || $object -> town || $object -> state || $object -> zip || $object -> country ) {
$this -> setAddress ( " " , " " , $object -> address , $object -> town , $object -> state , $object -> zip , $country , " " );
2024-10-06 21:08:40 +02:00
$addressalreadyset = 1 ;
2024-01-24 11:42:26 +01:00
}
2023-01-10 16:31:12 +01:00
}
2023-01-07 04:05:59 +01:00
2023-01-10 16:31:12 +01:00
if ( $object -> email ) {
$this -> setEmail ( $object -> email , " TYPE=WORK " );
}
/* disabled
if ( $object -> personal_email ) {
$this -> setEmail ( $object -> personal_email , " TYPE=HOME " );
} */
2024-10-06 21:08:40 +02:00
/* if ( $object -> note_public ) {
2023-01-10 16:31:12 +01:00
$this -> setNote ( $object -> note_public );
2024-10-06 21:08:40 +02:00
} */
2023-01-10 16:31:12 +01:00
if ( $object -> job ) {
$this -> setTitle ( $object -> job );
}
2023-01-07 04:05:59 +01:00
2023-01-14 02:31:53 +01:00
// For user, $object->url is not defined
2023-01-10 16:31:12 +01:00
// For contact, $object->url is not defined
2023-01-14 02:31:53 +01:00
if ( ! empty ( $object -> url )) {
2023-01-10 16:31:12 +01:00
$this -> setURL ( $object -> url , " " );
}
2023-01-07 19:13:59 +01:00
if ( is_object ( $company )) {
2023-01-10 16:31:12 +01:00
// Si user linked to a thirdparty and not a physical people
if ( $company -> typent_code != 'TE_PRIVATE' ) {
$this -> setOrg ( $company -> name );
}
2023-01-07 19:13:59 +01:00
2024-11-24 13:39:16 +01:00
if ( ! empty ( $company -> url )) {
$this -> setURL ( $company -> url , " " );
}
2023-01-10 16:31:12 +01:00
2024-10-06 21:08:40 +02:00
if ( $company -> phone && empty ( $object -> office_phone )) { // If we already set the type TYPE=WORK,VOICE with office_phone
2023-01-07 18:35:26 +01:00
$this -> setPhoneNumber ( $company -> phone , " TYPE=WORK,VOICE " );
2023-01-07 04:05:59 +01:00
}
2024-10-06 21:08:40 +02:00
if ( $company -> fax && empty ( $object -> office_fax )) { // If we already set the type TYPE=WORK,FAX with office_phone
2023-01-07 18:35:26 +01:00
$this -> setPhoneNumber ( $company -> fax , " TYPE=WORK,FAX " );
2023-01-07 04:05:59 +01:00
}
2024-10-06 21:08:40 +02:00
if (( $company -> address || $company -> town || $company -> state || $company -> zip || $company -> country ) && ! $addressalreadyset ) {
2023-01-15 01:42:11 +01:00
$this -> setAddress ( " " , " " , $company -> address , $company -> town , $company -> state , $company -> zip , $company -> country , " TYPE=WORK " );
2023-01-07 04:05:59 +01:00
}
2024-10-06 21:08:40 +02:00
if ( $company -> email && empty ( $object -> email )) {
2023-01-07 04:05:59 +01:00
$this -> setEmail ( $company -> email , " TYPE=WORK " );
}
2023-01-10 16:31:12 +01:00
/*
if ( ! empty ( $company -> socialnetworks )) {
foreach ( $company -> socialnetworks as $key => $val ) {
$urlsn = '' ;
if ( $key == 'linkedin' ) {
if ( ! preg_match ( '/^http/' , $val )) {
$urlsn = 'https://www.' . $key . '.com/company/' . urlencode ( $val );
} else {
$urlsn = $val ;
}
} elseif ( $key == 'youtube' ) {
if ( ! preg_match ( '/^http/' , $val )) {
$urlsn = 'https://www.' . $key . '.com/user/' . urlencode ( $val );
} else {
$urlsn = $val ;
}
} else {
if ( ! preg_match ( '/^http/' , $val )) {
$urlsn = 'https://www.' . $key . '.com/' . urlencode ( $val );
} else {
$urlsn = $val ;
}
}
if ( $urlsn ) {
$this -> properties [ " socialProfile;type= " . $key ] = $urlsn ;
}
}
2023-01-07 04:05:59 +01:00
}
2023-01-10 16:31:12 +01:00
*/
2023-01-07 04:05:59 +01:00
}
2023-01-10 16:31:12 +01:00
// Birthday
2024-01-24 11:42:26 +01:00
if ( ! ( $object -> element != 'user' ) || getDolUserInt ( 'USER_PUBLIC_SHOW_BIRTH' , 0 , $object )) {
if ( $object -> birth ) {
$this -> setBirthday ( $object -> birth );
}
2023-01-07 04:05:59 +01:00
}
2024-08-31 18:18:45 +02:00
if ( $outdir ) {
$outfilename = $outdir . '/virtualcard_' . $object -> element . '_' . $object -> id . '.vcf' ;
file_put_contents ( $outfilename , $this -> getVCard ());
dolChmod ( $outfilename );
return $outfilename ;
}
2023-01-07 04:05:59 +01:00
// Return VCard string
return $this -> getVCard ();
}
2020-04-24 14:12:43 +02:00
/* Example from Microsoft Outlook 2019
2021-02-23 22:03:23 +01:00
BEGIN : VCARD
VERSION : 2.1
N ; LANGUAGE = de : surename ; forename ; secondname ; Sir ; jun .
FN : Sir surename secondname forename jun .
ORG : Companyname
TITLE : position
TEL ; WORK ; VOICE : work - phone - number
TEL ; HOME ; VOICE : private - phone - number
TEL ; CELL ; VOICE : mobile - phone - number
TEL ; WORK ; FAX : fax - phone - number
ADR ; WORK ; PREF : ;; street and number ; town ; region ; 012345 ; Deutschland
LABEL ; WORK ; PREF ; ENCODING = QUOTED - PRINTABLE : street and number = 0 D = 0 A =
= 0 D = 0 A =
012345 town region
X - MS - OL - DEFAULT - POSTAL - ADDRESS : 2
URL ; WORK : www . mywebpage . de
EMAIL ; PREF ; INTERNET : test1 @ test1 . de
EMAIL ; INTERNET : test2 @ test2 . de
EMAIL ; INTERNET : test3 @ test3 . de
X - MS - IMADDRESS : test @ jabber . org
REV : 20200424 T104242Z
END : VCARD
*/
2011-08-27 01:40:47 +02:00
}