fhiiqm/ldap_mod_uid.php
author Bettina Schwarzer
Fri, 05 Feb 2016 14:03:40 +0100
changeset 44 d652bbba2d43
permissions -rw-r--r--
fhiiqm: achilleus -> db2, Korrekturen

#!/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);
        }
   }      
?>