Vcard for Company Directory output

Do something cool with CMS? Show us ...
This board is for 'Answers', and the discussion of answers... Not for questions.
Post Reply
JeremyBASS

Vcard for Company Directory output

Post by JeremyBASS »

Hello, so here as another simple trick to Vcard for Company Directory output...


UDT:    addContact

Code: Select all

$filename="uploads/companyContacts/".$params['ConName'].".vcf";

if(file_exists($filename)){

}else{

if(!file_exists("uploads/companyContacts/")){
     mkdir("uploads/companyContacts/", 0777);
}
	$ourFileName = $filename;
	$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
	fclose($ourFileHandle);

$event="BEGIN:VCARD
VERSION:2.1
N;LANGUAGE=en-us:".$params['Name']."
FN:".$params['Name']."
ORG:".$params['Name']."
TITLE:
TEL;WORK;VOICE:".$params['WORKVOICE']."
TEL;CELL;VOICE:
TEL;VOICE:
TEL;WORK;FAX:".$params['FAX']."
ADR;WORK:;;".$params['ADR']."
EMAIL;WORK:".$params['EMAIL']."
REV:20080724T183242Z
END:VCARD
";

	// GET LENGTH, AND STORE DATA TO OUR SERVER (OR DATA BASE)
    $len = strlen($event);
    $chk = file_put_contents($filename, $event);
    
    // TEST FOR SUCCESSFUL STORAGE
	if ($len!=$chk) die("LENGTH MISMATCH");
}
echo '<a href="'.$filename.'" target="_blank">'.$params['linktext'].'</a>';

In the cal template

Code: Select all

{assign var=company_id value=$entry->id}
{assign var=Name value=$entry->company_name}
{assign var=FName value="$Name-$company_id"|replace:" ":"-"|replace:"&":"N"}
{assign var=EMAIL value=$entry->company_name}
{assign var=ADR value=$entry->address|replace:",":";"}
{assign var=FAX value=$entry->fax}
{assign var=WORKVOICE value=$entry->telephone}
{assign var=altFront value='<img src="/images/cms/editbutton.png" alt="Add '}
{assign var=AltBack value=' To Contacts" />'}

{addContact ConName="$FName" Name="$Name" EMAIL=$EMAIL ADR=$ADR FAX=$FAX WORKVOICE=$WORKVOICE linktext=$altFront$Name$AltBack}



now if you don't want the image... change

Code: Select all

{assign var=altFront value='<img src="/images/cms/editbutton.png" alt="Add '}
{assign var=AltBack value=' To your Contacts" />'}



to

Code: Select all

{assign var=altFront value=''}
{assign var=AltBack value=''}



I will be cleaning this out more later... but.... simple dirty and gets the job done... you can view the output here,


http://98.129.105.20/

which will be come

http://www.northcentralidaho.org


Cheers
Jeremy

Please let me know
what programs you tried it in, any errors, etc... I have Outlook 2000 and 2007 confirmed working... but it should work with much more...


Compatible and tested with:
  • Outlook 2000
  • Outlook 2007


Note:
You may want to add this to your .htaccess or equal since there is iis users out there

Code: Select all

AddType application/octet-stream .vcf


You need to force the download since some browsers are not well debate who cares get the job done... ;) see ... I got your back

adjust to fit..
JeremyBASS

Re: Vcard for Company Directory output

Post by JeremyBASS »

Ok... one better ?? ... with an image... again if you have a better way to write it please feel free...

Code: Select all

{assign var=company_id value=$entry->id}
{assign var=Name value=$entry->company_name}
{assign var=FName value="$Name-$company_id"|replace:" ":"-"|replace:"&":"N"|replace:"/":"-"}
{assign var=EMAIL value=$entry->company_name}
{assign var=ADR value=$entry->address|replace:",":";"}
{assign var=FAX value=$entry->fax}
{assign var=WORKVOICE value=$entry->telephone}
{assign var=Logoimage value=$entry->logo_path}
{assign var=altFront value='<img src="/uploads/Vcal_N_vcard/vcard.png" alt="Add '}
{assign var=AltBack value=' To Contacts" />Add to your Contacts'}
<h3>{addContact ConName="$FName" Name="$Name" EMAIL=$EMAIL ADR=$ADR FAX=$FAX WORKVOICE=$WORKVOICE linktext=$altFront$Name$AltBack Logoimage=$Logoimage}</h3>




