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

<?php

/**
 * @author Bettina Schwarzer,  Fritz-Haber-Institut
 * @copyright 06/2011
 * 
 * 
 */

    function tab_column($colnum=2,$bez,$sort,$dir,$fcol=0,$fanr=0,$filtb="",$start="",$anzds="25",$id="",$g=0,$tab="",$adr="")
    {
      /** beliebige Tabellenspalte mit Sortier-/Filtersymbolen und Links generieren
        * Parameter
        * $colnum   SpaltenNr. in SELECT-Statement 
        * $bez      Spaltenbezeichnung
        * $sort     aktuelle SortspaltenNr.
        * $dir      Sortrichtung (ASC/DESC)
        * $fcol     SpaltenNr. Filter (=0, wenn nicht gefiltert werden soll)
        * $fanr     aktuelle FilterspaltenNr.
        * $filtb    Filterbegriff
        * $start    ab Datensatz $start+1
        * $anzds    Anzahl angezeigter Datensaetze
        * $id       fuer spezielle ID als zusaetzl. Filter (Laser-Log)
        * $g        Gesamtansicht (rag-gefahr-massnahmen-vorsorge)
        * [$tab     fuer tab-basierte Seite
        * $adr      wohin gehen (Teilseite)]
        */
        
        if ($colnum == $sort)
            if ($dir == 'DESC')
            {
                $auf = "auf";
                $ab = "ab_activ";
            }
            else
            {
                $auf = "auf_activ";
                $ab = "ab";
            }
        else
        {
                $auf = "auf";
                $ab = "ab";
        }
        
        if ($bez == "Haus") $tip = "Haus: A, B, BES, C, D, E, F, FAB, HAR, K, L, M, N, P, Q, R, S, T, U"; else $tip = "Filter";
        if ($tab > "!")
        {
            $addr = $adr;
            $ank = $tab; 
        } 
        else 
        {
            $addr = $_SERVER['PHP_SELF'];
            $ank = "";
        }
        if ($fcol>0 && $fanr>0) // Filtern nach Spalte moeglich
        {
            if ($fcol == $fanr) $filt = "filter_activ"; else $filt = "filter"; 
            $filt = "&nbsp;<a href='".$addr."$ank?f=$fcol&s=$sort&d=$dir&st=$start&z=$anzds&i=$id&g=$g'><img src='/fhiiqm/img/$filt.gif' border='0' width='14' hight='11' alt='$tip' title='$tip'></a>";
        }
        else
            $filt="";
        if ($filtb>'!') $where = "&f=$fanr&b=$filtb&i=$id&g=$g"; else $where="&i=$id&g=$g";
        echo "<th>$bez&nbsp;<a href='".$addr."$ank?s=$colnum$where&st=$start&z=$anzds'><img src='/fhiiqm/img/$auf.gif' border='0' width='11' hight='11' alt='sort aufsteigend' title='sort aufsteigend'></a>            
                  <a href='".$addr."$ank?s=$colnum&d=DESC$where&st=$start&z=$anzds'><img src='/fhiiqm/img/$ab.gif' border='0' width='11' hight='11' alt='sort absteigend' title='sort absteigend'></a>$filt</th>\n";
    }
    
    function date_obj($jahr,$mon,$tag)
    {
       /** prueft auf valides Datum und erstellt DateTime-Objekt, wenn o.k.
        *  Voraussetzung: Klasse 'DateTime_s' ist included
        */  
        include_once ($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
        if ($jahr && $mon && $tag)
        {
            $dat = $jahr."-".$mon."-".$tag;
            // Datum valid?
            if (!$dat = new DateTime_s($dat)) $dat = null;
        }    
        else
            $dat = null;
        return $dat;
        
    }
    
    function liste_links($start,$zeil,$anz,$liste)
    {
       /** erstellt links zu Seiten einer Liste
         * Parameter
         * $start   Beginn bei DS $start+1 (1.DS -> $start=0)
         * $zeil    Anzahl Zeilen pro Seite
         * $anz     Anzahl DS gesamt
         * $liste   weitere Inhalte fuer $_GET-Array
         */
        $page = 1;
        while (($page-1)*$zeil < $anz)
        {
            $be = ($page-1)*$zeil+1;
            if (($page-1)*$zeil+$zeil < $anz) $en = ($page-1)*$zeil+$zeil; else $en = $anz;
            $st = ($page-1)*$zeil;
            if ($start == $be-1)
                echo "$be - $en";
            else
                echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?st=$st$liste\"  class=\"sc\">$be - $en</a>";
            if (($page-1)*$zeil+$zeil < $anz) echo "<span class=\"sc\"> | </span>";
            $page++;
        }

    }
    
    function login_db($target, $headl="")
    {
       /** zeigt Login-Form, prueft userid und passwort, leitet zu gewuenschter Seite weiter
        *   Authentifizierung gegen die Datenbank
        *   Parameter
        *   $target     Zieladresse
        *   $headl      Ueberschrift Loginform
        */
          
       session_start();
       if ($_SESSION["userid"]) 
        	{
        	header("Location: $target");
        	exit;
        	}
        
        
        
        $login  = $_POST["login"];
        $log    = $_POST["log"];
        
        if ($login)
        {
        	include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
        	if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
            
            $stmt = $dbc -> stmtinit();
            if (is_object($stmt))
            {
                $stmt -> prepare("SELECT userid, pwd FROM userweb WHERE userid = ?");
                $stmt -> bind_param('s',$log["user"]);
                $result = $stmt -> execute();
                // $stmt -> store_result();    // wegen weiterer query dies oder $stmt -> free_result();
            }
            if ($result)
            {
                if ($log["pass"] <= '') $log["pass"] = null;
                $stmt->bind_result($userid, $pwdmd5);
                if ($stmt->fetch()) 
                {
//                    if ($pwdmd5 == md5($log["pass"]) || $log["pass"]==null)
                    if ($pwdmd5 === md5($log["pass"]) || ($pwdmd5 === null && $log["pass"] === null))
                    {
                        $_SESSION = array();
                        $_SESSION["userid"] = $userid;

                        // Recht
                        $stmt -> free_result(); // wegen weiterer query
                        $sql = "SELECT recht_ID FROM user_recht WHERE userid = '$userid'";
                        if ($res = $dbc -> queryObjectArray($sql))
                        {
                            $arecht = array();
                            foreach ($res as $row)
                            {    $arecht[] = $row->recht_ID;}
                            if (count($arecht)>0)
                                $_SESSION["recht"] = $arecht;
                            else 
                                $_SESSION["recht"] = null;
                        }
                        else 
                        {
                            $_SESSION["recht"] = null;
//                            echo "error_recht: " . $dbc->error . "<br />";
                        }
//                        print_r($arecht);

                        // Recht Produkt-Gruppe
                        $sql = "SELECT prod_group_ID FROM user_prodgroup WHERE userid = '$userid'";   
                        if ($re = $dbc -> queryObjectArray($sql))
                        {
                            $pgrecht = array();
                            foreach ($re as $row)
                            {    $pgrecht[] = $row->prod_group_ID;}
                            if (count($pgrecht)>0)
                                $_SESSION["prodg"] = $pgrecht;
                            else 
                                $_SESSION["prodg"] = null;
                        }
                        else 
                            $_SESSION["prodg"] = null;
                		header("Location: $target");
                		exit;
                    }
                    else
                        $err2 = "<br /><span class=\"red\">Passwort ist nicht korrekt</span>\n";
                }
                else
                    $err1 = "<br /><span class=\"red\">Username ist nicht korrekt</span>\n";
       
            }
        }
        if ($err1 || $err2 || !$log)
        {
            ?>
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
            
            <head>
            	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
               	<link href="/fhiiqm/css/db.css" rel="STYLESHEET" type="TEXT/CSS" /> 
            
            	<title>Login fhiiqm</title>
            </head>
            
            <body onload="document.flogin.user.focus();">
            <!--    <div class="float-r"><img src="img/document_mark_as_final.png" border="0" alt="Vertr&auml;ge" title="Vertr&auml;ge"/></div> -->
            
            <?php
                include ($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/form/login_form.inc.php");
            echo "</body>
            </html>\n";
        }    
    }
    
    function login($target, $headl="")
    {
       /** zeigt Login-Form, prueft userid und passwort, leitet zu gewuenschter Seite weiter
        *   Authentifizierung gegen LDAP
        *   Parameter
        *   $target     Zieladresse
        *   $headl      Ueberschrift Loginform
        */
          
       session_start();
       if ($_SESSION["userid"]) 
        	{
        	header("Location: $target");
        	exit;
        	}
        
        
        
        $login  = $_POST["login"];
        $log    = $_POST["log"];
        
        if ($login)
        {
        	include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
        	if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
            
            $stmt = $dbc -> stmtinit();
            if (is_object($stmt))
            {
                $stmt -> prepare("SELECT userid FROM userweb WHERE userid = ?");
                $stmt -> bind_param('s',$log["user"]);
                $result = $stmt -> execute();
                // $stmt -> store_result();    // wegen weiterer query dies oder $stmt -> free_result();
            }
            if ($result)
            {
                $ldaphost = "ldap.rz-berlin.mpg.de";  // ldap server
                $ldapport = 389;                 // Die Portnummer ldap server
                $ldapconn = ldap_connect( $ldaphost, $ldapport ) 
                          or die( "Keine Verbindung zu {$ldaphost} möglich" );
                $stmt->bind_result($userid);
                if ($stmt->fetch()) 
                {
                    $ldaprdn = "uid=" . $log["user"].",ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
                    $ldappwd = $log["pass"];
                    ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
                    ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
                    if ($ldapbind = @ldap_bind($ldapconn, $ldaprdn, $ldappwd))
                    {
                        ldap_close($ldapconn);
                        if (!isset($_SESSION['user']) && !isset($_SESSION['useridz'])) $_SESSION = array();  // zerstoert alle Session-Variablen,wenn keine Anmeldung an apartvw oder timerec
                        $_SESSION["userid"] = $userid;

                        // Recht
                        $stmt -> free_result(); // wegen weiterer query
                        $sql = "SELECT recht_ID FROM user_recht WHERE userid = '$userid'";
                        if ($res = $dbc -> queryObjectArray($sql))
                        {
                            $arecht = array();
                            foreach ($res as $row)
                            {    $arecht[] = $row->recht_ID;}
                            if (count($arecht)>0)
                                $_SESSION["recht"] = $arecht;
                            else 
                                $_SESSION["recht"] = null;
                        }
                        else 
                        {
                            $_SESSION["recht"] = null;
//                            echo "error_recht: " . $dbc->error . "<br />";
                        }
//                        print_r($arecht);

                        // Recht Produkt-Gruppe
                        $sql = "SELECT prod_group_ID FROM user_prodgroup WHERE userid = '$userid'";   
                        if ($re = $dbc -> queryObjectArray($sql))
                        {
                            $pgrecht = array();
                            foreach ($re as $row)
                            {    $pgrecht[] = $row->prod_group_ID;}
                            if (count($pgrecht)>0)
                                $_SESSION["prodg"] = $pgrecht;
                            else 
                                $_SESSION["prodg"] = null;
                        }
                        else 
                            $_SESSION["prodg"] = null;
                		header("Location: $target");
                		exit;
                    }
                    else
                        $err2 = "<br /><span class=\"red\">Passwort ist nicht korrekt</span>\n";
                }
                else
                    $err1 = "<br /><span class=\"red\">Username ist nicht korrekt</span>\n";
       
            }
        }
        if ($err1 || $err2 || !$log)
        {
            ?>
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
            
            <head>
            	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
               	<link href="/fhiiqm/css/db.css" rel="STYLESHEET" type="TEXT/CSS" /> 
            
            	<title>Login fhiiqm</title>
            </head>
            
            <body onload="document.flogin.user.focus();">
            <!--    <div class="float-r"><img src="img/document_mark_as_final.png" border="0" alt="Vertr&auml;ge" title="Vertr&auml;ge"/></div> -->
            
            <?php
                include ($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/form/login_form.inc.php");
            echo "</body>
            </html>\n";
        }    
    }
    
    function duplicate_record ($table, $key_name, $key_value, $auto=1) 
    {
       /** dupliziert Datensatz in table
        *   Parameter
        *   $table      Tabellenname
        *   $key_name   Name ID-Spalte
        *   $key_value  Wert ID des DSes, der dupliziert werden soll
        *   $auto       ID ist Auto-Wert
        */
         
    	include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
        global $dbc; // Verbindung ist schon da? 
    	if (!isset($dbc) || !$dbc) $dbc = new dbconnection();

        // erfragen Namen aller Felder in $table
        $sql = 'SHOW COLUMNS FROM ' . $table . ';';
        $result = $dbc -> queryObjectArray($sql);
        
        // Generieren der INSERT-Abfrage mit allen Feldern ausser ID-Feld
        $query = 'INSERT INTO ' . $table . ' (SELECT ';
        
        foreach ($result as $row) 
        {
            if ($row->Field == $key_name && $auto) {
            $query .= 'NULL, ';
            }
            elseif ($row->Field == $key_name && !$auto) 
                {$query .= '"'. $key_value . '_COPY", ';}
            else {
            $query .= $row->Field . ', ';
            } // END IF
        } 
        
        $query = substr($query, 0, strlen($query) - 2);
        $query .= ' FROM ' . $table . ' WHERE ' . $key_name . ' = "' . $key_value . '")';
//        echo "$query<br />";
        $ret = $dbc -> execute($query);
        if ($ret && $auto)
        { 
            // Return new id
            $new_id = $dbc -> insertId();
            return $new_id;
        }
        elseif ($ret && !$auto)
            return $key_value . "_COPY";
        else
            return false;
/*
        return $query;
*/    
    }
    
    function dbformat_wert($wert)
    {
        /** wandelt Dezimalzahl mit Komma und Tausender-Trennzeichen in Datenbankformat
         * 
         * Parameter
         * $wert    -   zu konvertierende Zahl
         */
         
        if (isset($wert) && $wert<>0)
        {
            if (strpos($wert,',') >0) 
            {
                $wert = str_replace(',','.',$wert);
                $aw = explode('.',$wert);
                if (count($aw) > 2) // mit Dezimalpunkt und Tausendertrennzeichen
                {
                    for ($i=0; $i<count($aw)-1; $i++)
                    {
                        $dbw .= $aw[$i];
                    }    
                    $dbw .= "." .$aw[count($aw)-1];
                }
                else // kein Dezimalpunkt,nur Kommastellen
                    $dbw = $wert;
            }
            else
            {
                $aw = explode('.',$wert);
                if (count($aw) > 1 && strlen($aw[count($aw)-1]) == 2)
                {   // Dezimalpunkt mit 2 Stellen danach (= .nn)
                    for ($i=0; $i<count($aw)-1; $i++)
                    {
                        $dbw .= $aw[$i];
                    }    
                    $dbw .= "." .$aw[count($aw)-1];
                }
                else
                    $dbw = str_replace('.','',$wert);
            }    
            return $dbw;            
        }
        else
            return 0;
    }
    
    function ldap_replace($sn,$gn,$title,$roomnr,$tel,$mail,$dep,$ag)
    {
        /** ersetzt bestehende Eintraege von LDAP-Objektklassen
         *  erstellt weiteres Attribut zu Telefon und Arbeitsgruppe, falls erforderlich
         * 
         * Parameter
         * $sn
         * $gn      - givenName
         * $title
         * $roomnr  - roomNumber
         * $tel[]   - telephonNumber
         * $mail
         * $dep     - departmentNumber
         * $ag[]    - physicalDeliveryOfficeName
         * */ 
        include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/conf.inc.php");
        $ldaphost = "ldap.rz-berlin.mpg.de";  // Ihr ldap servers
        $ldapport = 389;                 // Die Portnummer ihres ldap servers
        global $ldapconn;
        global $ldapbd;
        
        // Verbindung zu LDAP
        if (!$ldapconn) $ldapconn = ldap_connect( $ldaphost, $ldapport );
        ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
        $ldapbd = @ldap_bind($ldapconn, $ldaprdn, $ldappwd);
//        echo "ldapbd=$ldapbd, ldaprdn=$ldaprdn<br />";

        if ($ldapbd)
        {
            $base="ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
            $uid = ldap_search_uid($sn,$gn);
            //Parameter abfragen
            if ($uid)
            {
                $dn = "uid=".$uid .",ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
//                    echo "dn-mod = $dn<br />";
                $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;
                if (isset($title) && $title) $entry["title"] = $title;
                if (isset($roomnr) && $roomnr) $entry["roomNumber"] = $roomnr;
                if (isset($mail) && $mail) $entry["mail"] = $mail;
                if (isset($dep) && $dep) $entry["departmentNumber"] = $dep;
//                    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();
                    $result = ldap_mod_del($ldapconn, $dn, $entry2);
                    if (!$result)
                    {
                        printf("LDAP-Fehlernummer del1: %s<br>\n", ldap_errno($ldapconn));
                        printf("LDAP-Fehler del1: %s<br>\n", ldap_error($ldapconn));
                    }
                    foreach ($tel as $telf)
                        if ($telf > "!") $entry2["telephoneNumber"][] = $telf;
                }        
                if (is_array($ag) && $ag)
                {
                    $entry2["physicalDeliveryOfficeName"] = array();
                    $result = ldap_mod_del($ldapconn, $dn, $entry3);
                    if (!$result)
                    {
                        printf("LDAP-Fehlernummer del2: %s<br>\n", ldap_errno($ldapconn));
                        printf("LDAP-Fehler del2: %s<br>\n", ldap_error($ldapconn));
                    }
                    foreach ($ag as $agr)
                        if ($agr > "!") $entry2["physicalDeliveryOfficeName"][] = $agr;
                }        
//                    print_r ($entry2); echo ": multiple<br />";
                $result2 = ldap_mod_add($ldapconn, $dn, $entry2);    
                if (!$result2)
                {
                    printf("LDAP-Fehlernummer add: %s<br>\n", ldap_errno($ldapconn));
                    printf("LDAP-Fehler add: %s<br>\n", ldap_error($ldapconn));
                }

                $filter = "(uid=".$uid.")"; 
                $afields = array ("uid","cn","givenName","sn","title","userPassword","mail","departmentNumber","telephoneNumber","roomNumber","physicalDeliveryOfficeName");
                if (!($search=@ldap_search($ldapconn,$base,$filter,$afields))) die("Unable to search ldap server");
                echo "<div align = 'center'>LDAP-Eintrag nach &Auml;nderung 1<br />";
                $info = ldap_get_entries($ldapconn, $search);   
        		$bg1 = "#F8F8F8";
        		$bg2 = "#DEDFE1";
        		$bg = "#FFFFFF";
//                    print_r ($info); echo "<br  /><br />";
             
                echo "<table border='0' cellspacing='2' cellpadding='2'>\n
                        <tr bgcolor='#68ACBF'><th>sn</th><th>givenName</th><th>cn</th><th>title</th><th>uid</th><th>userPassword</th><th>mail</th>
                        <th>departmentNumber</th><th>telephoneNumber</th><th>roomNumber</th><th>physicalDeliveryOfficeName</th></tr>\n";  
                for ($i=0; $i<$info["count"]; $i++) 
                {
           			if ($bg == $bg1) $bg = $bg2; else $bg = $bg1;
                    echo "<tr bgcolor='" . $bg . "'>";    
                    echo "<td>". $info[$i]["sn"][0]."</td>";
                    echo "<td>". $info[$i]["givenname"][0]."</td>";
                    echo "<td>". $info[$i]["cn"][0]."</td>";
                    echo "<td>". $info[$i]["title"][0]."</td>";
                    echo "<td>". $info[$i]["uid"][0]."</td>";
                    echo "<td>". $info[$i]["userpassword"][0]."</td>";
                    echo "<td>". $info[$i]["mail"][0]."</td>";
                    echo "<td>". $info[$i]["departmentnumber"][0]."</td>";
                    $stel = "";
                    foreach ($info[$i]["telephonenumber"] as $tel)
                       $stel .= $tel . ", ";
                    echo "<td>". substr($stel,strpos($stel,",")+1,strlen(substr($stel,strpos($stel,",")+1))-2) . "</td>";
                    echo "<td>". $info[$i]["roomnumber"][0]."</td>";
                    $sag = "";
                    foreach ($info[$i]["physicaldeliveryofficename"] as $ag)
                        $sag .= $ag . ", ";
                    echo "<td>". substr($sag,strpos($sag,",")+1,strlen(substr($sag,strpos($sag,",")+1))-2) . "</td>";
                    echo "</tr>\n"; 
                }
                echo "</table>";
                echo "</div>\n";

                if (!$result1 || !$result2) return 0; else return 1;
            }
            else
            {
                echo "Nutzer '".$gn ." " . $sn ."' konnte nicht identifiziert werden.";
                return 0; 
            }
        }        
    } 
    function ldap_search_uid($sn,$gn)
    {
        /** Sucht uid des gegebenen Nutzers
         * 
         * Parameter
         * $sn
         * $gn      - givenName
         * */ 

        include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/conf.inc.php");
        $ldaphost = "ldap.rz-berlin.mpg.de";  // Ihr ldap servers
        $ldapport = 389;                 // Die Portnummer ihres ldap servers
        
        // Verbindung zu LDAP
        if (!$ldapconn) $ldapconn = ldap_connect( $ldaphost, $ldapport );
        ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
        if (!$ldapbd) $ldapbd = @ldap_bind($ldapconn, $ldaprdn, $ldappwd);

        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");
            $afields = array ("uid","cn","mail","sn");
            $gnr = str_replace($su,$rp,$gn);
            $snr = str_replace($su,$rp,$sn); 
            $gnu = utf8_encode($gn);
            $snu = utf8_encode($sn);
            $search = null;
            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 (ldap_count_entries($ldapconn,$search))
            {
                $info = ldap_get_entries($ldapconn, $search);
                for ($i=0; $i<$info["count"]; $i++)
                { 
                    $inf[$i][0] = $info[$i]["uid"][0];
                    $inf[$i][1] = $info[$i]["cn"][0];
                    $inf[$i][2] = $info[$i]["mail"][0];
                    $inf[$i][3] = $info[$i]["sn"][0];
                }    
            }
//            echo "&nbsp;&nbsp;&nbsp;$filter<br />";
            return $inf;
        }
    }
?>