X-Git-Url: https://git.sur5r.net/?p=contagged;a=blobdiff_plain;f=entry.php;h=1e5e7552976de876ee184fccb105b3866df15614;hp=a8550534f7a76ae47b86bc91c8c3d786e3431239;hb=HEAD;hpb=aa36c490d2218814cb6faa20e31c10b5599d4483 diff --git a/entry.php b/entry.php index a855053..1e5e755 100644 --- a/entry.php +++ b/entry.php @@ -1,186 +1,251 @@ - clean it up (trim, unique, sort) + $_REQUEST['entry'][$field] = array_map('trim',$_REQUEST['entry'][$field]); + $_REQUEST['entry'][$field] = array_unique($_REQUEST['entry'][$field]); + $_REQUEST['entry'][$field] = array_filter($_REQUEST['entry'][$field]); + natcasesort($_REQUEST['entry'][$field]); + } } + $dn = _saveData(); +} - if(empty($dn)){ - if(!$_REQUEST[mode]=='edit'){ - $smarty->assign('error','No dn was given'); - $template = 'error.tpl'; - } - }elseif($_REQUEST[del]){ - _delEntry($dn); - }elseif(!_fetchData($dn)){ - $smarty->assign('error',"The requested entry '$dn' was not found"); +if(empty($dn)){ + if(!$_REQUEST['mode']=='edit'){ + $smarty->assign('error','No dn was given'); $template = 'error.tpl'; } - - //prepare templates - $smarty->assign('dn',$dn); - $smarty->assign('managers',$users); - tpl_std(); - tpl_orgs(); - tpl_markers(); - //display templates - if($_REQUEST[mode]=='vcf'){ - $entry = $smarty->get_template_vars('entry'); - $filename = $entry[givenname].'_'.$entry[name].'.vcf'; - header("Content-Disposition: attachment; filename=\"$filename\""); - header("Content-type: text/x-vcard; name=\"$filename\""); - $smarty->display($template); - }else{ - $smarty->display('header.tpl'); - $smarty->display($template); - $smarty->display('footer.tpl'); +}elseif(!empty($_REQUEST['del']) && $_REQUEST['del']){ + _delEntry($dn); +}elseif(!_fetchData($dn)){ + $smarty->assign('error',"The requested entry '$dn' was not found"); + $template = 'error.tpl'; +} + +//prepare templates +$smarty->assign('dn',$dn); +$smarty->assign('managers',$users); +tpl_std(); +//display templates +if($_REQUEST['mode']=='vcf'){ + $entry = $smarty->get_template_vars('entry'); + $filename = $entry['givenname'].'_'.$entry['name'].'.vcf'; + header("Content-Disposition: attachment; filename=\"$filename\""); + header("Content-type: text/x-vcard; name=\"$filename\"; charset=utf-8"); + $output = $smarty->fetch($template) . "\n"; + $output = str_replace("\n", "\r\n", $output); + echo $output; +}else{ + header('Content-Type: text/html; charset=utf-8'); + $smarty->display($template); +} + +//-------------------------------------------------------------- + +/** + * fetches the Data from the LDAP directory and assigns it to + * the global smarty object using tpl_entry() + */ +function _fetchData($dn){ + global $LDAP_CON; + global $conf; + global $smarty; + global $users; //contains the users for manager role + + $sr = @ldap_search($LDAP_CON,$dn,'(objectClass=inetOrgPerson)'); + tpl_ldaperror(); + if(!@ldap_count_entries($LDAP_CON,$sr)){ + return false; } + $result = ldap_get_binentries($LDAP_CON, $sr); + $entry = $result[0]; - //-------------------------------------------------------------- - - /** - * fetches the Data from the LDAP directory and assigns it to - * the global smarty object using tpl_entry() - */ - function _fetchData($dn){ - global $LDAP_CON; - global $conf; - global $smarty; - global $users; //contains the users for manager role - - $sr = ldap_search($LDAP_CON,$dn,'(objectClass=inetOrgPerson)'); - if(!ldap_count_entries($LDAP_CON,$sr)){ - return false; - } - $result = ldap_get_binentries($LDAP_CON, $sr); - $entry = $result[0]; - - //remove dn from entry when copy - if($_REQUEST[mode] == 'copy'){ - $entry[dn]=''; - } + //remove dn from entry when copy + if(!empty($_REQUEST['mode']) && $_REQUEST['mode'] == 'copy'){ + $entry['dn']=''; + } - //assign entry to template: - tpl_entry($entry); + //assign entry to template: + tpl_entry($entry); /*print '
';
 print_r($entry);
 print '