Code: Select all

$filename="uploads/companyContacts/".$params['ConName'].".vcf";

if(file_exists($filename)){

}else{

if(!file_exists("uploads/companyContacts/")){
     mkdir("uploads/companyContacts/", 0777);
}
	$ourFileName = $filename;
	$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
	fclose($ourFileHandle);
$insertablImage="";
$image=$params['Logoimage'];
if($image!=""){
	$handle = fopen($image, "rb");
	$img = stream_get_contents($handle);
	fclose($handle);	
	$encoded_image = base64_encode($img);
	$insertablImage = "PHOTO;TYPE=JPEG;ENCODING=BASE64:\r";
	$insertablImage .= $encoded_image;
}
$event="BEGIN:VCARD
VERSION:2.1
N;LANGUAGE=en-us:".$params['Name']."
FN:".$params['Name']."
ORG:".$params['Name']."
TITLE:
$insertablImage
TEL;WORK;VOICE:".$params['WORKVOICE']."
TEL;CELL;VOICE:
TEL;VOICE:
TEL;WORK;FAX:".$params['FAX']."
ADR;WORK:;;".$params['ADR']."
EMAIL;WORK:".$params['EMAIL']."
TZ:-0700 
REV:20080724T183242Z
END:VCARD
";

	// GET LENGTH, AND STORE DATA TO OUR SERVER (OR DATA BASE)
    $len = strlen($event);
    $chk = file_put_contents($filename, $event);
    
    // TEST FOR SUCCESSFUL STORAGE
	if ($len!=$chk) die("LENGTH MISMATCH");
}
echo '<a href="'.$filename.'" target="_blank" class="block">'.$params['linktext'].'</a>';




outputing something like this...

BEGIN:VCARD
VERSION:2.1
N;LANGUAGE=en-us:Canyon House
FN:Canyon House
ORG:Canyon House
TITLE:
PHOTO;TYPE=JPEG;ENCODING=BASE64:
/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEcEjOwoTAzDkQRczbpSVawCqnDhkXpVONwdYLRFjCDMddUnHgoxazv
UTxl9lYU/bn+d1rtBYYAEobqg0udBm0o1rEUID6LaTzn4Gh5AgSUbIRNeHSBbpAc75tYEOgekwRYKerrQKZAfnF8rUpYI2BS8Fqj+KpkZV
tQglBo/QB8UPs8Aphu2vAU2Snx/1up5VGZDTarGn7SyvzmEiDhUaSUwmaqe2uen0CBN5WwFggRIKqsLKiAA0ovACi0rCKIEIAUUnWUQ+e
lwKTJzgWzDJxGHGm04UDg3/Z6AKJ4Ki+Qz9OK/vzj6enj5lH/r6B6RXrtSwDSB/00vx/5cOmbg3gfhpFoG3k6ghQNmDB3ogUi8C6IMe7Hl2p
HEgvnYZkek08xAqIpgmByW/EdLcoVLyov1wgJYoSOq0QjlnXORJ2GEaF1+C5hxINvNYpxHtMupajELA2yoJYBnAvBz3rDWbMsIT2kLQBheI
2W2/eDdBqvPJ6K+IhApR7J0YsHQerXcjUJoeHcXNzzJYl37R9inDFTK0wxSqvnyLoecTOrQ9iLPzJA2GKKt6Y4aHND9t7n/lzvQSs1q3h6Aeko
HOHR1wQEMVz744KKAweCJhZfbiWLiQI5AiuudSkRpxZR8y9tWA8MQ8QSnHLVe+A2wUD96v3JgFoYHTsC0qCVJfCPnILLhUqQBXrkZdB4
y/ATiUD4NI4YMTQg5wifRf89FDCKmQDrnVBQrjBhev9IrcyW0NA4oPl5xOgHWypmZVsNw35a60nPvOUJWk6+EXr44TFqBqeE1gCSC+KFpL
nx+11r/Fg+cQQsmFJMohxGVK4LjlK8q/Yj9hz6biIcmaEBBztpdABEqZiX54RufvjGBTtJ/hCePudno/r1hEgkl8Pv37A/rTkvzs+jPFCoqipfjug7Tv/A
MqGUQsygEUxws9NqWg21cWlEj7brFNV1qeuZObSIvOo31Xv4NbFhUBBBQVAUoKwcVnohBWAwIAUDFgYVP5UTtigfNYwS8IePQQ/VfBSP
3h7QL57nNJiiCvgf8sqtisC2C1a47ZgbhxcyWHjDvjP8c8BvB8qU+4TI/vvUwYHi0UTAFE3UPT7ZT8TvgnteVXtmWEW9PhRzh9p/wBRIr+tP3r
HRIuOL8Qe+Q1eCXwi1tRaJwoTwBAUoI1Y4v422wV4KRAY2U+K9S5ZntAq/wBisekD+Go3IAS7T0YXit9fC7/DacEm+gPSVtb0fF/6hQRvklx
kAG4BCfYvabaqajWK29mJpPy9NO0tnjS2owgAIaRdZaWjDHWIoQyraRQYAb8kM/TKi2gBQAyFD2CNogIBHlZBCrfBED4GgcAOYWGEfQSBeRJ
OWt/7RAGlzpIaLSglCz4WAVMpYf8Agv/Z
TEL;WORK;VOICE:866.330.2777
TEL;CELL;VOICE:
TEL;VOICE:
TEL;WORK;FAX:
ADR;WORK:;;124 White Bird Road;White Bird ID 83554
EMAIL;WORK:Canyon House
TZ:-0700
REV:20080724T183242Z
END:VCARD

