#!/usr/bin/php
<?php
/**
* @author Bettina Schwarzer, Fritz-Haber-Institut
* @copyright 11/2014
*
* Uebertragen von Telefon-Nr. je Mitarbeiter nach LDAP
*/
error_reporting(E_ALL ^ E_NOTICE);
function ldap_replace($sn,$gn,$mail,$tel)
{
/** ersetzt bestehende Eintraege von LDAP-Objektklassen
* erstellt weiteres Attribut zu Telefon
*
* Parameter
* $sn
* $gn - givenName
* $tel[] - telephonNumber
* */
global $ldapconn;
global $ldapbd;
if ($ldapbd)
{
$base="ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
$uid = ldap_search_uid($sn,$gn,$mail);
//Parameter abfragen
if ($uid)
{
$dn = "uid=".$uid .",ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
/*
$su = array("ä","ö","ü","ß","Ä","Ö","Ü");
$rp = array("ae","oe","ue","ss","Ae","Oe","Ue");
$gn = str_replace($su,$rp,$gn);
$sn = str_replace($su,$rp,$sn);
$entry["sn"] = $sn;
$entry["givenName"] = $gn;
// print_r ($entry); echo "ldapconn=$ldapconn: single<br />";
$result1 = ldap_mod_replace($ldapconn, $dn, $entry);
if (!$result1)
{
printf("LDAP-Fehlernummer replace: %s<br>\n", ldap_errno($ldapconn));
printf("LDAP-Fehler replace: %s<br>\n", ldap_error($ldapconn));
}
*/
if (is_array($tel) && $tel)
{
$entry2["telephoneNumber"] = array();
$afields = array ("telephoneNumber");
$searcht = @ldap_search($ldapconn,$dn,"(telephoneNumber=*)",$afields);
// echo "anzahl telefonNumber=" . ldap_count_entries($ldapconn,$searcht)."<br />";
if (ldap_count_entries($ldapconn,$searcht))
{
$result = ldap_mod_del($ldapconn, $dn, $entry2);
if (!$result && ldap_errno($ldapconn) <> 16)
{
printf("LDAP-Fehlernummer del: %s<br>\n", ldap_errno($ldapconn));
printf("LDAP-Fehler deltel: %s<br>\n", ldap_error($ldapconn));
}
}
foreach ($tel as $telf)
{
if ($telf > "!") $entry2["telephoneNumber"][] = $telf;
}
}
$result2 = ldap_mod_add($ldapconn, $dn, $entry2);
if (!$result2)
{
printf("LDAP-Fehlernummer add: %s<br>\n", ldap_errno($ldapconn));
printf("LDAP-Fehler addtel: %s<br>\n", ldap_error($ldapconn));
return 0;
}
return 1;
}
else
{
echo "Mitarbeiter '".$gn ." " . $sn ."' konnte nicht identifiziert werden.<br />";
return 1;
}
}
}
function ldap_search_uid($sn,$gn,$mail)
{
/** Sucht uid des gegebenen Nutzers
*
* Parameter
* $sn
* $gn - givenName
* */
global $ldapconn;
global $ldapbd;
if ($ldapbd)
{
$base="ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
$su = array("ä","ö","ü","ß","Ä","Ö","Ü","ó","é");
$rp = array("ae","oe","ue","ss","Ae","Oe","Ue","o","e");
$afields = array ("uid");
// $afields = array ("uid","cn","mail","sn");
if (strpos($sn,' ')) // Nachname mit Leerzeichen
{
$snt = substr(strstr($sn,' '),1); // 2. Teil Nachname
$sntr = str_replace($su,$rp,$snt);
}
$gnr = str_replace($su,$rp,$gn);
$snr = str_replace($su,$rp,$sn);
$gnu = utf8_encode($gn);
$snu = utf8_encode($sn);
if (isset($mail) && $mail)
{
$filter = "(mail=$mail)";
$search=@ldap_search($ldapconn,$base,$filter,$afields);
}
if (!$mail || ($mail && !ldap_count_entries($ldapconn,$search)))
{
if ($gn && $sn)
$filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$gn*)(mail=$sn*))";
if ($sn && !$gn)
$filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$sn*))";
if (!$sn && $gn)
$filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$gn*))";
$search=@ldap_search($ldapconn,$base,$filter,$afields);
}
if (!ldap_count_entries($ldapconn,$search))
{
if ($gn && $sn)
$filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$gnr*)(mail=$snr*))";
if ($sn && !$gn)
$filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$snr*))";
if (!$sn && $gn)
$filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$gnr*))";
$search=@ldap_search($ldapconn,$base,$filter,$afields);
}
if (!ldap_count_entries($ldapconn,$search))
{
if ($gn && $sn)
$filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$gnu*)(mail=$snu*))";
if ($sn && !$gn)
$filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$snu*))";
if (!$sn && $gn)
$filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$gnu*))";
$search=@ldap_search($ldapconn,$base,$filter,$afields);
}
if (isset($snt)&& $snt && !ldap_count_entries($ldapconn,$search))
{
if ($gn && $snt)
$filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$gn*)(mail=$snt*))";
if ($snt && !$gn)
$filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$snt*))";
if (!$sn && $gn)
$filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$gn*))";
$search=@ldap_search($ldapconn,$base,$filter,$afields);
}
if (isset($snt) && $snt && !ldap_count_entries($ldapconn,$search))
{
if ($gn && $snt)
$filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$gnr*)(mail=$sntr*))";
if ($snt && !$gn)
$filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$sntr*))";
if (!$sn && $gn)
$filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$gnr*))";
$search=@ldap_search($ldapconn,$base,$filter,$afields);
}
if (ldap_count_entries($ldapconn,$search))
{
$info = ldap_get_entries($ldapconn, $search);
for ($i=0; $i<$info["count"]; $i++)
$uid = $info[$i]["uid"][0];
}
return $uid;
}
else {return 0;}
}
include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
$sql = "CALL fhiiqm.tel_list_comp('1','','','',@anz);";
$result = $dbc ->queryObjectArray($sql);
if ($result)
{
include($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/conf.inc.php");
$erfolg = 1;
$ldaphost = "a-rth-urp-hil-ipdenu.rz-berlin.mpg.de"; // Ihr ldap server
// $ldaphost = "ldaps://a-rth-urp-hil-ipdenu.rz-berlin.mpg.de"; // Ihr ssl-ldap server
$ldapport = 389; // StandardPortnummer ldap server
// $ldapport = 636; // SSL-Portnummer ldap server
// Verbindung zu LDAP
// if (!$ldapconn) $ldapconn = ldap_connect( $ldaphost, $ldapport );
// ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); // nur zur Fehlersuche
if (!$ldapconn) $ldapconn = ldap_connect( $ldaphost)
or die( "Keine Verbindung zu $ldaphost möglich" );
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
if ($ldapconn && ldap_start_tls($ldapconn)) $ldapbd = @ldap_bind($ldapconn, $ldaprdn, $ldappwd);
// if ($ldapconn) $ldapbd = @ldap_bind($ldapconn, $ldaprdn, $ldappwd);
if (!$ldapbd) echo ldap_errno($ldapconn).": ".ldap_error($ldapconn)."<br/>";
if ($ldapbd)
{
foreach ($result as $row)
{
$sn = $row->name;
$gn = $row->vorname;
$tels = $row->tel;
$mail = $row->email;
$atel = explode("; ",$tels);
foreach ($atel as $key=>$tel)
{
$pat = "/([^0-9\+\-\ \(\)\#\/])+/";
if (preg_match($pat,$tel)) unset($atel[$key]);
elseif (strlen($tel) > 4 && substr($tel,0,1) != 0 ) $atel[$key] = '0'.$tel;
elseif (substr($tel,0,1) == '#')
{
$atel[$key] = substr($tel,1);
}
}
$atelf = array_filter($atel); //filtert alle 'falschen' Werte und damit key/value-Eintraege aus $atel
if (isset($atel) && $atel && count($atelf) > 0)
{
// print_r($atelf); echo "->$sn, $gn<br />";
$erfolg = $erfolg && ldap_replace($sn,$gn,$mail,$atelf);
}
}
if ($erfolg) $erfolg = "mit Erfolg"; else $erfolg = "nicht oder nur teilweise";
echo "LDAP wurde $erfolg aktualisiert<br />";
ldap_unbind($ldapconn);
}
}
?>