fhiiqm/inc/func_lib.inc.php
changeset 40 6f4b105daa24
parent 38 45c139f74ea4
child 41 9c668cd391fa
--- a/fhiiqm/inc/func_lib.inc.php	Wed Jul 31 15:10:48 2013 +0200
+++ b/fhiiqm/inc/func_lib.inc.php	Thu Sep 12 09:04:56 2013 +0200
@@ -1,322 +1,632 @@
-<?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($target, $headl="")
-    {
-       /** zeigt Login-Form, prueft userid und passwort, leitet zu gewuenschter Seite weiter
-        *   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 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;
-    } 
-
+<?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);
+                        $_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 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)
+                {
+                    $entry3["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)
+    {
+        /** Suchrt 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");
+            $filter = "(cn=" . $gn . " " . $sn .")"; 
+            $search=@ldap_search($ldapconn,$base,$filter,$afields);
+            if (!ldap_count_entries($ldapconn,$search))
+            {
+                $gnr = str_replace($su,$rp,$gn);
+                $snr = str_replace($su,$rp,$sn); 
+                $filter = "(cn=" . $gnr . " " . $snr .")"; 
+                $search=@ldap_search($ldapconn,$base,$filter,$afields);
+            }
+            if (!ldap_count_entries($ldapconn,$search))
+
+            {
+                $gn = utf8_encode($gn);
+                $sn = utf8_encode($sn);    
+                $filter = "(cn=" . $gn . " " . $sn .")"; 
+                $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];
+            }
+            echo "&nbsp;&nbsp;&nbsp;$filter<br />";
+            if (isset($uid) && $uid) return $uid;
+            else return null;
+        }
+    }
 ?>
\ No newline at end of file