Last edited by JeremyBASS on Tue Oct 06, 2009 5:16 am, edited 1 time in total.
JeremyBASS

Re: Vcard for Company Directory output

Post by JeremyBASS »

Here is another suggested change... replace the top with

Code: Select all

global $gCms;
$config =& $gCms->GetConfig(); 

$filename=$config['uploads_path']."/companyContacts/".$params['ConName'].".vcf";

if(file_exists($filename)){

}else{

if(!file_exists($config['uploads_path']."/companyContacts/")){
     mkdir($config['uploads_path']."/companyContacts/", 0777);
}

also the $filename in the echo at the bottom need to be

$config['uploads_url']."/companyContacts/".$params['ConName'].".vcf"


I have my uploads in a subdomain served cookie free.. Cheers
Jeremy
Last edited by JeremyBASS on Sat Oct 10, 2009 9:32 pm, edited 1 time in total.
User avatar
amh
Forum Members
Forum Members
Posts: 187
Joined: Sun Apr 17, 2005 2:40 pm
Location: Germany -- Augsburg

Re: Vcard for Company Directory output

Post by amh »

Hi Jeremy,
this is really great and exactly what I was looking for. I tried copy and paste, but only an empty vCard appears. I used your 2nd Version because this

Code: Select all

echo '<a href=".$config['uploads_url']."/companyContacts/".$params['ConName'].".vcf" target="_blank" class="block">'.$params['linktext'].'</a>';
produces an error at me.
Can you please tell me what I did wrong?

Best regards Andreas
JeremyBASS

Re: Vcard for Company Directory output

Post by JeremyBASS »

Hello, here is the latest I'm using that in not in module form... I plan on making a module.. you can look to iCal module to get the idea of what it'll be like when done.. but.. I have yet to do the mod less someone wants to pay for the time to do it now. So here is the udt I use now.

Code: Select all

global $gCms;
$config =& $gCms->GetConfig(); 

$filename=$config['uploads_path']."/companyContacts/".$params['ConName'].".vcf";
$Dfilename=$config['uploads_url']."/companyContacts/".$params['ConName'].".vcf";
if(file_exists($filename)){

}else{

if(!file_exists($config['uploads_path']."/companyContacts/")){
     mkdir($config['uploads_path']."/companyContacts/", 0777);
}

$image = $config['root_path'].$params['PHOTO'];
if($image!=''){
$imagetypes = array
(
    IMAGETYPE_JPEG => 'JPEG',
    IMAGETYPE_GIF  => 'GIF',
    IMAGETYPE_PNG  => 'PNG'
);
$imageinfo = @getimagesize($image) ;

    $photo = base64_encode(file_get_contents($image));
    $type  = $imagetypes[$imageinfo[2]];

    $vcardPHOTO.= sprintf("PHOTO;TYPE=$type;ENCODING=BASE64:"); 


$i=0; 
$strphoto=sprintf($photo); 

while($i<strlen($strphoto)) 
{ 
  if($i%75==0) 
    $vcardPHOTO.="\r\n ".$strphoto[$i]; 
  else  
    $vcardPHOTO.=$strphoto[$i]; 
       
$i++; 
}  

} 

$event="BEGIN:VCARD\r\n
VERSION:2.1\r\n
N;LANGUAGE=en-us:".$params['Name']."\r\n
FN:".$params['Name']."\r\n
ORG:Customized Energy Solutions\r\n
URL;WORK:http://ces-ltd.com\n
TITLE:".$params['TITLE']."\r\n
$vcardPHOTO\r\n
TEL;WORK;VOICE:".$params['WORKVOICE']."\r\n
TEL;CELL;VOICE:\r\n
TEL;VOICE:\r\n
TEL;WORK;FAX:".$params['FAX']."\r\n
ADR;WORK:;;".$params['ADR']."\r\n
EMAIL;WORK:".$params['EMAIL']."\r\n
NOTE;CHARSET=UTF-8:".$params['NOTE']."\r\n
TZ:-0700 \r\n
REV:20080724T183242Z\r\n
END:VCARD\r\n
";

	// GET LENGTH, AND STORE DATA TO OUR SERVER (OR DATA BASE)
    $len = strlen($event);
    $chk = file_put_contents($filename, $event);
    
    // TEST FOR SUCCESSFUL STORAGE
	if ($len!=$chk) die("LENGTH MISMATCH");
}
echo '<a href="'.$Dfilename.'" target="_blank" class="block">'.$params['linktext'].'</a>';



and an example of what would go in the template.. (Company directory detail template example)

Code: Select all

{assign var=ext value="Ext."}
{assign var=ext value=$entry->customfieldsbyname.$ext}
{assign var=Direct value="Direct Number"}
{assign var=Direct value=$entry->customfieldsbyname.$Direct}

{if $ext !=''}{assign var=ext value=" Ex: $ext"}{/if}
{assign var=Direct value=$Direct$ext}


{assign var=company_id value=$entry->id}
{assign var=Name value=$entry->employee_name}
{assign var=FName value="$Name-$company_id"|replace:" ":"-"|replace:"&":"N"|replace:"/":"-"}
{assign var=TITLE value=$entry->customfieldsbyname.Job_Title}
{assign var=EMAIL value=$entry->contact_email}
{assign var=ADR value=$entry->address}
{assign var=FAX value=$entry->fax}
{assign var=WORKVOICE value=$Direct}


{capture assign=mainImage}{if $entry->picture_location==''}/uploads/energyTheme/man-comingsoon.png{else}{$entry->picture_path}{/if}{/capture}


{supersizer path=$mainImage|replace:'www.ces-ltd.com/':'' width=150 url=true quality=90 prefix=$entry->employee_name|replace:' ':'-' assign=MAINPHOTO root='/uploads/' cachebuster=false}
{assign var=PHOTO value=$MAINPHOTO}
{assign var=NOTE value=$entry->details|strip_tags|html_entity_decode|htmlspecialchars_decode}

{assign var=altFront value='<img src="uploads/energyTheme/_blank.gif" width="37px" height="23px" alt="'}
{assign var=AltBack value='" style="position:absolute; top:5px;right:35px;background: transparent url(/uploads/energyTheme/Sprit_bottons.png) no-repeat -357px -247px;" />'}


now that does add an image via the plugin supersizer.. you can see the output here.. http://www.ces-ltd.com/company/company-search.html the little Vcard icon.. and that is it.. but with the long part to put in the template that is why a module would be better so you'd only need to put in {vCard id=1} and the Vcard profile with id of 1 would be used to produce that set of cards, and you could have all different sets that way.

HTH Cheers -Jeremy
User avatar
amh
Forum Members
Forum Members
Posts: 187
Joined: Sun Apr 17, 2005 2:40 pm
Location: Germany -- Augsburg

Re: Vcard for Company Directory output

Post by amh »

Thanks! Thanks! Thanks!

A little tip for the Module: Please make the link more flexible to put an image instead of text more easy. Like:
<a class="myClass" href="{$item->cardURL}" title=""><img src="" alt="" title="" /></a>

OT: I can’t use you iCal-Module. The Admin-Panel is not usable in 1.8.2.


best regards Andreas
Post Reply

Return to “Tips and Tricks”