fhiiqm/ldap_mod_uid.php
changeset 44 d652bbba2d43
equal deleted inserted replaced
43:70cea8f0e807 44:d652bbba2d43
       
     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 ?>