fhiiqm/ldap_mod_uid.php
changeset 44 d652bbba2d43
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fhiiqm/ldap_mod_uid.php	Fri Feb 05 14:03:40 2016 +0100
@@ -0,0 +1,234 @@
+#!/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);
+        }
+   }      
+?>
\ No newline at end of file