Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
147 lines (131 sloc) 4.71 KB
<?php
require_once('inc/init.php');
require_once('inc/Contact_Vcard_Parse.php');
ldap_login();
if(!$_SESSION['ldapab']['username']){
header("Location: login.php");
exit;
}
$error = '';
if(isset($_FILES['userfile'])){
if (is_uploaded_file($_FILES['userfile']['tmp_name'])){
if(preg_match('/\.vcf$/i', $_FILES['userfile']['name'])){
//parse VCF
$vcfparser = new Contact_Vcard_Parse();
$vcards = $vcfparser->fromFile($_FILES['userfile']['tmp_name']);
}else{
$error = "Only *.vcf accepted";
}
}else{
switch($_FILES['userfile']['error']){
case 0: //no error; possible file attack!
$error = "There was a problem with your upload.";
break;
case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
$error = "The file you are trying to upload is too big.";
break;
case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
$error = "The file you are trying to upload is too big.";
break;
case 3: //uploaded file was only partially uploaded
$error = "The file you are trying upload was only partially uploaded.";
break;
case 4: //no file was uploaded
$error = "You must select a VCF file for upload.";
break;
default: //a default error, just in case! :)
$error = "There was a problem with your upload.";
break;
}
}
}
//prepare templates for all found entries
$list = '';
if(count($vcards)){
foreach ($vcards as $vcard){
$entry = vcard_entry($vcard);
$smarty->clear_all_assign();
tpl_std();
$smarty->assign('entry',$entry);
$list .= $smarty->fetch('import_entry.tpl');
}
}
//prepare templates
tpl_std();
tpl_orgs();
tpl_markers();
$smarty->assign('error',$error);
$smarty->assign('list',$list);
//display templates
$smarty->display('header.tpl');
$smarty->display('import.tpl');
$smarty->display('footer.tpl');
function vcard_entry($vcf){
$entry = array();
$entry['name'] = $vcf['N'][0]['value'][0][0];
$entry['givenname'] = trim($vcf['N'][0]['value'][1][0].' '.$vcf['N'][0]['value'][2][0]);
$entry['title'] = $vcf['N'][0]['value'][3][0];
$entry['organization'] = $vcf['ORG'][0]['value'][0][0];
$entry['office'] = $vcf['ORG'][0]['value'][1][0];
$entry['note'] = $vcf['NOTE'][0]['value'][0][0];
$entry['url'] = $vcf['URL'][0]['value'][0][0];
$entry['photo'] = $vcf['PHOTO'][0]['value'][0][0];
$bday = $vcf['BDAY'][0]['value'][0][0];
$entry['birthday'] = substr($bday,0,4).'-'.substr($bday,4,2).'-'.substr($bday,6,2);
foreach((array) $vcf['TEL'] as $tel){
if( empty($entry['phone']) &&
(my_array_search('WORK',(array) $tel['param']['TYPE']) != false ||
my_array_search('VOICE',(array) $tel['param']['TYPE']) != false))
{
// Work phone
$entry['phone'] = $tel['value'][0][0];
}elseif(empty($entry['fax']) &&
my_array_search('FAX',(array) $tel['param']['TYPE']) !== false){
$entry['fax'] = $tel['value'][0][0];
}elseif(empty($entry['mobile']) &&
my_array_search('CELL',(array) $tel['param']['TYPE']) !== false){
$entry['mobile'] = $tel['value'][0][0];
}elseif(empty($entry['pager']) &&
my_array_search('PAGER',(array) $tel['param']['TYPE']) !== false){
$entry['pager'] = $tel['value'][0][0];
}elseif(empty($entry['homephone']) &&
my_array_search('HOME',(array) $tel['param']['TYPE']) !== false &&
my_array_search('VOICE',(array) $tel['param']['TYPE']) !== false){
$entry['homephone'] = $tel['value'][0][0];
}
}
foreach((array) $vcf['EMAIL'] as $mail){
if (! in_array($mail['value'][0][0], (array)$entry['mail']))
$entry['mail'][] = $mail['value'][0][0];
}
foreach((array) $vcf['ADR'] as $adr){
if(my_array_search('HOME',(array)$adr['param']['TYPE']) !== false){
$entry['homestreet'] = $adr['value'][2][0]."\n". //str
$adr['value'][5][0]." ". //plz
$adr['value'][3][0]; //ort
}elseif(my_array_search('WORK',(array)$adr['param']['TYPE']) !== false){
$entry['street'] = $adr['value'][2][0];
$entry['location'] = $adr['value'][3][0];
$entry['zip'] = $adr['value'][5][0];
$entry['country'] = $adr['value'][6][0];
$entry['state'] = $adr['value'][4][0];
}
}
return $entry;
}
function my_array_search ($needle, $haystack)
{
foreach ($haystack as $value)
{
if ($value == $needle)
{
return true;
}
else if ($value == strtolower($needle))
{
return true;
}
}
return false;
}
?>