|
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 ?> |