Access Denied';
exit();
}
$FIELD = preg_replace('/entry\[/','',$_REQUEST['field']);
$FIELD = preg_replace('/\W+/','',$FIELD);
if($_REQUEST['dn'] && $_REQUEST['addnote']){
ajax_addnote($_REQUEST['dn'],$_REQUEST['addnote']);
}elseif($_REQUEST['dn'] && $_REQUEST['settags']){
ajax_settags($_REQUEST['dn'],$_REQUEST['settags']);
}elseif($_REQUEST['dn'] && $_REQUEST['loadtags']){
ajax_loadtags($_REQUEST['dn'],$_REQUEST['loadtags']);
}elseif($FIELD == 'marker'||$FIELD == 'markers'){
ajax_taglookup($_REQUEST['value']);
}else{
ajax_lookup($FIELD,$_REQUEST['value']);
}
/**
* Add a note to the existing notes
*/
function ajax_addnote($dn,$note){
global $conf;
global $LDAP_CON;
global $FIELDS;
header('Content-Type: text/html; charset=utf-8');
// fetch the existing note
$result = ldap_search($LDAP_CON,$dn,'(objectClass=inetOrgPerson)',array($FIELDS['note']));
if(ldap_count_entries($LDAP_CON,$result)){
$result = ldap_get_binentries($LDAP_CON, $result);
}
$note = $note."\n\n".$result[0][$FIELDS['note']][0];
$note = preg_replace("!\n\n\n+!","\n\n",$note);
$entry[$FIELDS['note']] = $note;
ldap_modify($LDAP_CON,$dn,$entry);
require_once(dirname(__FILE__).'/inc/smarty/plugins/modifier.noteparser.php');
print smarty_modifier_noteparser($note);
}
/**
* Set tags for a contact
*/
function ajax_settags($dn,$tags){
global $conf;
global $LDAP_CON;
global $FIELDS;
if(!$FIELDS['_marker']) return;
header('Content-Type: text/html; charset=utf-8');
$tags = explode(',',$tags);
$tags = array_map('trim',$tags);
$tags = array_unique($tags);
$tags = array_diff($tags, array('')); //strip empty ones
$entry[$FIELDS['_marker']] = $tags;
ldap_mod_replace($LDAP_CON,$dn,$entry);
foreach ($tags as $tag){
print '';
print htmlspecialchars($tag);
print ' ';
}
}
/**
* Load current tags of an entry
*/
function ajax_loadtags($dn,$type='plain'){
global $conf;
global $LDAP_CON;
global $FIELDS;
if(!$FIELDS['_marker']) return;
header('Content-Type: text/html; charset=utf-8');
$sr = ldap_search($LDAP_CON,$dn,'(objectClass=inetOrgPerson)',array($FIELDS['_marker']));
if(!ldap_count_entries($LDAP_CON,$sr)) return false;
$result = ldap_get_binentries($LDAP_CON, $sr);
$entry = $result[0];
if($type == 'plain'){
echo join(', ',(array) $entry[$FIELDS['_marker']]);
}else{
foreach ((array) $entry[$FIELDS['_marker']] as $tag){
echo '';
echo htmlspecialchars($tag);
echo ' ';
}
}
}
/**
* Find all tags (markers) starting with the given
* string
*/
function ajax_taglookup($tag){
header('Content-Type: text/xml; charset=utf-8');
global $conf;
global $LDAP_CON;
global $FIELDS;
if(!$FIELDS['_marker']) return;
$search = ldap_filterescape($tag);
$filter = "(&(objectClass=inetOrgPerson)(".$FIELDS['_marker']."=$search*))";
$result = ldap_queryabooks($filter,$FIELDS['_marker']);
if(!count($result)) return;
$tags = array();
foreach ($result as $entry){
if(count($entry[$FIELDS['_marker']])){
foreach($entry[$FIELDS['_marker']] as $marker){
if(preg_match('/^'.preg_quote($tag,'/').'/i',$marker)){
array_push($tags, strtolower($marker));
}
}
}
}
$tags = array_unique($tags);
sort($tags,SORT_STRING);
echo ''.NL;
echo ''.NL;
foreach($tags as $out){
echo '- '.NL;
echo ''.htmlspecialchars($out).''.NL;
echo ''.htmlspecialchars($out).''.NL;
echo '
'.NL;
}
echo ''.NL;
}
/**
* Do a simple lookup in any simple field
*/
function ajax_lookup($field,$search){
header('Content-Type: text/xml; charset=utf-8');
global $conf;
global $LDAP_CON;
global $FIELDS;
if(!$FIELDS[$field]) return;
$field = $FIELDS[$field];
$search = ldap_filterescape($search);
$filter = "(&(objectClass=inetOrgPerson)($field=$search*))";
$result = ldap_queryabooks($filter,$field);
if(!count($result)) return;
$items = array();
foreach ($result as $entry){
if(isset($entry[$field]) && !empty($entry[$field])){
$items[] = $entry[$field][0];
}
}
$items = array_unique($items);
sort($items,SORT_STRING);
echo ''.NL;
echo ''.NL;
foreach($items as $out){
echo '- '.NL;
echo ''.htmlspecialchars($out).''.NL;
echo ''.htmlspecialchars($out).''.NL;
echo '
'.NL;
}
echo ''.NL;
}
?>