X-Git-Url: https://git.sur5r.net/?p=contagged;a=blobdiff_plain;f=entry.php;h=1e5e7552976de876ee184fccb105b3866df15614;hp=0b22eca1b21e9675a02ab1caf7d8d4607f288a5e;hb=HEAD;hpb=49b2955320c19e4e23097c66e438e51fdc70fc58 diff --git a/entry.php b/entry.php index 0b22eca..1e5e755 100644 --- a/entry.php +++ b/entry.php @@ -1,144 +1,147 @@ - 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(!empty($_REQUEST['del']) && $_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(); - tpl_categories(); - tpl_timezone(); - tpl_country(); - //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"); - $smarty->display($template); - }else{ - header('Content-Type: text/html; charset=utf-8'); - $smarty->display($template); +}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(!empty($_REQUEST['mode']) && $_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: - 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; + // 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']; } - - /** - * 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 in extended schema - } - - $entry = $_REQUEST['entry']; - $dn = $_REQUEST['dn']; - //construct new dn - $now = time(); - $newdn = 'uid='.$now; - if (empty($_REQUEST['type'])) { $_REQUEST['type']='public'; } - 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); + $entry['displayname'] = $entry['givenname'].' '.$entry['name'];; + $entry = prepare_ldap_entry($entry); /* print '
';
@@ -146,71 +149,103 @@ print_r($entry);
 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')); - } - // in openxchange mode we have to make sure the right classes are set - if ($conf['openxchange']){ - ldap_store_objectclasses($dn,array('inetOrgPerson','OXUserObject')); - } - //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 (empty($_REQUEST['delphoto'])) { $_REQUEST['delphoto']=0; } - 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 ''; +} +