<?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 = " <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 <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äge" title="Verträ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äge" title="Verträ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 Ä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 " $filter<br />";
return $inf;
}
}
?>