';*/ - // make username from dn for manager: - $smarty->assign('managername',$users[$entry[manager][0]]); - return true; + // make username from dn for manager: + if (empty($entry['manager'])) { $entry['manager']=array(""); } + if (empty($users[$entry['manager'][0]])) { $users[$entry['manager'][0]]=''; } + $smarty->assign('managername',$users[$entry['manager'][0]]); + return true; +} + +/** + * saves the data from $_REQUEST['entry'] to the LDAP directory + * + * returns given or constructed dn + */ +function _saveData(){ + global $LDAP_CON; + global $conf; + global $FIELDS; + global $OCLASSES; + + $entry = $_REQUEST['entry']; + $dn = $_REQUEST['dn']; + //construct new dn + $new_uid = time().str_pad(mt_rand(0,99999999),8,"0", STR_PAD_LEFT); + $newdn = 'uid='.$new_uid; + if (empty($_REQUEST['type'])) { $_REQUEST['type']='public'; } + if($_REQUEST['type'] == 'private' && $conf['privatebook']){ + $newdn .= ','.$conf['privatebook'].','.$_SESSION['ldapab']['binddn']; + }else{ + $newdn .= ','.$conf['publicbook']; } + $entry['displayname'] = $entry['givenname'].' '.$entry['name'];; + $entry = prepare_ldap_entry($entry); - /** - * saves the data from $_REQUEST[entry] to the LDAP directory - * - * returns given or constructed dn - */ - function _saveData(){ - global $LDAP_CON; - global $conf; - $entries = namedentries(); - $entries['mail']='mail'; //special field mail isn't in entries so we add it here - if($conf[extended]){ - $entries['marker']='marker'; //same for marker inextended schema - } - - $entry = $_REQUEST[entry]; - $dn = $_REQUEST[dn]; - //construct new dn - $now = time(); - $newdn = 'uid='.$now; - if($_REQUEST[type] == 'private'){ - $newdn .= ', '.$conf[privatebook].', '.$_SESSION[ldapab][binddn]; - }else{ - $newdn .= ', '.$conf[publicbook]; - } - $entry[cn] = $entry[givenname].' '.$entry[name];; - $entry = prepare_ldap_entry($entry); - -/*print '
';
+/*
+print '
';
 print_r($entry);
-print '
';*/ +print '
'; +*/ - if(empty($dn)){ - //new entry - $entry[uid][] = $now; - $r = ldap_add($LDAP_CON,$newdn,$entry); - tpl_ldaperror(); - return $newdn; - }else{ - // in extended mode we have to make sure the right classes are set - if($conf[extended]){ - ldap_store_objectclasses($dn,array('inetOrgPerson','contactPerson')); - } - //modify entry (touches only our attributes) - foreach (array_keys($entries) as $key){ - if($key == 'dn'){ + if(empty($dn)){ + //new entry + $entry['uid'][] = $new_uid; + $r = @ldap_add($LDAP_CON,$newdn,$entry); + tpl_ldaperror(); + return $newdn; + }else{ + // update the objectClasses + ldap_store_objectclasses($dn,$OCLASSES); + unset($entry['objectclass']); + + //modify entry attribute by attribute - this ensure we don't delete unknown stuff + foreach (array_values($FIELDS) as $key){ + if($key == 'dn'){ + continue; + }elseif(empty($entry[$key])){ + // field is empty -> handle deletion (except for photo unless deletion triggered) + if (empty($_REQUEST['delphoto'])) { $_REQUEST['delphoto']=0; } + if($key == 'jpegPhoto' && !$_REQUEST['delphoto']){ continue; - }elseif(empty($entry[$key])){ - if($key == 'jpegPhoto' && !$_REQUEST['delphoto']){ - continue; - } - unset($del); - $del[$key]=array(); - $r = @ldap_mod_replace($LDAP_CON,$dn,$del); - tpl_ldaperror("del $key"); - }else{ - unset($add); - $add[$key]=$entry[$key]; - $r = @ldap_mod_replace($LDAP_CON,$dn,$add); - tpl_ldaperror("mod $key"); } + unset($del); + $del[$key]=array(); + $r = @ldap_mod_replace($LDAP_CON,$dn,$del); + tpl_ldaperror("del $key"); + }else{ + unset($add); + $add[$key]=$entry[$key]; + $r = @ldap_mod_replace($LDAP_CON,$dn,$add); + tpl_ldaperror("mod $key"); } - return $dn; } - } - /** - * does as the name says - delete the whole entry - */ - function _delEntry($dn){ - global $LDAP_CON; - if(ldap_full_delete($LDAP_CON,$dn,true)){ - header("Location: index.php"); - exit; + // special tag handling for Thunderbird + if($conf['tbtaghack'] && in_array('contactPerson',$OCLASSES)){ + for($i=1;$i<5;$i++){ + if(empty($entry["custom$i"])){ + // deletion + unset($del); + $del["custom$i"]=array(); + $r = @ldap_mod_replace($LDAP_CON,$dn,$del); + tpl_ldaperror("del custom$i"); + }else{ + // modification + unset($add); + $add["custom$i"]=$entry["custom$i"]; + $r = @ldap_mod_replace($LDAP_CON,$dn,$add); + tpl_ldaperror("mod custom$i"); + } + } } - } - /** - * gets the binary data from an uploaded file - */ - function _getUploadData(){ - $file = $_FILES[photoupload]; - - if (is_uploaded_file($file[tmp_name])) { - if(preg_match('=image/p?jpe?g=',$file[type])){ - $fh = fopen($file[tmp_name],'r'); - $data = fread($fh,$file[size]); - fclose($fh); - unlink($file[tmp_name]); - return $data; - } + + return $dn; + } +} + +/** + * does as the name says - delete the whole entry + */ +function _delEntry($dn){ + global $LDAP_CON; + if(ldap_full_delete($LDAP_CON,$dn,true)){ + header("Location: index.php"); + exit; + } +} + +/** + * gets the binary data from an uploaded file + */ +function _getUploadData(){ + global $smarty; + global $lang; + $file = $_FILES['photoupload']; + + if (is_uploaded_file($file['tmp_name'])) { + if(preg_match('=image/p?jpe?g=',$file['type'])){ + $fh = fopen($file['tmp_name'],'r'); + $data = fread($fh,$file['size']); + fclose($fh); + unlink($file['tmp_name']); + return $data; + } else { + $smarty->assign('jpegError',$lang['err_wrongFileType']); } - return ''; + } elseif (preg_match('/http:\/\//', $_REQUEST["photo"])) { + $fd = fopen($_REQUEST["photo"], "rb"); + $data = ''; + while (!feof($fd)) { + $data .= fread($fd, 8192); + } + fclose($fd); + return $data; + } else { + $smarty->assign('jpegError',$lang['err_fileNotUploaded']); } -?> + return ''; +} +