44
|
1 |
#!/usr/bin/php
|
|
2 |
<?php
|
|
3 |
|
|
4 |
/**
|
|
5 |
* @author Bettina Schwarzer, Fritz-Haber-Institut
|
|
6 |
* @copyright 11/2014
|
|
7 |
*
|
|
8 |
* Uebertragen von Telefon-Nr. je Mitarbeiter nach LDAP
|
|
9 |
*/
|
|
10 |
|
|
11 |
error_reporting(E_ALL ^ E_NOTICE);
|
|
12 |
|
|
13 |
function ldap_replace($sn,$gn,$mail,$tel)
|
|
14 |
{
|
|
15 |
/** ersetzt bestehende Eintraege von LDAP-Objektklassen
|
|
16 |
* erstellt weiteres Attribut zu Telefon
|
|
17 |
*
|
|
18 |
* Parameter
|
|
19 |
* $sn
|
|
20 |
* $gn - givenName
|
|
21 |
* $tel[] - telephonNumber
|
|
22 |
* */
|
|
23 |
global $ldapconn;
|
|
24 |
global $ldapbd;
|
|
25 |
|
|
26 |
if ($ldapbd)
|
|
27 |
{
|
|
28 |
$base="ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
|
|
29 |
$uid = ldap_search_uid($sn,$gn,$mail);
|
|
30 |
//Parameter abfragen
|
|
31 |
if ($uid)
|
|
32 |
{
|
|
33 |
$dn = "uid=".$uid .",ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
|
|
34 |
/*
|
|
35 |
$su = array("ä","ö","ü","ß","Ä","Ö","Ü");
|
|
36 |
$rp = array("ae","oe","ue","ss","Ae","Oe","Ue");
|
|
37 |
$gn = str_replace($su,$rp,$gn);
|
|
38 |
$sn = str_replace($su,$rp,$sn);
|
|
39 |
$entry["sn"] = $sn;
|
|
40 |
$entry["givenName"] = $gn;
|
|
41 |
// print_r ($entry); echo "ldapconn=$ldapconn: single<br />";
|
|
42 |
$result1 = ldap_mod_replace($ldapconn, $dn, $entry);
|
|
43 |
if (!$result1)
|
|
44 |
{
|
|
45 |
printf("LDAP-Fehlernummer replace: %s<br>\n", ldap_errno($ldapconn));
|
|
46 |
printf("LDAP-Fehler replace: %s<br>\n", ldap_error($ldapconn));
|
|
47 |
}
|
|
48 |
*/
|
|
49 |
if (is_array($tel) && $tel)
|
|
50 |
{
|
|
51 |
$entry2["telephoneNumber"] = array();
|
|
52 |
$afields = array ("telephoneNumber");
|
|
53 |
$searcht = @ldap_search($ldapconn,$dn,"(telephoneNumber=*)",$afields);
|
|
54 |
// echo "anzahl telefonNumber=" . ldap_count_entries($ldapconn,$searcht)."<br />";
|
|
55 |
if (ldap_count_entries($ldapconn,$searcht))
|
|
56 |
{
|
|
57 |
$result = ldap_mod_del($ldapconn, $dn, $entry2);
|
|
58 |
if (!$result && ldap_errno($ldapconn) <> 16)
|
|
59 |
{
|
|
60 |
printf("LDAP-Fehlernummer del: %s<br>\n", ldap_errno($ldapconn));
|
|
61 |
printf("LDAP-Fehler deltel: %s<br>\n", ldap_error($ldapconn));
|
|
62 |
}
|
|
63 |
}
|
|
64 |
foreach ($tel as $telf)
|
|
65 |
{
|
|
66 |
if ($telf > "!") $entry2["telephoneNumber"][] = $telf;
|
|
67 |
}
|
|
68 |
}
|
|
69 |
$result2 = ldap_mod_add($ldapconn, $dn, $entry2);
|
|
70 |
if (!$result2)
|
|
71 |
{
|
|
72 |
printf("LDAP-Fehlernummer add: %s<br>\n", ldap_errno($ldapconn));
|
|
73 |
printf("LDAP-Fehler addtel: %s<br>\n", ldap_error($ldapconn));
|
|
74 |
return 0;
|
|
75 |
}
|
|
76 |
|
|
77 |
return 1;
|
|
78 |
}
|
|
79 |
else
|
|
80 |
{
|
|
81 |
echo "Mitarbeiter '".$gn ." " . $sn ."' konnte nicht identifiziert werden.<br />";
|
|
82 |
return 1;
|
|
83 |
}
|
|
84 |
}
|
|
85 |
}
|
|
86 |
function ldap_search_uid($sn,$gn,$mail)
|
|
87 |
{
|
|
88 |
/** Sucht uid des gegebenen Nutzers
|
|
89 |
*
|
|
90 |
* Parameter
|
|
91 |
* $sn
|
|
92 |
* $gn - givenName
|
|
93 |
* */
|
|
94 |
global $ldapconn;
|
|
95 |
global $ldapbd;
|
|
96 |
|
|
97 |
if ($ldapbd)
|
|
98 |
{
|
|
99 |
$base="ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
|
|
100 |
$su = array("ä","ö","ü","ß","Ä","Ö","Ü","ó","é");
|
|
101 |
$rp = array("ae","oe","ue","ss","Ae","Oe","Ue","o","e");
|
|
102 |
$afields = array ("uid");
|
|
103 |
// $afields = array ("uid","cn","mail","sn");
|
|
104 |
if (strpos($sn,' ')) // Nachname mit Leerzeichen
|
|
105 |
{
|
|
106 |
$snt = substr(strstr($sn,' '),1); // 2. Teil Nachname
|
|
107 |
$sntr = str_replace($su,$rp,$snt);
|
|
108 |
}
|
|
109 |
$gnr = str_replace($su,$rp,$gn);
|
|
110 |
$snr = str_replace($su,$rp,$sn);
|
|
111 |
$gnu = utf8_encode($gn);
|
|
112 |
$snu = utf8_encode($sn);
|
|
113 |
if (isset($mail) && $mail)
|
|
114 |
{
|
|
115 |
$filter = "(mail=$mail)";
|
|
116 |
$search=@ldap_search($ldapconn,$base,$filter,$afields);
|
|
117 |
}
|
|
118 |
if (!$mail || ($mail && !ldap_count_entries($ldapconn,$search)))
|
|
119 |
{
|
|
120 |
if ($gn && $sn)
|
|
121 |
$filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$gn*)(mail=$sn*))";
|
|
122 |
if ($sn && !$gn)
|
|
123 |
$filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$sn*))";
|
|
124 |
if (!$sn && $gn)
|
|
125 |
$filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$gn*))";
|
|
126 |
$search=@ldap_search($ldapconn,$base,$filter,$afields);
|
|
127 |
}
|
|
128 |
if (!ldap_count_entries($ldapconn,$search))
|
|
129 |
{
|
|
130 |
if ($gn && $sn)
|
|
131 |
$filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$gnr*)(mail=$snr*))";
|
|
132 |
if ($sn && !$gn)
|
|
133 |
$filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$snr*))";
|
|
134 |
if (!$sn && $gn)
|
|
135 |
$filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$gnr*))";
|
|
136 |
$search=@ldap_search($ldapconn,$base,$filter,$afields);
|
|
137 |
}
|
|
138 |
if (!ldap_count_entries($ldapconn,$search))
|
|
139 |
{
|
|
140 |
if ($gn && $sn)
|
|
141 |
$filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$gnu*)(mail=$snu*))";
|
|
142 |
if ($sn && !$gn)
|
|
143 |
$filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$snu*))";
|
|
144 |
if (!$sn && $gn)
|
|
145 |
$filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$gnu*))";
|
|
146 |
$search=@ldap_search($ldapconn,$base,$filter,$afields);
|
|
147 |
}
|
|
148 |
if (isset($snt)&& $snt && !ldap_count_entries($ldapconn,$search))
|
|
149 |
{
|
|
150 |
if ($gn && $snt)
|
|
151 |
$filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$gn*)(mail=$snt*))";
|
|
152 |
if ($snt && !$gn)
|
|
153 |
$filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$snt*))";
|
|
154 |
if (!$sn && $gn)
|
|
155 |
$filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$gn*))";
|
|
156 |
$search=@ldap_search($ldapconn,$base,$filter,$afields);
|
|
157 |
}
|
|
158 |
if (isset($snt) && $snt && !ldap_count_entries($ldapconn,$search))
|
|
159 |
{
|
|
160 |
if ($gn && $snt)
|
|
161 |
$filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$gnr*)(mail=$sntr*))";
|
|
162 |
if ($snt && !$gn)
|
|
163 |
$filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$sntr*))";
|
|
164 |
if (!$sn && $gn)
|
|
165 |
$filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$gnr*))";
|
|
166 |
$search=@ldap_search($ldapconn,$base,$filter,$afields);
|
|
167 |
}
|
|
168 |
if (ldap_count_entries($ldapconn,$search))
|
|
169 |
{
|
|
170 |
$info = ldap_get_entries($ldapconn, $search);
|
|
171 |
for ($i=0; $i<$info["count"]; $i++)
|
|
172 |
$uid = $info[$i]["uid"][0];
|
|
173 |
}
|
|
174 |
return $uid;
|
|
175 |
}
|
|
176 |
else {return 0;}
|
|
177 |
}
|
|
178 |
|
|
179 |
include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
|
|
180 |
if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
|
|
181 |
$sql = "CALL fhiiqm.tel_list_comp('1','','','',@anz);";
|
|
182 |
$result = $dbc ->queryObjectArray($sql);
|
|
183 |
if ($result)
|
|
184 |
{
|
|
185 |
include($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/conf.inc.php");
|
|
186 |
$erfolg = 1;
|
|
187 |
$ldaphost = "a-rth-urp-hil-ipdenu.rz-berlin.mpg.de"; // Ihr ldap server
|
|
188 |
// $ldaphost = "ldaps://a-rth-urp-hil-ipdenu.rz-berlin.mpg.de"; // Ihr ssl-ldap server
|
|
189 |
$ldapport = 389; // StandardPortnummer ldap server
|
|
190 |
// $ldapport = 636; // SSL-Portnummer ldap server
|
|
191 |
|
|
192 |
// Verbindung zu LDAP
|
|
193 |
// if (!$ldapconn) $ldapconn = ldap_connect( $ldaphost, $ldapport );
|
|
194 |
// ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); // nur zur Fehlersuche
|
|
195 |
if (!$ldapconn) $ldapconn = ldap_connect( $ldaphost)
|
|
196 |
or die( "Keine Verbindung zu $ldaphost möglich" );
|
|
197 |
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
|
|
198 |
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
|
|
199 |
if ($ldapconn && ldap_start_tls($ldapconn)) $ldapbd = @ldap_bind($ldapconn, $ldaprdn, $ldappwd);
|
|
200 |
// if ($ldapconn) $ldapbd = @ldap_bind($ldapconn, $ldaprdn, $ldappwd);
|
|
201 |
if (!$ldapbd) echo ldap_errno($ldapconn).": ".ldap_error($ldapconn)."<br/>";
|
|
202 |
|
|
203 |
if ($ldapbd)
|
|
204 |
{
|
|
205 |
foreach ($result as $row)
|
|
206 |
{
|
|
207 |
$sn = $row->name;
|
|
208 |
$gn = $row->vorname;
|
|
209 |
$tels = $row->tel;
|
|
210 |
$mail = $row->email;
|
|
211 |
$atel = explode("; ",$tels);
|
|
212 |
foreach ($atel as $key=>$tel)
|
|
213 |
{
|
|
214 |
$pat = "/([^0-9\+\-\ \(\)\#\/])+/";
|
|
215 |
if (preg_match($pat,$tel)) unset($atel[$key]);
|
|
216 |
elseif (strlen($tel) > 4 && substr($tel,0,1) != 0 ) $atel[$key] = '0'.$tel;
|
|
217 |
elseif (substr($tel,0,1) == '#')
|
|
218 |
{
|
|
219 |
$atel[$key] = substr($tel,1);
|
|
220 |
}
|
|
221 |
}
|
|
222 |
$atelf = array_filter($atel); //filtert alle 'falschen' Werte und damit key/value-Eintraege aus $atel
|
|
223 |
if (isset($atel) && $atel && count($atelf) > 0)
|
|
224 |
{
|
|
225 |
// print_r($atelf); echo "->$sn, $gn<br />";
|
|
226 |
$erfolg = $erfolg && ldap_replace($sn,$gn,$mail,$atelf);
|
|
227 |
}
|
|
228 |
}
|
|
229 |
if ($erfolg) $erfolg = "mit Erfolg"; else $erfolg = "nicht oder nur teilweise";
|
|
230 |
echo "LDAP wurde $erfolg aktualisiert<br />";
|
|
231 |
ldap_unbind($ldapconn);
|
|
232 |
}
|
|
233 |
}
|
|
234 |
?> |