--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fhiiqm/ap_gefahr_ed.php Fri Jun 08 15:04:22 2012 +0200
@@ -0,0 +1,193 @@
+<?php
+
+/**
+ * @author Bettina Schwarzer, Fritz-Haber-Institut
+ * @copyright 06/2012
+ *
+ * INSERT/UPDATE Arbeitsplatz - Gefahr
+ *
+ */
+
+
+ error_reporting(E_ALL ^ E_NOTICE);
+
+ session_start();
+ if (! isset($_SESSION["userid"]))
+ {
+ include_once ("inc/func_lib.inc.php");
+ login($_SERVER["PHP_SELF"]);
+ exit;
+ }
+
+ if (is_null($_SESSION["recht"]) || (!is_null($_SESSION["recht"]) && !in_array("asr",$_SESSION["recht"]) && !in_array("ase",$_SESSION["recht"])))
+ {
+ header("Location: start.php");
+ exit;
+ }
+
+ include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
+ if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
+
+ $sub = $_POST["eintragen"];
+ $ap = $_POST["ap"];
+ $ok = $_POST["ok"];
+ $apid = $_GET["i"]; // arbeitsplatz_ID
+
+
+
+?>
+<!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" media="screen"/>
+ <link href="/fhiiqm/css/db_print.css" rel="STYLESHEET" type="TEXT/CSS" media="print"/>
+ <title>Arbeitsplatztyp - Gefährdung</title>
+
+ <script type="text/javascript">
+ <!--
+ var counter = 0;
+ var limit = 99;
+ var arr = new Array();
+ function addInput(divName){
+ if (counter == limit) {
+ alert("Das Limit von " + counter + " zusätzlichen inputs ist erreicht");
+ }
+ else {
+ var newdiv = document.createElement('div');
+ var count;
+ var opt="<option value='-1'></option>";
+ for (var key in arr)
+ {
+ opt = opt.concat("<option value='",key,"'>",key, " - ",arr[key],"</option>\n" );
+ }
+ opt += "</select>\n";
+ newdiv.innerHTML += "<select name='ap[gf][]'>"+opt;
+ document.getElementById(divName).appendChild(newdiv);
+ counter++;
+ }
+ }
+ function delInput(divId){
+ var kn = document.getElementById(divId);
+ while (kn.childNodes.length>0 && kn.lastChild.nodeName != "SELECT" && kn.lastChild.nodeName != "A")
+ {
+// alert ("vor "+kn.lastChild.nodeName+", nodetyp = "+ kn.lastChild.nodeType);
+ var knc = kn.lastChild;
+ document.getElementById(divId).removeChild(knc);
+ }
+ if (kn.lastChild.nodeName == "SELECT") document.getElementById(divId).removeChild(kn.lastChild);
+ }
+ //-->
+ </script>
+
+</head>
+
+<body>
+
+<?php
+ echo " ";
+ echo "<div class=\"float-br smaller\" valign='top'>";
+ echo " user: " . $_SESSION["userid"];
+ echo " <a class='sc' href='/fhiiqm/logout.php' title='Session beenden'>logout</a></div>\n";
+ echo "<div class=\"float-r\"><img src=\"img/role.png\" border=\"0\" alt=\"Arbeitsplatztyp - Gefährdung bearbeiten\" title=\"Arbeitsplatztyp - Gefährdung bearbeiten\"/></div>\n";
+
+ if ($apid) $text = "editieren"; else $text = "erfassen";
+ echo "<div align=\"center\">";
+ echo "<h3>Arbeitsplatztyp - Gefährdung $text</h3>";
+ echo "</div>\n";
+ if (!$sub || !isset($ap) || !$ok)
+ {
+ if ($apid && !$sub && !isset($ap))
+ {
+ $sql = "SELECT gefahr_ID, arbplatz_typ FROM Gefahr_Arbplatz WHERE arbplatz_typ = '" . $apid . "'";
+ if ($res = $dbc -> queryObjectArray($sql))
+ {
+ foreach ($res as $row)
+ {
+ $ap["aptyp"] = $row->arbplatz_typ;
+ $ap["gf"][] = $row->gefahr_ID;
+ }
+ }
+ else $ap["aptyp"] = $apid;
+ }
+ include ($_SERVER["DOCUMENT_ROOT"]."/fhiiqm/form/ap_gefahr_form.inc.php");
+
+ if ($sub)
+ {
+ $frage = "Alle Angaben ok?";
+ echo "<tr>
+ <td class=\"red\" valign=\"top\" align=\"left\">$frage</td>
+ <td><input type=\"checkbox\" name=\"ok\" value=\"1\"";
+ if ($ok) echo "checked=\"checked\"";
+ echo " /></td>\n</tr>\n";
+ }
+ if (!is_null($_SESSION["recht"]) && in_array("ase",$_SESSION["recht"]))
+ {
+ echo "
+ <tr><td> </td>\n
+ <td><input class=\"button\" type=\"submit\" name=\"eintragen\" value=\" eintragen \" />";
+ echo "</td></tr>\n";
+ }
+ echo "</table>\n";
+ echo "</div>\n";
+ echo "<p class='sc'> <a href=\"ap_gefahr_flist.php\" target=\"_self\" title=\"Arbplatztyp-Gefährdungen-Liste\">« zur Arbeitsplatztyp-Gefährdungen-Liste</a></p>\n";
+ echo "</form>\n";
+ }
+ else
+ {
+ echo "<div align='center'>\n";
+
+ if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
+
+ $stmt = $dbc -> stmtinit();
+ if (is_object($stmt))
+ {
+ $retd = 1;
+ if ($apid && is_array($ap['gf']))
+ { //UPDATE
+ // Loeschen alte Arbeitsplatztypen
+ $retd = $dbc -> execute("DELETE FROM Gefahr_Arbplatz WHERE arbplatz_typ = '". $ap["aptyp"] ."'");
+ }
+
+ if ($retd && is_array($ap['gf']))
+ {
+ $rett = 1;
+ $stmt -> prepare("INSERT INTO Gefahr_Arbplatz (gefahr_ID,arbplatz_typ) VALUES(?,?)");
+ for ($k=0; $k<count($ap["gf"]); $k++)
+ {
+ if ($ap["gf"][$k] && $ap["gf"][$k] != -1)
+ {
+ $stmt -> bind_param('ss',$ap["gf"][$k], $ap["aptyp"]);
+ $rett = $stmt -> execute();
+ if (!$rett) $rett = false;
+ }
+ }
+ if (!$rett) echo "error INSERT Gefahr: $stmt->error<br />\n";
+
+ }
+ }
+ if ($rett)
+ {
+ echo "<p class='green'><b>Gefährdungen für Arbeitsplatztyp '$apid' wurden erfolgreich gespeichert.</b></p>\n";
+ echo "<table>\n";
+ if (is_array($ap["gf"]))
+ {
+ echo "<tr><td>Gefahren: </td>";
+ foreach ($ap["gf"] as $gf)
+ {
+ if ($next) $next ="<tr><td> </td>"; else $next =" ";
+ if ($gf && $gf != -1) echo "$next<td>$gf</td></tr>\n";
+ }
+ }
+ echo "</table>\n";
+ }
+ else
+ echo "<p class='red'><b>Gefährdungen für Arbeitsplatztyp '$apid'' wurden nicht oder nur teilweise gespeichert</b></p>\n";
+
+ echo "</div>";
+ echo "<p class='sc'> <a href=\"ap_gefahr_flist.php\" target=\"_self\" title=\"Arbplatztyp-Gefährdungen-Liste\">« zur Arbeitsplatztyp-Gefährdung-Liste</a></p>\n";
+ }
+?>
+</body>
+</html>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fhiiqm/ap_gefahr_flist.php Fri Jun 08 15:04:22 2012 +0200
@@ -0,0 +1,147 @@
+<?php
+
+/**
+ * @author Bettina Schwarzer, Fritz-Haber-Institut
+ * @copyright 05/2012
+ *
+ * Liste Arbeitsplatztyp - Gefahr
+ *
+ */
+
+ error_reporting(E_ALL ^ E_NOTICE);
+
+ session_start();
+ if (! isset($_SESSION["userid"]))
+ {
+ include_once ($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/func_lib.inc.php");
+ login($_SERVER["PHP_SELF"]);
+ exit;
+ }
+
+ if (is_null($_SESSION["recht"]) || (!is_null($_SESSION["recht"]) && !in_array("asr",$_SESSION["recht"]) && !in_array("ase",$_SESSION["recht"])))
+ {
+ header("Location: start.php");
+ exit;
+ }
+
+?>
+<!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="css/db.css" rel="STYLESHEET" type="TEXT/CSS" media="screen"/>
+ <link href="css/db_print.css" rel="STYLESHEET" type="TEXT/CSS" media="print"/>
+
+ <title>Arbplatztyp-Gefährdung-Liste</title>
+</head>
+
+<body onload="document.ffilter.filter.focus();">
+
+<?php
+ include_once ($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/func_lib.inc.php");
+ include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
+ $dbc = new dbconnection();
+
+ echo " ";
+ echo "<div class=\"float-br smaller\" valign='top'>";
+ echo " user: " . $_SESSION["userid"];
+ echo " <a class='sc' href='/fhiiqm/logout.php' title='Session beenden'>logout</a></div>\n";
+ echo "<div class=\"float-r\"><img src=\"img/role.png\" border=\"0\" alt=\"Arbeitsplatztypen\" title=\"Arbeitsplatztypen\"/></div>\n";
+
+ // Felder, nach denen gefiltert werden kann
+ $fields = array(2=>"Gefahr-Nr.");
+
+ $sort = $_GET["s"]; // Sortierung nach Spalte
+ if (!isset($sort) && !$sort) $sort = $_POST["s"];
+
+ $dir = $_GET["d"]; // Sortierrichtung
+ if (!isset($dir) && !$dir) $dir = $_POST["d"];
+
+ $fnum = $_GET["f"]; // Spaltennummer, nach der aktuell gefiltert wird
+ if (!isset($fnum) && !$fnum) $fnum = $_POST["f"];
+
+ $filter = $_POST["filter"];
+ if (!isset($filter) && !$filter) $filter = $_GET["b"];
+
+ $subf = $_POST["subf"]; // submit
+
+ if (!isset($fnum) && !$fnum) $fnum = 1;
+ if (!isset($filter) && !$filter) $filter = "";
+ if (!isset($sort) && !$sort) $sort = 1;
+ if (!isset($dir) && !$dir) $dir = "";
+
+
+ $sql = "SELECT t.arbplatz_typ, a.gefahr_ID, arbplatz_typ_bez, gefahr_bez
+ FROM Arbplatz_Typ t LEFT OUTER JOIN Gefahr_Arbplatz a ON a.arbplatz_typ=t.arbplatz_typ
+ LEFT OUTER JOIN Gefahr g ON a.gefahr_ID=g.gefahr_ID ";
+ if ($fnum == 2 & $filter > " ")
+ $sql .= " WHERE a.gefahr_ID LIKE '%$filter%' ";
+ $sql .= "ORDER BY $sort $dir";
+
+ $result = $dbc ->queryObjectArray($sql);
+
+ if ($result)
+ {
+ $bg1 = "#F8F8F8";
+ $bg2 = "#DEDFE1";
+ $bg = "#FFFFFF";
+
+ echo "<div align='center'>\n";
+ echo "<p><b>Liste Arbeitsplatztypen - Gefährdung</b></p>\n";
+
+ echo "<table border='0' cellspacing='0'>\n";
+ echo "<tr><td class='bigger'>Mittels '<img src='/fhiiqm/img/auf.gif' border='0' width='11' hight='11' />' / '<img src='/fhiiqm/img/ab.gif' border='0' width='11' hight='11' />'
+ können Sie nach jeder Spalte auf- bzw. absteigend sortieren</td></tr>
+ <td class='bigger'>'<img src='/fhiiqm/img/filter.gif' border='0' width='14' hight='11' />' ermöglicht das Filtern nach Gefährdung</td></tr>\n
+ <tr><td class='bigger'>Klick auf '<img src='/fhiiqm/img/edit.gif' border='0' width='11' hight='11'>' - Bearbeiten Arbeitsplatztyp - Gefährdung</td></tr>\n
+ <tr><td class='bigger'> </td></tr>";
+ echo "</table>\n";
+ if (isset($fnum) && $fnum>1 && !$filter && !$subf)
+ {
+ // Formular anzeigen fuer Filterbegriff
+ $text = $fields[$fnum];
+ echo "<form action=" . $_SERVER['PHP_SELF'] . " method='post' enctype='application/x-www-form-urlencoded' id='ffilter' name='ffilter' target='_self'>\n";
+ echo "<input type='hidden' name='f' value='$fnum'>";
+ echo "<table width=\"30%\" border=\"0\">\n";
+ echo "<tr><td>filtern nach $text: </td>";
+ echo "<td><input id='filter' name='filter' type=\"text\" size=\"30\" maxlength=\"30\" value=\"$filter\"/></td>";
+ echo "<td><input class=\"button\" type=\"submit\" value=\"finden\" name=\"subf\" title=\"subf\" /></td></tr></table>\n";
+ echo "</form>\n";
+ echo "<p> </p>\n";
+ }
+ echo "<table border='0'>\n";
+ // Listenkopf generieren
+ echo "<tr bgcolor='#68ACBF'>";
+ tab_column(1,"Arbeitsplatz-Typ",$sort,$dir,0,$fnum,$filter,0,9999);
+ tab_column(2,"Gefährdung",$sort,$dir,2,$fnum,$filter,0,9999);
+ echo "<th> </th></tr>";
+
+ $vt = "?";
+ if ($bg == $bg1) $bg = $bg2; else $bg = $bg1;
+
+ foreach ($result as $row)
+ {
+ if ($row->arbplatz_typ != $vt)
+ {
+ if ($vt != "?")
+ {
+ echo "</td><td><a href='/fhiiqm/ap_gefahr_ed.php?i=$vt'><img src=\"/fhiiqm/img/edit.gif\" alt='edit' title='edit' border='0'/></a></td></tr>\n";
+ if ($bg == $bg1) $bg = $bg2; else $bg = $bg1;
+ }
+ echo "<tr bgcolor='" . $bg . "'>";
+ echo "<td>$row->arbplatz_typ - $row->arbplatz_typ_bez</td>";
+ echo "<td>$row->gefahr_ID - $row->gefahr_bez";
+ }
+ else
+ {
+ echo "<br />$row->gefahr_ID - $row->gefahr_bez";
+ }
+ $vt = $row->arbplatz_typ;
+ }
+ echo "</td><td><a href='/fhiiqm/ap_gefahr_ed.php?i=$vt'><img src=\"/fhiiqm/img/edit.gif\" alt='edit' title='edit' border='0'/></a></td></tr>\n";
+ echo "</table>\n</div>\n";
+ }
+?>
+</body>
+</html>
\ No newline at end of file
--- a/fhiiqm/ap_vorsorge_ed.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/ap_vorsorge_ed.php Fri Jun 08 15:04:22 2012 +0200
@@ -130,7 +130,7 @@
}
echo "</table>\n";
echo "</div>\n";
- echo "<p class='sc'> <a href=\"ap_vorsorge_flist.php\" target=\"_self\" title=\"Arbplatztyp-Liste\">« zur Arbeitsplatztyp-Liste</a></p>\n";
+ echo "<p class='sc'> <a href=\"ap_vorsorge_flist.php\" target=\"_self\" title=\"Arbplatztyp-Vorsorge-Liste\">« zur Arbeitsplatztyp-Vorsorge-Liste</a></p>\n";
echo "</form>\n";
}
else
@@ -185,7 +185,7 @@
echo "<p class='red'><b>Vorsorgegrundsätze für Arbeitsplatztyp '$apid'' wurden nicht oder nur teilweise gespeichert</b></p>\n";
echo "</div>";
- echo "<p class='sc'> <a href=\"ap_vorsorge_flist.php\" target=\"_self\" title=\"Arbplatztyp-Liste\">« zur Arbeitsplatztyp-Liste</a></p>\n";
+ echo "<p class='sc'> <a href=\"ap_vorsorge_flist.php\" target=\"_self\" title=\"Arbplatztyp-Vorsorge-Liste\">« zur Arbeitsplatztyp-Vorsorge-Liste</a></p>\n";
}
?>
</body>
--- a/fhiiqm/ap_vorsorge_flist.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/ap_vorsorge_flist.php Fri Jun 08 15:04:22 2012 +0200
@@ -33,7 +33,7 @@
<link href="css/db.css" rel="STYLESHEET" type="TEXT/CSS" media="screen"/>
<link href="css/db_print.css" rel="STYLESHEET" type="TEXT/CSS" media="print"/>
- <title>Arbeitsplatztyp-Liste</title>
+ <title>Arbplatztyp-Vorsorge-Liste</title>
</head>
<body onload="document.ffilter.filter.focus();">
@@ -82,7 +82,6 @@
echo "<table border='0' cellspacing='0'>\n";
echo "<tr><td class='bigger'>'<img src='/fhiiqm/img/filter.gif' border='0' width='14' hight='11' />' ermöglicht das Filtern nach Vorsorgegrundsatz</td></tr>\n
<tr><td class='bigger'>Klick auf '<img src='/fhiiqm/img/edit.gif' border='0' width='11' hight='11'>' - Bearbeiten Arbeitsplatztyp - Vorsorgegrundsatz</td></tr>\n
- <tr><td class='red'>alle hier gezeigten G-Nummern sind fiktiv(07.05.2012) - bitte durch reale ersetzen</td></tr>
<tr><td class='bigger'> </td></tr>";
echo "</table>\n";
--- a/fhiiqm/css/db.css Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/css/db.css Fri Jun 08 15:04:22 2012 +0200
@@ -85,6 +85,7 @@
font-style: normal;
font-weight: bold;
color: #000066;
+ vertical-align: top;
text-align: left;}
body {
--- a/fhiiqm/css/db_print.css Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/css/db_print.css Fri Jun 08 15:04:22 2012 +0200
@@ -36,6 +36,7 @@
font-style: normal;
font-weight: bold;
color: #000066;
+ vertical-align: top;
text-align: left;}
body {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fhiiqm/form/ap_gefahr_form.inc.php Fri Jun 08 15:04:22 2012 +0200
@@ -0,0 +1,102 @@
+<?php
+
+/**
+ * @author Bettina Schwarzer, Fritz-Haber-Institut
+ * @copyright 06/2012
+ *
+ * Form Arbeitsplatztyp - Grfahr
+ *
+ */
+
+ include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
+ if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
+
+?>
+ <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" enctype="application/x-www-form-urlencoded" name="form_info" target="_self">
+ <div align="center">
+ <table width="55%" border="0" cellspacing="3" cellpadding="3">
+ <tr>
+ <td width="20%">Arbeitsplatztyp *</td>
+ <td>
+ <select name="ap[aptyp]" size="1">
+ <?php
+ $select = null;
+ $sql = "SELECT arbplatz_typ, arbplatz_typ_bez FROM fhiiqm.Arbplatz_Typ ORDER BY 1";
+ if ($result = $dbc->queryObjectArray($sql))
+ {
+ foreach ($result as $row)
+ {
+ $select = ( $row->arbplatz_typ==$ap['aptyp'] ) ? ' selected' : null;
+ echo "<option $select value=\"$row->arbplatz_typ\">$row->arbplatz_typ - $row->arbplatz_typ_bez</option>\n";
+ }
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>Gefährdung *
+ <br /> leeres Feld = Löschen
+ </td>
+ <td>
+ <div id="add">
+ <select name="ap[gf][]" size="1">
+ <?php
+ $select = null;
+ $select = ( "-1"==$ap['gf'][0] ) ? ' selected' : null;
+ echo "<option $select value=\"-1\"></option>\n";
+ $sql = "SELECT gefahr_ID, gefahr_bez FROM fhiiqm.Gefahr ORDER BY (gefahr_ID+1)";
+ if ($result = $dbc->queryObjectArray($sql))
+ {
+ foreach ($result as $row)
+ {
+ $select = ( $row->gefahr_ID==$ap['gf'][0] ) ? ' selected' : null;
+ echo "<option $select value=\"$row->gefahr_ID\">$row->gefahr_ID - $row->gefahr_bez</option>\n";
+ $sgf .= "'".$row->gefahr_ID."':'".$row->gefahr_bez."',";
+ }
+ }
+ $sgf = substr($sgf,0,strlen($sgf)-1);
+ ?>
+ ?>
+ </select>
+ <script type="text/javascript">
+ <!--
+ arr = {<?php echo ($sgf); ?>}; // Ergebnis: {'key':'value','key':'value',...}
+ //-->
+ </script>
+
+ <a href="<?php echo "javascript:addInput('add');" ?>" title="weitere Gefährdung"><img src="/fhiiqm/img/add.png" /></a>
+ <a href="<?php echo "javascript:delInput('add');" ?>" title="löschen letzte Gefährdung"><img src="/fhiiqm/img/delete.png" /></a>
+ <?php
+ if ($apid || ($sub && isset($ap) && !$ok))
+ {
+ if (count($ap['gf'])>1)
+ {
+ $i=0;
+ foreach ($ap['gf'] as $gfe)
+ {
+ if ($i>0)
+ {
+ echo "<select name=\"ap[gf][]\" size=\"1\">";
+
+ $select = ( "-1" == $gfe ) ? ' selected' : null;
+ echo "<option $select value=\"-1\"></option>\n";
+ foreach ($result as $row)
+ {
+ $select = ( $row->gefahr_ID == $gfe ) ? ' selected' : null;
+ echo "<option $select value=\"$row->gefahr_ID\">$row->gefahr_ID - $row->gefahr_bez</option>\n";
+ }
+ echo "</select><br/>\n";
+ }
+ $i++;
+ }
+ }
+ }
+ ?>
+ </div>
+ </td>
+ </tr>
+<!--
+ </table>
+ </form>
+-->
\ No newline at end of file
--- a/fhiiqm/form/ap_vorsorge_form.inc.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/form/ap_vorsorge_form.inc.php Fri Jun 08 15:04:22 2012 +0200
@@ -79,7 +79,7 @@
{
echo "<select name=\"ap[vs][]\" size=\"1\">";
- $select = ( "-1" == $apte ) ? ' selected' : null;
+ $select = ( "-1" == $vse ) ? ' selected' : null;
echo "<option $select value=\"-1\"></option>\n";
foreach ($result as $row)
{
--- a/fhiiqm/form/ma_fkt_form.inc.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/form/ma_fkt_form.inc.php Fri Jun 08 15:04:22 2012 +0200
@@ -26,7 +26,8 @@
<tr><td>Funktion *</td>
<td valign="top">
<!--<input class="long20" type="text" name="fkt[func]" id="func" value="<?php echo $fkt['func']; ?>"/> -->
- <select name="fkt[func]" onchange="this.form.submit();">
+ <!--<select name="fkt[func]" onchange="this.form.submit();"> -->
+ <select name="fkt[func]">
<?php
$sql = "SELECT fkt_bez, fkt_ID FROM `fhiiqm`.`Funktion` ORDER BY 1";
if ($result = $dbc->queryObjectArray($sql))
--- a/fhiiqm/form/prozess_form.inc.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/form/prozess_form.inc.php Fri Jun 08 15:04:22 2012 +0200
@@ -24,7 +24,7 @@
<table width="60%" border="0" cellspacing="3" cellpadding="3">
<tr>
<td>Prozess-Bezeichnung *</td>
- <td><input name="pz[bez]" id="bez" type="text" size="30" maxlength="30" value="<?php echo $pz['bez']; ?>" />
+ <td><input name="pz[bez]" id="bez" type="text" size="50" maxlength="50" value="<?php echo $pz['bez']; ?>" />
<?php
if (isset($pz['bez']) && $pz['bez']<'!')
{
--- a/fhiiqm/inc/menu.inc.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/inc/menu.inc.php Fri Jun 08 15:04:22 2012 +0200
@@ -118,6 +118,7 @@
</li>\n";
}
+ // 's' wie 'Sonstige' oder 'Stammdaten' - Rechtegruppe
if (is_array($arg) && in_array("s",$arg))
{
if (in_array("asr",$_SESSION["recht"]) || (in_array("ase",$_SESSION["recht"])))
@@ -125,19 +126,30 @@
echo "<li>Arbeitssicherheit\n
<ul>\n";
echo "<li><a href=\"/fhiiqm/ap_vorsorge_flist.php\" target=\"_blank\" title=\"Arbeitsplatztyp-Vorsorge-Liste\">Arb.platztypen - Vorsorge filtern, bearbeiten</a></li>\n";
+ echo "<li><a href=\"/fhiiqm/ap_gefahr_flist.php\" target=\"_blank\" title=\"Arbeitsplatztyp-Gefährdung-Liste\">Arb.platztypen - Gefährdung sortieren, filtern</a></li>\n";
echo "<li><a href=\"/fhiiqm/raum_report.php\" target=\"_blank\" title=\"Report Arbeitssicherheit\">Berichte Arbeitssicherheit</a></li>\n";
echo " </ul>\n
</li>\n";
}
- if (in_array("re",$_SESSION["recht"]))
+ if (in_array("re",$_SESSION["recht"]) || in_array("fmr",$_SESSION["recht"]) || in_array("fme",$_SESSION["recht"]))
{
- echo "<li>Bewegungsdaten\n
- <ul>\n"; // Bearbeitung von ausgewaehlten Stamm-Daten
- echo "<li><a href=\"/fhiiqm/raum_flist_ed.php\" target=\"_blank\" title=\"Raumliste edit\">Räume - Reinig.-Daten sortieren, filtern, bearbeiten</a></li>\n";
- echo "<li><a href=\"/fhiiqm/raum_aptyp_flist.php\" target=\"_blank\" title=\"Raum-Arbeitsplatztyp-Liste edit\">Räume - Arb.platztypen sortieren, filtern, bearbeiten</a></li>\n";
- echo " </ul>\n
+ echo "<li>Bewegungsdaten\n";
+ echo "<ul>\n"; // Bearbeitung von ausgewaehlten Stamm-Daten
+ if (in_array("re",$_SESSION["recht"]))
+ {
+ echo "<li><a href=\"/fhiiqm/raum_flist_ed.php\" target=\"_blank\" title=\"Raumliste edit\">Räume - Reinig.-Daten sortieren, filtern, bearbeiten</a></li>\n";
+ echo "<li><a href=\"/fhiiqm/raum_aptyp_flist.php\" target=\"_blank\" title=\"Raum-Arbeitsplatztyp-Liste edit\">Räume - Arb.platztypen sortieren, filtern, bearbeiten</a></li>\n";
+ }
+ if (in_array("fmr",$_SESSION["recht"]) || in_array("fme",$_SESSION["recht"]))
+ echo "<li><a href=\"/fhiiqm/ma_fkt_flist.php\" target=\"_blank\" title=\"MA-Funktionen-Liste\">Mitarbeiter - Funktion sort., filtern, bearbeiten</a></li>\n";
+ if (in_array("fme",$_SESSION["recht"]))
+ echo "<li><a href=\"/fhiiqm/ma_fkt_ed.php\" target=\"_blank\" title=\"MA-Funktionen\">Mitarbeiter - Funktion erfassen</a></li>\n";
+ if (in_array("fmr",$_SESSION["recht"]) || in_array("fme",$_SESSION["recht"]))
+ echo "<li><a href=\"/fhiiqm/report/fkt_ma_report.php\" target=\"_blank\" title=\"Beauftragte\">Bericht Beauftragte</a></li>\n";
+ echo " </ul>\n
</li>\n";
}
+
echo "<li>Stammdaten\n
<ul>\n";
if (in_array("pr",$_SESSION["recht"]) || in_array("pe",$_SESSION["recht"]))
@@ -148,10 +160,6 @@
echo "<li><a href=\"/fhiiqm/raum_flist.php\" target=\"_blank\" title=\"Raumliste\">Räume sortieren, filtern, bearbeiten</a></li>\n";
if (in_array("re",$_SESSION["recht"]))
echo "<li><a href=\"/fhiiqm/raum_ins.php\" target=\"_blank\" title=\"Raum erfassen\">Raum erfassen</a></li>\n";
- if (in_array("fmr",$_SESSION["recht"]) || in_array("fme",$_SESSION["recht"]))
- echo "<li><a href=\"/fhiiqm/ma_fkt_flist.php\" target=\"_blank\" title=\"MA-Funktionen-Liste\">Mitarbeiter - Funktion sort., filtern, bearbeiten</a></li>\n";
- if (in_array("fme",$_SESSION["recht"]))
- echo "<li><a href=\"/fhiiqm/ma_fkt_ed.php\" target=\"_blank\" title=\"MA-Funktionen\">Mitarbeiter - Funktion erfassen</a></li>\n";
if (in_array("rtr",$_SESSION["recht"]) || in_array("rte",$_SESSION["recht"]))
echo "<li><a href=\"/fhiiqm/recht_list.php\" target=\"_blank\" title=\"Nutzerliste\">Nutzer - Rechte bearbeiten</a></li>\n";
if (in_array("rte",$_SESSION["recht"]))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fhiiqm/js/jquery/jquery-ui-timepicker-addon.js Fri Jun 08 15:04:22 2012 +0200
@@ -0,0 +1,1325 @@
+/*
+* jQuery timepicker addon
+* By: Trent Richardson [http://trentrichardson.com]
+* Version 0.9.9
+* Last Modified: 02/05/2012
+*
+* Copyright 2012 Trent Richardson
+* Dual licensed under the MIT and GPL licenses.
+* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
+* http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
+*
+* HERES THE CSS:
+* .ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
+* .ui-timepicker-div dl { text-align: left; }
+* .ui-timepicker-div dl dt { height: 25px; margin-bottom: -25px; }
+* .ui-timepicker-div dl dd { margin: 0 10px 10px 65px; }
+* .ui-timepicker-div td { font-size: 90%; }
+* .ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
+*/
+
+(function($) {
+
+$.extend($.ui, { timepicker: { version: "0.9.9" } });
+
+/* Time picker manager.
+ Use the singleton instance of this class, $.timepicker, to interact with the time picker.
+ Settings for (groups of) time pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+function Timepicker() {
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[''] = { // Default regional settings
+ currentText: 'Now',
+ closeText: 'Done',
+ ampm: false,
+ amNames: ['AM', 'A'],
+ pmNames: ['PM', 'P'],
+ timeFormat: 'hh:mm tt',
+ timeSuffix: '',
+ timeOnlyTitle: 'Choose Time',
+ timeText: 'Time',
+ hourText: 'Hour',
+ minuteText: 'Minute',
+ secondText: 'Second',
+ millisecText: 'Millisecond',
+ timezoneText: 'Time Zone'
+ };
+ this._defaults = { // Global defaults for all the datetime picker instances
+ showButtonPanel: true,
+ timeOnly: false,
+ showHour: true,
+ showMinute: true,
+ showSecond: false,
+ showMillisec: false,
+ showTimezone: false,
+ showTime: true,
+ stepHour: 1,
+ stepMinute: 1,
+ stepSecond: 1,
+ stepMillisec: 1,
+ hour: 0,
+ minute: 0,
+ second: 0,
+ millisec: 0,
+ timezone: '+0000',
+ hourMin: 0,
+ minuteMin: 0,
+ secondMin: 0,
+ millisecMin: 0,
+ hourMax: 23,
+ minuteMax: 59,
+ secondMax: 59,
+ millisecMax: 999,
+ minDateTime: null,
+ maxDateTime: null,
+ onSelect: null,
+ hourGrid: 0,
+ minuteGrid: 0,
+ secondGrid: 0,
+ millisecGrid: 0,
+ alwaysSetTime: true,
+ separator: ' ',
+ altFieldTimeOnly: true,
+ showTimepicker: true,
+ timezoneIso8609: false,
+ timezoneList: null,
+ addSliderAccess: false,
+ sliderAccessArgs: null
+ };
+ $.extend(this._defaults, this.regional['']);
+};
+
+$.extend(Timepicker.prototype, {
+ $input: null,
+ $altInput: null,
+ $timeObj: null,
+ inst: null,
+ hour_slider: null,
+ minute_slider: null,
+ second_slider: null,
+ millisec_slider: null,
+ timezone_select: null,
+ hour: 0,
+ minute: 0,
+ second: 0,
+ millisec: 0,
+ timezone: '+0000',
+ hourMinOriginal: null,
+ minuteMinOriginal: null,
+ secondMinOriginal: null,
+ millisecMinOriginal: null,
+ hourMaxOriginal: null,
+ minuteMaxOriginal: null,
+ secondMaxOriginal: null,
+ millisecMaxOriginal: null,
+ ampm: '',
+ formattedDate: '',
+ formattedTime: '',
+ formattedDateTime: '',
+ timezoneList: null,
+
+ /* Override the default settings for all instances of the time picker.
+ @param settings object - the new settings to use as defaults (anonymous object)
+ @return the manager object */
+ setDefaults: function(settings) {
+ extendRemove(this._defaults, settings || {});
+ return this;
+ },
+
+ //########################################################################
+ // Create a new Timepicker instance
+ //########################################################################
+ _newInst: function($input, o) {
+ var tp_inst = new Timepicker(),
+ inlineSettings = {};
+
+ for (var attrName in this._defaults) {
+ var attrValue = $input.attr('time:' + attrName);
+ if (attrValue) {
+ try {
+ inlineSettings[attrName] = eval(attrValue);
+ } catch (err) {
+ inlineSettings[attrName] = attrValue;
+ }
+ }
+ }
+ tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, {
+ beforeShow: function(input, dp_inst) {
+ if ($.isFunction(o.beforeShow))
+ return o.beforeShow(input, dp_inst, tp_inst);
+ },
+ onChangeMonthYear: function(year, month, dp_inst) {
+ // Update the time as well : this prevents the time from disappearing from the $input field.
+ tp_inst._updateDateTime(dp_inst);
+ if ($.isFunction(o.onChangeMonthYear))
+ o.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);
+ },
+ onClose: function(dateText, dp_inst) {
+ if (tp_inst.timeDefined === true && $input.val() != '')
+ tp_inst._updateDateTime(dp_inst);
+ if ($.isFunction(o.onClose))
+ o.onClose.call($input[0], dateText, dp_inst, tp_inst);
+ },
+ timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');
+ });
+ tp_inst.amNames = $.map(tp_inst._defaults.amNames, function(val) { return val.toUpperCase() });
+ tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function(val) { return val.toUpperCase() });
+
+ if (tp_inst._defaults.timezoneList === null) {
+ var timezoneList = [];
+ for (var i = -11; i <= 12; i++)
+ timezoneList.push((i >= 0 ? '+' : '-') + ('0' + Math.abs(i).toString()).slice(-2) + '00');
+ if (tp_inst._defaults.timezoneIso8609)
+ timezoneList = $.map(timezoneList, function(val) {
+ return val == '+0000' ? 'Z' : (val.substring(0, 3) + ':' + val.substring(3));
+ });
+ tp_inst._defaults.timezoneList = timezoneList;
+ }
+
+ tp_inst.hour = tp_inst._defaults.hour;
+ tp_inst.minute = tp_inst._defaults.minute;
+ tp_inst.second = tp_inst._defaults.second;
+ tp_inst.millisec = tp_inst._defaults.millisec;
+ tp_inst.ampm = '';
+ tp_inst.$input = $input;
+
+ if (o.altField)
+ tp_inst.$altInput = $(o.altField)
+ .css({ cursor: 'pointer' })
+ .focus(function(){ $input.trigger("focus"); });
+
+ if(tp_inst._defaults.minDate==0 || tp_inst._defaults.minDateTime==0)
+ {
+ tp_inst._defaults.minDate=new Date();
+ }
+ if(tp_inst._defaults.maxDate==0 || tp_inst._defaults.maxDateTime==0)
+ {
+ tp_inst._defaults.maxDate=new Date();
+ }
+
+ // datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..
+ if(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date)
+ tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());
+ if(tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date)
+ tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());
+ if(tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date)
+ tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());
+ if(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date)
+ tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());
+ return tp_inst;
+ },
+
+ //########################################################################
+ // add our sliders to the calendar
+ //########################################################################
+ _addTimePicker: function(dp_inst) {
+ var currDT = (this.$altInput && this._defaults.altFieldTimeOnly) ?
+ this.$input.val() + ' ' + this.$altInput.val() :
+ this.$input.val();
+
+ this.timeDefined = this._parseTime(currDT);
+ this._limitMinMaxDateTime(dp_inst, false);
+ this._injectTimePicker();
+ },
+
+ //########################################################################
+ // parse the time string from input value or _setTime
+ //########################################################################
+ _parseTime: function(timeString, withDate) {
+ var regstr = this._defaults.timeFormat.toString()
+ .replace(/h{1,2}/ig, '(\\d?\\d)')
+ .replace(/m{1,2}/ig, '(\\d?\\d)')
+ .replace(/s{1,2}/ig, '(\\d?\\d)')
+ .replace(/l{1}/ig, '(\\d?\\d?\\d)')
+ .replace(/t{1,2}/ig, this._getPatternAmpm())
+ .replace(/z{1}/ig, '(z|[-+]\\d\\d:?\\d\\d)?')
+ .replace(/\s/g, '\\s?') + this._defaults.timeSuffix + '$',
+ order = this._getFormatPositions(),
+ ampm = '',
+ treg;
+
+ if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);
+
+ if (withDate || !this._defaults.timeOnly) {
+ // the time should come after x number of characters and a space.
+ // x = at least the length of text specified by the date format
+ var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');
+ // escape special regex characters in the seperator
+ var specials = new RegExp("[.*+?|()\\[\\]{}\\\\]", "g");
+ regstr = '^.{' + dp_dateFormat.length + ',}?' + this._defaults.separator.replace(specials, "\\$&") + regstr;
+ }
+
+ treg = timeString.match(new RegExp(regstr, 'i'));
+
+ if (treg) {
+ if (order.t !== -1) {
+ if (treg[order.t] === undefined || treg[order.t].length === 0) {
+ ampm = '';
+ this.ampm = '';
+ } else {
+ ampm = $.inArray(treg[order.t].toUpperCase(), this.amNames) !== -1 ? 'AM' : 'PM';
+ this.ampm = this._defaults[ampm == 'AM' ? 'amNames' : 'pmNames'][0];
+ }
+ }
+
+ if (order.h !== -1) {
+ if (ampm == 'AM' && treg[order.h] == '12')
+ this.hour = 0; // 12am = 0 hour
+ else if (ampm == 'PM' && treg[order.h] != '12')
+ this.hour = (parseFloat(treg[order.h]) + 12).toFixed(0); // 12pm = 12 hour, any other pm = hour + 12
+ else this.hour = Number(treg[order.h]);
+ }
+
+ if (order.m !== -1) this.minute = Number(treg[order.m]);
+ if (order.s !== -1) this.second = Number(treg[order.s]);
+ if (order.l !== -1) this.millisec = Number(treg[order.l]);
+ if (order.z !== -1 && treg[order.z] !== undefined) {
+ var tz = treg[order.z].toUpperCase();
+ switch (tz.length) {
+ case 1: // Z
+ tz = this._defaults.timezoneIso8609 ? 'Z' : '+0000';
+ break;
+ case 5: // +hhmm
+ if (this._defaults.timezoneIso8609)
+ tz = tz.substring(1) == '0000'
+ ? 'Z'
+ : tz.substring(0, 3) + ':' + tz.substring(3);
+ break;
+ case 6: // +hh:mm
+ if (!this._defaults.timezoneIso8609)
+ tz = tz == 'Z' || tz.substring(1) == '00:00'
+ ? '+0000'
+ : tz.replace(/:/, '');
+ else if (tz.substring(1) == '00:00')
+ tz = 'Z';
+ break;
+ }
+ this.timezone = tz;
+ }
+
+ return true;
+
+ }
+ return false;
+ },
+
+ //########################################################################
+ // pattern for standard and localized AM/PM markers
+ //########################################################################
+ _getPatternAmpm: function() {
+ var markers = [];
+ o = this._defaults;
+ if (o.amNames)
+ $.merge(markers, o.amNames);
+ if (o.pmNames)
+ $.merge(markers, o.pmNames);
+ markers = $.map(markers, function(val) { return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&') });
+ return '(' + markers.join('|') + ')?';
+ },
+
+ //########################################################################
+ // figure out position of time elements.. cause js cant do named captures
+ //########################################################################
+ _getFormatPositions: function() {
+ var finds = this._defaults.timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z)/g),
+ orders = { h: -1, m: -1, s: -1, l: -1, t: -1, z: -1 };
+
+ if (finds)
+ for (var i = 0; i < finds.length; i++)
+ if (orders[finds[i].toString().charAt(0)] == -1)
+ orders[finds[i].toString().charAt(0)] = i + 1;
+
+ return orders;
+ },
+
+ //########################################################################
+ // generate and inject html for timepicker into ui datepicker
+ //########################################################################
+ _injectTimePicker: function() {
+ var $dp = this.inst.dpDiv,
+ o = this._defaults,
+ tp_inst = this,
+ // Added by Peter Medeiros:
+ // - Figure out what the hour/minute/second max should be based on the step values.
+ // - Example: if stepMinute is 15, then minMax is 45.
+ hourMax = parseInt((o.hourMax - ((o.hourMax - o.hourMin) % o.stepHour)) ,10),
+ minMax = parseInt((o.minuteMax - ((o.minuteMax - o.minuteMin) % o.stepMinute)) ,10),
+ secMax = parseInt((o.secondMax - ((o.secondMax - o.secondMin) % o.stepSecond)) ,10),
+ millisecMax = parseInt((o.millisecMax - ((o.millisecMax - o.millisecMin) % o.stepMillisec)) ,10),
+ dp_id = this.inst.id.toString().replace(/([^A-Za-z0-9_])/g, '');
+
+ // Prevent displaying twice
+ //if ($dp.find("div#ui-timepicker-div-"+ dp_id).length === 0) {
+ if ($dp.find("div#ui-timepicker-div-"+ dp_id).length === 0 && o.showTimepicker) {
+ var noDisplay = ' style="display:none;"',
+ html = '<div class="ui-timepicker-div" id="ui-timepicker-div-' + dp_id + '"><dl>' +
+ '<dt class="ui_tpicker_time_label" id="ui_tpicker_time_label_' + dp_id + '"' +
+ ((o.showTime) ? '' : noDisplay) + '>' + o.timeText + '</dt>' +
+ '<dd class="ui_tpicker_time" id="ui_tpicker_time_' + dp_id + '"' +
+ ((o.showTime) ? '' : noDisplay) + '></dd>' +
+ '<dt class="ui_tpicker_hour_label" id="ui_tpicker_hour_label_' + dp_id + '"' +
+ ((o.showHour) ? '' : noDisplay) + '>' + o.hourText + '</dt>',
+ hourGridSize = 0,
+ minuteGridSize = 0,
+ secondGridSize = 0,
+ millisecGridSize = 0,
+ size;
+
+ // Hours
+ html += '<dd class="ui_tpicker_hour"><div id="ui_tpicker_hour_' + dp_id + '"' +
+ ((o.showHour) ? '' : noDisplay) + '></div>';
+ if (o.showHour && o.hourGrid > 0) {
+ html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
+
+ for (var h = o.hourMin; h <= hourMax; h += parseInt(o.hourGrid,10)) {
+ hourGridSize++;
+ var tmph = (o.ampm && h > 12) ? h-12 : h;
+ if (tmph < 10) tmph = '0' + tmph;
+ if (o.ampm) {
+ if (h == 0) tmph = 12 +'a';
+ else if (h < 12) tmph += 'a';
+ else tmph += 'p';
+ }
+ html += '<td>' + tmph + '</td>';
+ }
+
+ html += '</tr></table></div>';
+ }
+ html += '</dd>';
+
+ // Minutes
+ html += '<dt class="ui_tpicker_minute_label" id="ui_tpicker_minute_label_' + dp_id + '"' +
+ ((o.showMinute) ? '' : noDisplay) + '>' + o.minuteText + '</dt>'+
+ '<dd class="ui_tpicker_minute"><div id="ui_tpicker_minute_' + dp_id + '"' +
+ ((o.showMinute) ? '' : noDisplay) + '></div>';
+
+ if (o.showMinute && o.minuteGrid > 0) {
+ html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
+
+ for (var m = o.minuteMin; m <= minMax; m += parseInt(o.minuteGrid,10)) {
+ minuteGridSize++;
+ html += '<td>' + ((m < 10) ? '0' : '') + m + '</td>';
+ }
+
+ html += '</tr></table></div>';
+ }
+ html += '</dd>';
+
+ // Seconds
+ html += '<dt class="ui_tpicker_second_label" id="ui_tpicker_second_label_' + dp_id + '"' +
+ ((o.showSecond) ? '' : noDisplay) + '>' + o.secondText + '</dt>'+
+ '<dd class="ui_tpicker_second"><div id="ui_tpicker_second_' + dp_id + '"'+
+ ((o.showSecond) ? '' : noDisplay) + '></div>';
+
+ if (o.showSecond && o.secondGrid > 0) {
+ html += '<div style="padding-left: 1px"><table><tr>';
+
+ for (var s = o.secondMin; s <= secMax; s += parseInt(o.secondGrid,10)) {
+ secondGridSize++;
+ html += '<td>' + ((s < 10) ? '0' : '') + s + '</td>';
+ }
+
+ html += '</tr></table></div>';
+ }
+ html += '</dd>';
+
+ // Milliseconds
+ html += '<dt class="ui_tpicker_millisec_label" id="ui_tpicker_millisec_label_' + dp_id + '"' +
+ ((o.showMillisec) ? '' : noDisplay) + '>' + o.millisecText + '</dt>'+
+ '<dd class="ui_tpicker_millisec"><div id="ui_tpicker_millisec_' + dp_id + '"'+
+ ((o.showMillisec) ? '' : noDisplay) + '></div>';
+
+ if (o.showMillisec && o.millisecGrid > 0) {
+ html += '<div style="padding-left: 1px"><table><tr>';
+
+ for (var l = o.millisecMin; l <= millisecMax; l += parseInt(o.millisecGrid,10)) {
+ millisecGridSize++;
+ html += '<td>' + ((l < 10) ? '0' : '') + l + '</td>';
+ }
+
+ html += '</tr></table></div>';
+ }
+ html += '</dd>';
+
+ // Timezone
+ html += '<dt class="ui_tpicker_timezone_label" id="ui_tpicker_timezone_label_' + dp_id + '"' +
+ ((o.showTimezone) ? '' : noDisplay) + '>' + o.timezoneText + '</dt>';
+ html += '<dd class="ui_tpicker_timezone" id="ui_tpicker_timezone_' + dp_id + '"' +
+ ((o.showTimezone) ? '' : noDisplay) + '></dd>';
+
+ html += '</dl></div>';
+ $tp = $(html);
+
+ // if we only want time picker...
+ if (o.timeOnly === true) {
+ $tp.prepend(
+ '<div class="ui-widget-header ui-helper-clearfix ui-corner-all">' +
+ '<div class="ui-datepicker-title">' + o.timeOnlyTitle + '</div>' +
+ '</div>');
+ $dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();
+ }
+
+ this.hour_slider = $tp.find('#ui_tpicker_hour_'+ dp_id).slider({
+ orientation: "horizontal",
+ value: this.hour,
+ min: o.hourMin,
+ max: hourMax,
+ step: o.stepHour,
+ slide: function(event, ui) {
+ tp_inst.hour_slider.slider( "option", "value", ui.value);
+ tp_inst._onTimeChange();
+ }
+ });
+
+
+ // Updated by Peter Medeiros:
+ // - Pass in Event and UI instance into slide function
+ this.minute_slider = $tp.find('#ui_tpicker_minute_'+ dp_id).slider({
+ orientation: "horizontal",
+ value: this.minute,
+ min: o.minuteMin,
+ max: minMax,
+ step: o.stepMinute,
+ slide: function(event, ui) {
+ tp_inst.minute_slider.slider( "option", "value", ui.value);
+ tp_inst._onTimeChange();
+ }
+ });
+
+ this.second_slider = $tp.find('#ui_tpicker_second_'+ dp_id).slider({
+ orientation: "horizontal",
+ value: this.second,
+ min: o.secondMin,
+ max: secMax,
+ step: o.stepSecond,
+ slide: function(event, ui) {
+ tp_inst.second_slider.slider( "option", "value", ui.value);
+ tp_inst._onTimeChange();
+ }
+ });
+
+ this.millisec_slider = $tp.find('#ui_tpicker_millisec_'+ dp_id).slider({
+ orientation: "horizontal",
+ value: this.millisec,
+ min: o.millisecMin,
+ max: millisecMax,
+ step: o.stepMillisec,
+ slide: function(event, ui) {
+ tp_inst.millisec_slider.slider( "option", "value", ui.value);
+ tp_inst._onTimeChange();
+ }
+ });
+
+ this.timezone_select = $tp.find('#ui_tpicker_timezone_'+ dp_id).append('<select></select>').find("select");
+ $.fn.append.apply(this.timezone_select,
+ $.map(o.timezoneList, function(val, idx) {
+ return $("<option />")
+ .val(typeof val == "object" ? val.value : val)
+ .text(typeof val == "object" ? val.label : val);
+ })
+ );
+ this.timezone_select.val((typeof this.timezone != "undefined" && this.timezone != null && this.timezone != "") ? this.timezone : o.timezone);
+ this.timezone_select.change(function() {
+ tp_inst._onTimeChange();
+ });
+
+ // Add grid functionality
+ if (o.showHour && o.hourGrid > 0) {
+ size = 100 * hourGridSize * o.hourGrid / (hourMax - o.hourMin);
+
+ $tp.find(".ui_tpicker_hour table").css({
+ width: size + "%",
+ marginLeft: (size / (-2 * hourGridSize)) + "%",
+ borderCollapse: 'collapse'
+ }).find("td").each( function(index) {
+ $(this).click(function() {
+ var h = $(this).html();
+ if(o.ampm) {
+ var ap = h.substring(2).toLowerCase(),
+ aph = parseInt(h.substring(0,2), 10);
+ if (ap == 'a') {
+ if (aph == 12) h = 0;
+ else h = aph;
+ } else if (aph == 12) h = 12;
+ else h = aph + 12;
+ }
+ tp_inst.hour_slider.slider("option", "value", h);
+ tp_inst._onTimeChange();
+ tp_inst._onSelectHandler();
+ }).css({
+ cursor: 'pointer',
+ width: (100 / hourGridSize) + '%',
+ textAlign: 'center',
+ overflow: 'hidden'
+ });
+ });
+ }
+
+ if (o.showMinute && o.minuteGrid > 0) {
+ size = 100 * minuteGridSize * o.minuteGrid / (minMax - o.minuteMin);
+ $tp.find(".ui_tpicker_minute table").css({
+ width: size + "%",
+ marginLeft: (size / (-2 * minuteGridSize)) + "%",
+ borderCollapse: 'collapse'
+ }).find("td").each(function(index) {
+ $(this).click(function() {
+ tp_inst.minute_slider.slider("option", "value", $(this).html());
+ tp_inst._onTimeChange();
+ tp_inst._onSelectHandler();
+ }).css({
+ cursor: 'pointer',
+ width: (100 / minuteGridSize) + '%',
+ textAlign: 'center',
+ overflow: 'hidden'
+ });
+ });
+ }
+
+ if (o.showSecond && o.secondGrid > 0) {
+ $tp.find(".ui_tpicker_second table").css({
+ width: size + "%",
+ marginLeft: (size / (-2 * secondGridSize)) + "%",
+ borderCollapse: 'collapse'
+ }).find("td").each(function(index) {
+ $(this).click(function() {
+ tp_inst.second_slider.slider("option", "value", $(this).html());
+ tp_inst._onTimeChange();
+ tp_inst._onSelectHandler();
+ }).css({
+ cursor: 'pointer',
+ width: (100 / secondGridSize) + '%',
+ textAlign: 'center',
+ overflow: 'hidden'
+ });
+ });
+ }
+
+ if (o.showMillisec && o.millisecGrid > 0) {
+ $tp.find(".ui_tpicker_millisec table").css({
+ width: size + "%",
+ marginLeft: (size / (-2 * millisecGridSize)) + "%",
+ borderCollapse: 'collapse'
+ }).find("td").each(function(index) {
+ $(this).click(function() {
+ tp_inst.millisec_slider.slider("option", "value", $(this).html());
+ tp_inst._onTimeChange();
+ tp_inst._onSelectHandler();
+ }).css({
+ cursor: 'pointer',
+ width: (100 / millisecGridSize) + '%',
+ textAlign: 'center',
+ overflow: 'hidden'
+ });
+ });
+ }
+
+ var $buttonPanel = $dp.find('.ui-datepicker-buttonpane');
+ if ($buttonPanel.length) $buttonPanel.before($tp);
+ else $dp.append($tp);
+
+ this.$timeObj = $tp.find('#ui_tpicker_time_'+ dp_id);
+
+ if (this.inst !== null) {
+ var timeDefined = this.timeDefined;
+ this._onTimeChange();
+ this.timeDefined = timeDefined;
+ }
+
+ //Emulate datepicker onSelect behavior. Call on slidestop.
+ var onSelectDelegate = function() {
+ tp_inst._onSelectHandler();
+ };
+ this.hour_slider.bind('slidestop',onSelectDelegate);
+ this.minute_slider.bind('slidestop',onSelectDelegate);
+ this.second_slider.bind('slidestop',onSelectDelegate);
+ this.millisec_slider.bind('slidestop',onSelectDelegate);
+
+ // slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/
+ if (this._defaults.addSliderAccess){
+ var sliderAccessArgs = this._defaults.sliderAccessArgs;
+ setTimeout(function(){ // fix for inline mode
+ if($tp.find('.ui-slider-access').length == 0){
+ $tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);
+
+ // fix any grids since sliders are shorter
+ var sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);
+ if(sliderAccessWidth){
+ $tp.find('table:visible').each(function(){
+ var $g = $(this),
+ oldWidth = $g.outerWidth(),
+ oldMarginLeft = $g.css('marginLeft').toString().replace('%',''),
+ newWidth = oldWidth - sliderAccessWidth,
+ newMarginLeft = ((oldMarginLeft * newWidth)/oldWidth) + '%';
+
+ $g.css({ width: newWidth, marginLeft: newMarginLeft });
+ });
+ }
+ }
+ },0);
+ }
+ // end slideAccess integration
+
+ }
+ },
+
+ //########################################################################
+ // This function tries to limit the ability to go outside the
+ // min/max date range
+ //########################################################################
+ _limitMinMaxDateTime: function(dp_inst, adjustSliders){
+ var o = this._defaults,
+ dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);
+
+ if(!this._defaults.showTimepicker) return; // No time so nothing to check here
+
+ if($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date){
+ var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),
+ minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);
+
+ if(this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null){
+ this.hourMinOriginal = o.hourMin;
+ this.minuteMinOriginal = o.minuteMin;
+ this.secondMinOriginal = o.secondMin;
+ this.millisecMinOriginal = o.millisecMin;
+ }
+
+ if(dp_inst.settings.timeOnly || minDateTimeDate.getTime() == dp_date.getTime()) {
+ this._defaults.hourMin = minDateTime.getHours();
+ if (this.hour <= this._defaults.hourMin) {
+ this.hour = this._defaults.hourMin;
+ this._defaults.minuteMin = minDateTime.getMinutes();
+ if (this.minute <= this._defaults.minuteMin) {
+ this.minute = this._defaults.minuteMin;
+ this._defaults.secondMin = minDateTime.getSeconds();
+ } else if (this.second <= this._defaults.secondMin){
+ this.second = this._defaults.secondMin;
+ this._defaults.millisecMin = minDateTime.getMilliseconds();
+ } else {
+ if(this.millisec < this._defaults.millisecMin)
+ this.millisec = this._defaults.millisecMin;
+ this._defaults.millisecMin = this.millisecMinOriginal;
+ }
+ } else {
+ this._defaults.minuteMin = this.minuteMinOriginal;
+ this._defaults.secondMin = this.secondMinOriginal;
+ this._defaults.millisecMin = this.millisecMinOriginal;
+ }
+ }else{
+ this._defaults.hourMin = this.hourMinOriginal;
+ this._defaults.minuteMin = this.minuteMinOriginal;
+ this._defaults.secondMin = this.secondMinOriginal;
+ this._defaults.millisecMin = this.millisecMinOriginal;
+ }
+ }
+
+ if($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date){
+ var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),
+ maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);
+
+ if(this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null){
+ this.hourMaxOriginal = o.hourMax;
+ this.minuteMaxOriginal = o.minuteMax;
+ this.secondMaxOriginal = o.secondMax;
+ this.millisecMaxOriginal = o.millisecMax;
+ }
+
+ if(dp_inst.settings.timeOnly || maxDateTimeDate.getTime() == dp_date.getTime()){
+ this._defaults.hourMax = maxDateTime.getHours();
+ if (this.hour >= this._defaults.hourMax) {
+ this.hour = this._defaults.hourMax;
+ this._defaults.minuteMax = maxDateTime.getMinutes();
+ if (this.minute >= this._defaults.minuteMax) {
+ this.minute = this._defaults.minuteMax;
+ this._defaults.secondMax = maxDateTime.getSeconds();
+ } else if (this.second >= this._defaults.secondMax) {
+ this.second = this._defaults.secondMax;
+ this._defaults.millisecMax = maxDateTime.getMilliseconds();
+ } else {
+ if(this.millisec > this._defaults.millisecMax) this.millisec = this._defaults.millisecMax;
+ this._defaults.millisecMax = this.millisecMaxOriginal;
+ }
+ } else {
+ this._defaults.minuteMax = this.minuteMaxOriginal;
+ this._defaults.secondMax = this.secondMaxOriginal;
+ this._defaults.millisecMax = this.millisecMaxOriginal;
+ }
+ }else{
+ this._defaults.hourMax = this.hourMaxOriginal;
+ this._defaults.minuteMax = this.minuteMaxOriginal;
+ this._defaults.secondMax = this.secondMaxOriginal;
+ this._defaults.millisecMax = this.millisecMaxOriginal;
+ }
+ }
+
+ if(adjustSliders !== undefined && adjustSliders === true){
+ var hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)) ,10),
+ minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)) ,10),
+ secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)) ,10),
+ millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)) ,10);
+
+ if(this.hour_slider)
+ this.hour_slider.slider("option", { min: this._defaults.hourMin, max: hourMax }).slider('value', this.hour);
+ if(this.minute_slider)
+ this.minute_slider.slider("option", { min: this._defaults.minuteMin, max: minMax }).slider('value', this.minute);
+ if(this.second_slider)
+ this.second_slider.slider("option", { min: this._defaults.secondMin, max: secMax }).slider('value', this.second);
+ if(this.millisec_slider)
+ this.millisec_slider.slider("option", { min: this._defaults.millisecMin, max: millisecMax }).slider('value', this.millisec);
+ }
+
+ },
+
+
+ //########################################################################
+ // when a slider moves, set the internal time...
+ // on time change is also called when the time is updated in the text field
+ //########################################################################
+ _onTimeChange: function() {
+ var hour = (this.hour_slider) ? this.hour_slider.slider('value') : false,
+ minute = (this.minute_slider) ? this.minute_slider.slider('value') : false,
+ second = (this.second_slider) ? this.second_slider.slider('value') : false,
+ millisec = (this.millisec_slider) ? this.millisec_slider.slider('value') : false,
+ timezone = (this.timezone_select) ? this.timezone_select.val() : false,
+ o = this._defaults;
+
+ if (typeof(hour) == 'object') hour = false;
+ if (typeof(minute) == 'object') minute = false;
+ if (typeof(second) == 'object') second = false;
+ if (typeof(millisec) == 'object') millisec = false;
+ if (typeof(timezone) == 'object') timezone = false;
+
+ if (hour !== false) hour = parseInt(hour,10);
+ if (minute !== false) minute = parseInt(minute,10);
+ if (second !== false) second = parseInt(second,10);
+ if (millisec !== false) millisec = parseInt(millisec,10);
+
+ var ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];
+
+ // If the update was done in the input field, the input field should not be updated.
+ // If the update was done using the sliders, update the input field.
+ var hasChanged = (hour != this.hour || minute != this.minute
+ || second != this.second || millisec != this.millisec
+ || (this.ampm.length > 0
+ && (hour < 12) != ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1))
+ || timezone != this.timezone);
+
+ if (hasChanged) {
+
+ if (hour !== false)this.hour = hour;
+ if (minute !== false) this.minute = minute;
+ if (second !== false) this.second = second;
+ if (millisec !== false) this.millisec = millisec;
+ if (timezone !== false) this.timezone = timezone;
+
+ if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);
+
+ this._limitMinMaxDateTime(this.inst, true);
+ }
+ if (o.ampm) this.ampm = ampm;
+
+ //this._formatTime();
+ this.formattedTime = $.datepicker.formatTime(this._defaults.timeFormat, this, this._defaults);
+ if (this.$timeObj) this.$timeObj.text(this.formattedTime + o.timeSuffix);
+ this.timeDefined = true;
+ if (hasChanged) this._updateDateTime();
+ },
+
+ //########################################################################
+ // call custom onSelect.
+ // bind to sliders slidestop, and grid click.
+ //########################################################################
+ _onSelectHandler: function() {
+ var onSelect = this._defaults.onSelect;
+ var inputEl = this.$input ? this.$input[0] : null;
+ if (onSelect && inputEl) {
+ onSelect.apply(inputEl, [this.formattedDateTime, this]);
+ }
+ },
+
+ //########################################################################
+ // left for any backwards compatibility
+ //########################################################################
+ _formatTime: function(time, format) {
+ time = time || { hour: this.hour, minute: this.minute, second: this.second, millisec: this.millisec, ampm: this.ampm, timezone: this.timezone };
+ var tmptime = (format || this._defaults.timeFormat).toString();
+
+ tmptime = $.datepicker.formatTime(tmptime, time, this._defaults);
+
+ if (arguments.length) return tmptime;
+ else this.formattedTime = tmptime;
+ },
+
+ //########################################################################
+ // update our input with the new date time..
+ //########################################################################
+ _updateDateTime: function(dp_inst) {
+ dp_inst = this.inst || dp_inst;
+ var dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),
+ dateFmt = $.datepicker._get(dp_inst, 'dateFormat'),
+ formatCfg = $.datepicker._getFormatConfig(dp_inst),
+ timeAvailable = dt !== null && this.timeDefined;
+ this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);
+ var formattedDateTime = this.formattedDate;
+ if (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0))
+ return;
+
+ if (this._defaults.timeOnly === true) {
+ formattedDateTime = this.formattedTime;
+ } else if (this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) {
+ formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;
+ }
+
+ this.formattedDateTime = formattedDateTime;
+
+ if(!this._defaults.showTimepicker) {
+ this.$input.val(this.formattedDate);
+ } else if (this.$altInput && this._defaults.altFieldTimeOnly === true) {
+ this.$altInput.val(this.formattedTime);
+ this.$input.val(this.formattedDate);
+ } else if(this.$altInput) {
+ this.$altInput.val(formattedDateTime);
+ this.$input.val(formattedDateTime);
+ } else {
+ this.$input.val(formattedDateTime);
+ }
+
+ this.$input.trigger("change");
+ }
+
+});
+
+$.fn.extend({
+ //########################################################################
+ // shorthand just to use timepicker..
+ //########################################################################
+ timepicker: function(o) {
+ o = o || {};
+ var tmp_args = arguments;
+
+ if (typeof o == 'object') tmp_args[0] = $.extend(o, { timeOnly: true });
+
+ return $(this).each(function() {
+ $.fn.datetimepicker.apply($(this), tmp_args);
+ });
+ },
+
+ //########################################################################
+ // extend timepicker to datepicker
+ //########################################################################
+ datetimepicker: function(o) {
+ o = o || {};
+ var $input = this,
+ tmp_args = arguments;
+
+ if (typeof(o) == 'string'){
+ if(o == 'getDate')
+ return $.fn.datepicker.apply($(this[0]), tmp_args);
+ else
+ return this.each(function() {
+ var $t = $(this);
+ $t.datepicker.apply($t, tmp_args);
+ });
+ }
+ else
+ return this.each(function() {
+ var $t = $(this);
+ $t.datepicker($.timepicker._newInst($t, o)._defaults);
+ });
+ }
+});
+
+//########################################################################
+// format the time all pretty...
+// format = string format of the time
+// time = a {}, not a Date() for timezones
+// options = essentially the regional[].. amNames, pmNames, ampm
+//########################################################################
+$.datepicker.formatTime = function(format, time, options) {
+ options = options || {};
+ options = $.extend($.timepicker._defaults, options);
+ time = $.extend({hour:0, minute:0, second:0, millisec:0, timezone:'+0000'}, time);
+
+ var tmptime = format;
+ var ampmName = options['amNames'][0];
+
+ var hour = parseInt(time.hour, 10);
+ if (options.ampm) {
+ if (hour > 11){
+ ampmName = options['pmNames'][0];
+ if(hour > 12)
+ hour = hour % 12;
+ }
+ if (hour === 0)
+ hour = 12;
+ }
+ tmptime = tmptime.replace(/(?:hh?|mm?|ss?|[tT]{1,2}|[lz])/g, function(match) {
+ switch (match.toLowerCase()) {
+ case 'hh': return ('0' + hour).slice(-2);
+ case 'h': return hour;
+ case 'mm': return ('0' + time.minute).slice(-2);
+ case 'm': return time.minute;
+ case 'ss': return ('0' + time.second).slice(-2);
+ case 's': return time.second;
+ case 'l': return ('00' + time.millisec).slice(-3);
+ case 'z': return time.timezone;
+ case 't': case 'tt':
+ if (options.ampm) {
+ if (match.length == 1)
+ ampmName = ampmName.charAt(0);
+ return match.charAt(0) == 'T' ? ampmName.toUpperCase() : ampmName.toLowerCase();
+ }
+ return '';
+ }
+ });
+
+ tmptime = $.trim(tmptime);
+ return tmptime;
+}
+
+//########################################################################
+// the bad hack :/ override datepicker so it doesnt close on select
+// inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378
+//########################################################################
+$.datepicker._base_selectDate = $.datepicker._selectDate;
+$.datepicker._selectDate = function (id, dateStr) {
+ var inst = this._getInst($(id)[0]),
+ tp_inst = this._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ tp_inst._limitMinMaxDateTime(inst, true);
+ inst.inline = inst.stay_open = true;
+ //This way the onSelect handler called from calendarpicker get the full dateTime
+ this._base_selectDate(id, dateStr);
+ inst.inline = inst.stay_open = false;
+ this._notifyChange(inst);
+ this._updateDatepicker(inst);
+ }
+ else this._base_selectDate(id, dateStr);
+};
+
+//#############################################################################################
+// second bad hack :/ override datepicker so it triggers an event when changing the input field
+// and does not redraw the datepicker on every selectDate event
+//#############################################################################################
+$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;
+$.datepicker._updateDatepicker = function(inst) {
+
+ // don't popup the datepicker if there is another instance already opened
+ var input = inst.input[0];
+ if($.datepicker._curInst &&
+ $.datepicker._curInst != inst &&
+ $.datepicker._datepickerShowing &&
+ $.datepicker._lastInput != input) {
+ return;
+ }
+
+ if (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {
+
+ this._base_updateDatepicker(inst);
+
+ // Reload the time control when changing something in the input text field.
+ var tp_inst = this._get(inst, 'timepicker');
+ if(tp_inst) tp_inst._addTimePicker(inst);
+ }
+};
+
+//#######################################################################################
+// third bad hack :/ override datepicker so it allows spaces and colon in the input field
+//#######################################################################################
+$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;
+$.datepicker._doKeyPress = function(event) {
+ var inst = $.datepicker._getInst(event.target),
+ tp_inst = $.datepicker._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ if ($.datepicker._get(inst, 'constrainInput')) {
+ var ampm = tp_inst._defaults.ampm,
+ dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),
+ datetimeChars = tp_inst._defaults.timeFormat.toString()
+ .replace(/[hms]/g, '')
+ .replace(/TT/g, ampm ? 'APM' : '')
+ .replace(/Tt/g, ampm ? 'AaPpMm' : '')
+ .replace(/tT/g, ampm ? 'AaPpMm' : '')
+ .replace(/T/g, ampm ? 'AP' : '')
+ .replace(/tt/g, ampm ? 'apm' : '')
+ .replace(/t/g, ampm ? 'ap' : '') +
+ " " +
+ tp_inst._defaults.separator +
+ tp_inst._defaults.timeSuffix +
+ (tp_inst._defaults.showTimezone ? tp_inst._defaults.timezoneList.join('') : '') +
+ (tp_inst._defaults.amNames.join('')) +
+ (tp_inst._defaults.pmNames.join('')) +
+ dateChars,
+ chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);
+ return event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);
+ }
+ }
+
+ return $.datepicker._base_doKeyPress(event);
+};
+
+//#######################################################################################
+// Override key up event to sync manual input changes.
+//#######################################################################################
+$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;
+$.datepicker._doKeyUp = function (event) {
+ var inst = $.datepicker._getInst(event.target),
+ tp_inst = $.datepicker._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ if (tp_inst._defaults.timeOnly && (inst.input.val() != inst.lastVal)) {
+ try {
+ $.datepicker._updateDatepicker(inst);
+ }
+ catch (err) {
+ $.datepicker.log(err);
+ }
+ }
+ }
+
+ return $.datepicker._base_doKeyUp(event);
+};
+
+//#######################################################################################
+// override "Today" button to also grab the time.
+//#######################################################################################
+$.datepicker._base_gotoToday = $.datepicker._gotoToday;
+$.datepicker._gotoToday = function(id) {
+ var inst = this._getInst($(id)[0]),
+ $dp = inst.dpDiv;
+ this._base_gotoToday(id);
+ var now = new Date();
+ var tp_inst = this._get(inst, 'timepicker');
+ if (tp_inst && tp_inst._defaults.showTimezone && tp_inst.timezone_select) {
+ var tzoffset = now.getTimezoneOffset(); // If +0100, returns -60
+ var tzsign = tzoffset > 0 ? '-' : '+';
+ tzoffset = Math.abs(tzoffset);
+ var tzmin = tzoffset % 60;
+ tzoffset = tzsign + ('0' + (tzoffset - tzmin) / 60).slice(-2) + ('0' + tzmin).slice(-2);
+ if (tp_inst._defaults.timezoneIso8609)
+ tzoffset = tzoffset.substring(0, 3) + ':' + tzoffset.substring(3);
+ tp_inst.timezone_select.val(tzoffset);
+ }
+ this._setTime(inst, now);
+ $( '.ui-datepicker-today', $dp).click();
+};
+
+//#######################################################################################
+// Disable & enable the Time in the datetimepicker
+//#######################################################################################
+$.datepicker._disableTimepickerDatepicker = function(target, date, withDate) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+ $(target).datepicker('getDate'); // Init selected[Year|Month|Day]
+ if (tp_inst) {
+ tp_inst._defaults.showTimepicker = false;
+ tp_inst._updateDateTime(inst);
+ }
+};
+
+$.datepicker._enableTimepickerDatepicker = function(target, date, withDate) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+ $(target).datepicker('getDate'); // Init selected[Year|Month|Day]
+ if (tp_inst) {
+ tp_inst._defaults.showTimepicker = true;
+ tp_inst._addTimePicker(inst); // Could be disabled on page load
+ tp_inst._updateDateTime(inst);
+ }
+};
+
+//#######################################################################################
+// Create our own set time function
+//#######################################################################################
+$.datepicker._setTime = function(inst, date) {
+ var tp_inst = this._get(inst, 'timepicker');
+ if (tp_inst) {
+ var defaults = tp_inst._defaults,
+ // calling _setTime with no date sets time to defaults
+ hour = date ? date.getHours() : defaults.hour,
+ minute = date ? date.getMinutes() : defaults.minute,
+ second = date ? date.getSeconds() : defaults.second,
+ millisec = date ? date.getMilliseconds() : defaults.millisec;
+
+ //check if within min/max times..
+ if ((hour < defaults.hourMin || hour > defaults.hourMax) || (minute < defaults.minuteMin || minute > defaults.minuteMax) || (second < defaults.secondMin || second > defaults.secondMax) || (millisec < defaults.millisecMin || millisec > defaults.millisecMax)) {
+ hour = defaults.hourMin;
+ minute = defaults.minuteMin;
+ second = defaults.secondMin;
+ millisec = defaults.millisecMin;
+ }
+
+ tp_inst.hour = hour;
+ tp_inst.minute = minute;
+ tp_inst.second = second;
+ tp_inst.millisec = millisec;
+
+ if (tp_inst.hour_slider) tp_inst.hour_slider.slider('value', hour);
+ if (tp_inst.minute_slider) tp_inst.minute_slider.slider('value', minute);
+ if (tp_inst.second_slider) tp_inst.second_slider.slider('value', second);
+ if (tp_inst.millisec_slider) tp_inst.millisec_slider.slider('value', millisec);
+
+ tp_inst._onTimeChange();
+ tp_inst._updateDateTime(inst);
+ }
+};
+
+//#######################################################################################
+// Create new public method to set only time, callable as $().datepicker('setTime', date)
+//#######################################################################################
+$.datepicker._setTimeDatepicker = function(target, date, withDate) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ this._setDateFromField(inst);
+ var tp_date;
+ if (date) {
+ if (typeof date == "string") {
+ tp_inst._parseTime(date, withDate);
+ tp_date = new Date();
+ tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
+ }
+ else tp_date = new Date(date.getTime());
+ if (tp_date.toString() == 'Invalid Date') tp_date = undefined;
+ this._setTime(inst, tp_date);
+ }
+ }
+
+};
+
+//#######################################################################################
+// override setDate() to allow setting time too within Date object
+//#######################################################################################
+$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;
+$.datepicker._setDateDatepicker = function(target, date) {
+ var inst = this._getInst(target),
+ tp_date = (date instanceof Date) ? new Date(date.getTime()) : date;
+
+ this._updateDatepicker(inst);
+ this._base_setDateDatepicker.apply(this, arguments);
+ this._setTimeDatepicker(target, tp_date, true);
+};
+
+//#######################################################################################
+// override getDate() to allow getting time too within Date object
+//#######################################################################################
+$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;
+$.datepicker._getDateDatepicker = function(target, noDefault) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ this._setDateFromField(inst, noDefault);
+ var date = this._getDate(inst);
+ if (date && tp_inst._parseTime($(target).val(), tp_inst.timeOnly)) date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
+ return date;
+ }
+ return this._base_getDateDatepicker(target, noDefault);
+};
+
+//#######################################################################################
+// override parseDate() because UI 1.8.14 throws an error about "Extra characters"
+// An option in datapicker to ignore extra format characters would be nicer.
+//#######################################################################################
+$.datepicker._base_parseDate = $.datepicker.parseDate;
+$.datepicker.parseDate = function(format, value, settings) {
+ var date;
+ try {
+ date = this._base_parseDate(format, value, settings);
+ } catch (err) {
+ if (err.indexOf(":") >= 0) {
+ // Hack! The error message ends with a colon, a space, and
+ // the "extra" characters. We rely on that instead of
+ // attempting to perfectly reproduce the parsing algorithm.
+ date = this._base_parseDate(format, value.substring(0,value.length-(err.length-err.indexOf(':')-2)), settings);
+ } else {
+ // The underlying error was not related to the time
+ throw err;
+ }
+ }
+ return date;
+};
+
+//#######################################################################################
+// override formatDate to set date with time to the input
+//#######################################################################################
+$.datepicker._base_formatDate=$.datepicker._formatDate;
+$.datepicker._formatDate = function(inst, day, month, year){
+ var tp_inst = this._get(inst, 'timepicker');
+ if(tp_inst)
+ {
+ if(day)
+ var b = this._base_formatDate(inst, day, month, year);
+ tp_inst._updateDateTime(inst);
+ return tp_inst.$input.val();
+ }
+ return this._base_formatDate(inst);
+};
+
+//#######################################################################################
+// override options setter to add time to maxDate(Time) and minDate(Time). MaxDate
+//#######################################################################################
+$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;
+$.datepicker._optionDatepicker = function(target, name, value) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+ if (tp_inst) {
+ var min,max,onselect;
+ if (typeof name == 'string') { // if min/max was set with the string
+ if (name==='minDate' || name==='minDateTime' )
+ min = value;
+ else if (name==='maxDate' || name==='maxDateTime')
+ max = value;
+ else if (name==='onSelect')
+ onselect=value;
+ } else if (typeof name == 'object') { //if min/max was set with the JSON
+ if(name.minDate)
+ min = name.minDate;
+ else if (name.minDateTime)
+ min = name.minDateTime;
+ else if (name.maxDate)
+ max = name.maxDate;
+ else if (name.maxDateTime)
+ max = name.maxDateTime;
+ }
+ if(min){ //if min was set
+ if(min==0)
+ min=new Date();
+ else
+ min= new Date(min);
+
+ tp_inst._defaults.minDate = min;
+ tp_inst._defaults.minDateTime = min;
+ } else if (max){ //if max was set
+ if(max==0)
+ max=new Date();
+ else
+ max= new Date(max);
+ tp_inst._defaults.maxDate = max;
+ tp_inst._defaults.maxDateTime = max;
+ }
+ else if (onselect)
+ tp_inst._defaults.onSelect=onselect;
+ }
+ if (value === undefined)
+ return this._base_optionDatepicker(target, name);
+ return this._base_optionDatepicker(target, name, value);
+};
+
+//#######################################################################################
+// jQuery extend now ignores nulls!
+//#######################################################################################
+function extendRemove(target, props) {
+ $.extend(target, props);
+ for (var name in props)
+ if (props[name] === null || props[name] === undefined)
+ target[name] = props[name];
+ return target;
+};
+
+$.timepicker = new Timepicker(); // singleton instance
+$.timepicker.version = "0.9.9";
+
+})(jQuery);
--- a/fhiiqm/logout.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/logout.php Fri Jun 08 15:04:22 2012 +0200
@@ -9,6 +9,13 @@
session_start();
$_SESSION = array();
+/* // session cookie loeschen, neuer leerer wird auf Server erstellt
+ if (ini_get("session.use_cookies")) {
+ $params = session_get_cookie_params();
+ setcookie(session_name(), '', time() - 42000, $params["path"],
+ $params["domain"], $params["secure"], $params["httponly"]
+ );
+ } */
session_destroy();
header("location: /fhiiqm/start.php");
--- a/fhiiqm/ma_fkt_ed.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/ma_fkt_ed.php Fri Jun 08 15:04:22 2012 +0200
@@ -28,7 +28,7 @@
$fkt = $_POST["fkt"];
$fkt["fid"] = $fkt["func"]; // kein autocomplete bei Funktion
if (!$fkt["pid"]) $fkt["pid"] = $_GET["p"];
- if (!$fkt["fid"]) $fkt["fid"] = $_GET["f"];
+// if (!$fkt["fid"]) $fkt["fid"] = $_GET["f"];
$mfid = $_GET[i];
$sub = $_POST["eintragen"];
@@ -51,6 +51,7 @@
}
else $duptext = " - Fehler beim Duplizieren von ". $fkt["persknr"] . " und " .$fkt["fkt_ID"];
}
+// print_r($fkt); echo "<br />";
?>
@@ -131,9 +132,9 @@
if ((!isset($fkt) && !$fkt) || !$fkt["pid"] || !$fkt["fid"] || !$sub)
{
- if (($fkt["pid"] && $fkt["fid"] && $mfid) || ($copy && $mfid))
+ if ($mfid)
{
- $sql = "SELECT fkt_bereich, fkt_von, fkt_bis, fkt_bem, CONCAT(nachname,', ',vorname) AS vname, fkt_bez, ma.fkt_ID
+ $sql = "SELECT ma.persknr, fkt_bereich, fkt_von, fkt_bis, fkt_bem, CONCAT(nachname,', ',vorname) AS vname, fkt_bez, ma.fkt_ID
FROM fhiiqm.MA_Funktion ma INNER JOIN
fhiiqm.Mitarbeiter m ON ma.persknr=m.persknr INNER JOIN
fhiiqm.Funktion f ON ma.fkt_ID=f.fkt_ID
@@ -142,6 +143,7 @@
{
foreach ($result as $row)
{
+ $fkt["pid"] = $row->persknr;
$fkt["persknr"] = $row->vname;
// $fkt["func"] = $row->fkt_bez; // nur wenn autocomplete fuer Funktion genutzt wird
$fkt["func"] = $row->fkt_ID;
@@ -179,18 +181,20 @@
{
$sql="SELECT COUNT(*) FROM MA_Funktion WHERE persknr=" . $fkt["pid"] . " AND fkt_ID='" . $fkt["fid"] ."'";
$result = $dbc ->querySingleItem($sql);
- if ($result && $fkt["ber"]>"!" && $mfid)
+ if ($result || $mfid)
{ // UPDATE
$stmt = $dbc -> stmtinit();
if (is_object($stmt))
{
$stmt -> prepare("UPDATE fhiiqm.MA_Funktion SET
+ persknr = ?,
+ fkt_ID = ?,
fkt_bereich = ?,
fkt_von = ?,
fkt_bis = ?,
fkt_bem = ?
WHERE mf_ID = $mfid");
- $stmt -> bind_param('ssss',$fkt["ber"], $fvon, $fbis, $fkt["bem"]);
+ $stmt -> bind_param('isssss',$fkt["pid"],$fkt["fid"],$fkt["ber"], $fvon, $fbis, $fkt["bem"]);
$res = $stmt -> execute();
// print_r($stmt);
if ($stmt->error) echo "error: " . $stmt->errno." -> ".$stmt->error . "<br><br>\n";
--- a/fhiiqm/prozess_flist.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/prozess_flist.php Fri Jun 08 15:04:22 2012 +0200
@@ -140,14 +140,14 @@
tab_column(1,"ID",$sort,$dir,0,$fnum,$filter,$start,$zeil);
tab_column(5,"zu ID",$sort,$dir,5,$fnum,$filter,$start,$zeil);
tab_column(2,"Bezeichnung",$sort,$dir,2,$fnum,$filter,$start,$zeil);
-/* tab_column(3,"Beschreibung",$sort,$dir,0,$fnum,$filter,$start,$zeil); */
+ tab_column(3,"Beschreibung",$sort,$dir,0,$fnum,$filter,$start,$zeil);
tab_column(4,"Produkt",$sort,$dir,4,$fnum,$filter,$start,$zeil);
tab_column(6,"Auftragg.",$sort,$dir,6,$fnum,$filter,$start,$zeil);
tab_column(7,"Verantw.",$sort,$dir,7,$fnum,$filter,$start,$zeil);
echo "<th>Schritte</th>";
-/* tab_column(8,"Start Pl.",$sort,$dir,8,$fnum,$filter,$start,$zeil);
- tab_column(9,"Ende Pl.",$sort,$dir,9,$fnum,$filter,$start,$zeil);
- tab_column(10,"Kosten Pl.",$sort,$dir,0,$fnum,$filter,$start,$zeil); */
+ tab_column(8,"Start Plan",$sort,$dir,8,$fnum,$filter,$start,$zeil);
+ tab_column(9,"Ende Plan",$sort,$dir,9,$fnum,$filter,$start,$zeil);
+ tab_column(10,"Kosten Plan",$sort,$dir,0,$fnum,$filter,$start,$zeil);
tab_column(11,"Start",$sort,$dir,11,$fnum,$filter,$start,$zeil);
tab_column(12,"Ende",$sort,$dir,12,$fnum,$filter,$start,$zeil);
tab_column(13,"Kosten",$sort,$dir,0,$fnum,$filter,$start,$zeil);
@@ -166,7 +166,7 @@
echo "<tr bgcolor='" . $bg . "'><td>$row->proz_ID</td>";
if ($row->proz_ref_ID) echo "<td>$row->proz_ref_ID</td>"; else echo "<td> </td>";
echo "<td>$row->bez</td>";
-/* echo "<td>" .nl2br($row->proz_bez_l)."</td>"; */
+ echo "<td>" .nl2br($row->bez_l)."</td>";
echo "<td>$row->prod_name</td>";
echo "<td>$row->ama</td>";
echo "<td>$row->vma</td>";
@@ -177,7 +177,7 @@
foreach ($steps as $step)
{
list($id,$ste) = explode("|",$step);
- echo $ste . "<br />";
+ echo "- $ste<br />";
}
echo "</td>";
}
@@ -194,6 +194,19 @@
}
else echo "<td> </td>";
echo "<td>".number_format($row->kost_pl,2,",","."); */
+ if ($row->start_pl)
+ {
+ $dat = new DateTime($row->start_pl);
+ echo "<td class=\"left\">" . $dat->format('d.m.Y')."</td>";
+ }
+ else echo "<td> </td>";
+ if ($row->end_pl)
+ {
+ $dat = new DateTime($row->end_pl);
+ echo "<td class=\"left\">" . $dat->format('d.m.Y')."</td>";
+ }
+ else echo "<td> </td>";
+ if ($row->kost_pl) echo "<td>".number_format($row->kost_pl,2,",","."); else echo "<td> </td>";
if ($row->start)
{
$dat = new DateTime($row->start);
@@ -206,7 +219,7 @@
echo "<td class=\"left\">" . $dat->format('d.m.Y')."</td>";
}
else echo "<td> </td>";
- echo "<td>".number_format($row->kost,2,",",".");
+ if ($row->kost) echo "<td>".number_format($row->kost,2,",","."); else echo "<td> </td>";
echo "<td>$row->urg_bez</td>";
echo "<td>$row->stat_bez</td>";
echo "<td>".nl2br($row->bem)."</td>";
--- a/fhiiqm/raum_aptyp_ed.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/raum_aptyp_ed.php Fri Jun 08 15:04:22 2012 +0200
@@ -99,9 +99,9 @@
{
if ($apid && !$sub && !isset($ap))
{
- $sql = "SELECT geb_ID, a.raum_ID,a.arbplatz_typ
- FROM Raum_Arbplatz_Typ a INNER JOIN Raum r ON a.raum_ID = r.raum_ID
- WHERE a.raum_ID = $apid
+ $sql = "SELECT geb_ID, r.raum_ID,a.arbplatz_typ
+ FROM Raum_Arbplatz_Typ a RIGHT OUTER JOIN Raum r ON a.raum_ID = r.raum_ID
+ WHERE r.raum_ID = $apid
ORDER BY a.arbplatz_typ";
if ($res = $dbc -> queryObjectArray($sql))
{
--- a/fhiiqm/recht_ed.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/recht_ed.php Fri Jun 08 15:04:22 2012 +0200
@@ -133,6 +133,7 @@
if ($ins == "eingeben")
{
+ $resu=1;
// pruefen, ob userid schon existiert
$sql = "SELECT persknr, userid FROM fhiiqm.userweb WHERE userid = '" . $rt["userid"] . "'";
if ($result = $dbc ->queryObjectArray($sql))
@@ -145,7 +146,7 @@
}
}
else
- {
+ { //update
$sql = "SELECT userid FROM fhiiqm.userweb WHERE persknr = $pget";
if ($userid = $dbc->querySingleItem($sql))
{
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fhiiqm/report/fkt_ma_report.php Fri Jun 08 15:04:22 2012 +0200
@@ -0,0 +1,293 @@
+<?php
+
+/**
+ * @author Bettina Schwarzer, Fritz-Haber-Institut
+ * @copyright 05/2012
+ *
+ * Liste Funktionen ohne Berechtigung
+ */
+
+ error_reporting(E_ALL ^ E_NOTICE);
+
+ if (!isset($_GET["s"]))
+ {
+ session_start();
+ if (! isset($_SESSION["userid"]))
+ {
+ include_once ("inc/func_lib.inc.php");
+ login($_SERVER["PHP_SELF"]);
+ exit;
+ }
+
+ if (is_null($_SESSION["recht"]) || (!is_null($_SESSION["recht"]) && !in_array("fmr",$_SESSION["recht"]) && !in_array("fme",$_SESSION["recht"])))
+ {
+ header("Location: start.php");
+ exit;
+ }
+ }
+
+ include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
+
+ if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
+
+?>
+<!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" media="screen"/>
+ <link href="/fhiiqm/css/db_print.css" rel="STYLESHEET" type="TEXT/CSS" media="print"/>
+ <title>Beauftragte</title>
+</head>
+
+<body>
+<?php
+ if (!isset($_GET["s"]))
+ {
+ echo " ";
+ echo "<div class=\"float-br smaller\" valign='top'>";
+ echo " user: " . $_SESSION["userid"];
+ echo " <a class='sc' href='/fhiiqm/logout.php' title='Session beenden'>logout</a></div>\n";
+ echo "<div class=\"float-r\"><img src=\"/fhiiqm/img/reseller_account_template.png\" border=\"0\" alt=\"Mitarbeiter-Funktion\" title=\"Mitarbeiter-Funktion\"/></div>\n";
+ }
+ $rag = $_POST["rag"]; // Parameter aus Form
+ $search = $_POST["search"];
+ if (!$search) $search = $_GET["s"];
+
+ if (!$zeil) $zeil = 9999; // Anzahl der gezeigten Zeilen
+ $start = $_GET["st"]; // Start bei DS $start+1
+ if (!$start) $start=0;
+
+ if (!is_array($rag))
+ {
+ $rag["fktg"] = $_GET["g"]; // Funktionsgruppe
+ $rag["fkt"] = $_GET["f"]; // Funktion
+ $rag["nfkt"] = $_GET["n"]; // nicht ausgewaehlte Funktion
+ $rag["fktb"] = $_GET["b"]; // Geltungsbereich
+ $rag["bind"] = $_GET["j"]; // Verknuepfung
+ }
+/*
+ $_GET["f"] = $rag["fkt"];
+ $_GET["b"] = $rag["fktb"];
+ $_GET["j"] = $rag["bind"];
+*/
+ echo "<div align='center'>\n";
+ echo "<p><b>Bericht Beauftragte</b></p>\n";
+ echo "</div>\n";
+ if (!$search)
+ {
+?>
+ <div align="center">
+ <h3><font face="Verdana, Arial, Helvetica, sans-serif"></font></h3>
+ <p>Bitte Kriterien für die Suche wählen</p>
+ </div>
+ <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" enctype="application/x-www-form-urlencoded" name="form_rag" target="_self">
+ <div align="center">
+ <table width="50%" border="0" cellspacing="3" cellpadding="3">
+ <tr>
+ <td>Funktionsgruppe</td>
+ <td>
+ <select name="rag[fktg]" size="1">
+ <?php
+ if ($rag["fktg"] == -1) $select = " selected "; else $select = "";
+ echo "<option $select value=\"-1\"></option>\n";
+ $sql = "SELECT fktgr_ID,fktgr_bez
+ FROM Funktion_Gruppe ORDER BY 1";
+ if ($result = $dbc->queryObjectArray($sql))
+ {
+ foreach ($result as $row)
+ {
+ if ($row->fktgr_ID == $rag['fktg'])
+ echo "<option selected value=\"$row->fktgr_ID\">$row->fktgr_bez</option>\n";
+ else
+ echo "<option value=\"$row->fktgr_ID\">$row->fktgr_bez</option>\n";
+ }
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>Funktion</td>
+ <td>
+ <select name="rag[fkt]" size="1">
+ <?php
+ if ($rag["fkt"] == -1) $select = " selected "; else $select = "";
+ echo "<option $select value=\"-1\"></option>\n";
+ $sql = "SELECT DISTINCT mf.fkt_ID,fkt_bez
+ FROM fhiiqm.MA_Funktion mf INNER JOIN Funktion f ON mf.fkt_ID=f.fkt_ID ORDER BY 2";
+ if ($result = $dbc->queryObjectArray($sql))
+ {
+ foreach ($result as $row)
+ {
+ if ($row->fkt_ID == $rag['fkt'])
+ echo "<option selected value=\"$row->fkt_ID\">$row->fkt_bez</option>\n";
+ else
+ echo "<option value=\"$row->fkt_ID\">$row->fkt_bez</option>\n";
+ }
+ }
+ ?>
+ </select>
+ diese nicht <input type="checkbox" name="rag[nfkt]" value="1"/>
+ </td>
+ </tr>
+ <tr>
+ <td>Geltungsbereich</td>
+ <td>
+ <select name="rag[fktb]" size="1">
+ <?php
+ if ($rag["fktb"] == -1) $select = " selected "; else $select = "";
+ echo "<option $select value=\"-1\"></option>\n";
+ $sql = "SELECT DISTINCT fkt_bereich FROM fhiiqm.MA_Funktion ORDER BY 1";
+ if ($result = $dbc->queryObjectArray($sql))
+ {
+ foreach ($result as $row)
+ {
+ if ($row->fkt_bereich == $rag['fktb'])
+ echo "<option selected value=\"$row->fkt_bereich\">$row->fkt_bereich</option>\n";
+ else
+ echo "<option value=\"$row->fkt_bereich\">$row->fkt_bereich</option>\n";
+ }
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>Verknüpfung</td>
+ <td>UND
+ <input type="radio" name="rag[bind]" value="AND" <?php if (isset($rag["bind"]) && $rag["bind"]=="AND") echo "checked"; else echo "checked";?>>
+ ODER
+ <input type="radio" name="rag[bind]" value="OR" <?php if (isset($rag["bind"]) && $rag["bind"]=="OR") echo "checked"; ?>></td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td><input class="button" type="submit" name="search" value="Bericht erstellen"/></td>
+ </tr>
+ </table>
+ </div>
+ </form>
+<?php
+ }
+ else
+ {
+ echo "<div align='center'>\n";
+//print_r($rag); echo "<br />";
+ $sql = "SELECT nachname,vorname,titel,abt_name,mf.fkt_ID,fkt_bez,fkt_bereich,fkt_bem,tel,email,geb_ID,raum_nr
+ FROM fhiiqm.MA_Funktion mf INNER JOIN Mitarbeiter m ON mf.persknr=m.Persknr
+ INNER JOIN Funktion f ON mf.fkt_ID=f.fkt_ID
+ LEFT OUTER JOIN Abteilung a ON m.abt_tel=a.abt_ID
+ LEFT OUTER JOIN Mitarbeiter_Raum mr ON m.persknr=mr.persknr
+ LEFT OUTER JOIN Raum r ON mr.raum_ID=r.raum_ID";
+ $lim = " LIMIT $start,$zeil";
+
+ if (!$rag["bind"]) $bind = " AND "; else $bind = $rag["bind"];
+
+ if ($rag["fkt"]> -1)
+ {
+ if ($rag['nfkt'])
+ $where = " mf.fkt_ID <> '$rag[fkt]' ";
+ else
+ $where = " mf.fkt_ID = '$rag[fkt]' ";
+ }
+ if ($rag["fktg"]> -1)
+ if ($where) $where .= "$bind fktgr_ID = '$rag[fktg]' "; else $where = " fktgr_ID = '$rag[fktg]' ";
+ if ($rag["fktb"]> -1)
+ if ($where) $where .= "$bind fkt_bereich = '$rag[fktb]' "; else $where = " fkt_bereich = '$rag[fktb]' ";
+ if ($where) $where = " WHERE $where";
+
+
+ $sql .= $where . ' ORDER BY 6,7,1,2' . $lim;
+
+ $result = $dbc ->queryObjectArray($sql);
+
+ if ($rag["fktg"] > -1)
+ {
+ $sql = "SELECT fktgr_bez FROM Funktion_Gruppe WHERE fktgr_ID = '" . $rag["fktg"] ."'";
+ $fktgbez = $dbc -> querySingleItem($sql);
+ $krit = " [Gruppierung = '$fktgbez']";
+ }
+ if ($rag["fkt"] > -1)
+ {
+ $sql = "SELECT fkt_bez FROM Funktion WHERE fkt_ID = '" . $rag["fkt"] ."'";
+ $fktbez = $dbc -> querySingleItem($sql);
+ if ($krit) $bd = " ".$bind; else $bd = "";
+ if ($rag["nfkt"]) $vgl = "<>"; else $vgl = "=";
+ $krit .= $bd." [Funktion $vgl '$fktbez']";
+ }
+ if ($rag["fktb"] > -1)
+ {
+ if ($krit) $bd = " ".$bind; else $bd = "";
+ $krit .= $bd." [Geltungsbereich = '" . $rag["fktb"] ."']";
+ }
+ if ($krit )echo "$krit"; else echo "";
+
+ if ($result)
+ {
+ $bg1 = "#F8F8F8";
+ $bg2 = "#DEDFE1";
+ $bg = "#FFFFFF";
+
+ $sqlc = "SELECT COUNT(*)
+ FROM fhiiqm.MA_Funktion mf INNER JOIN Mitarbeiter m ON mf.persknr=m.Persknr
+ INNER JOIN Funktion f ON mf.fkt_ID=f.fkt_ID
+ LEFT OUTER JOIN Abteilung a ON m.abt_tel=a.abt_ID
+ LEFT OUTER JOIN Mitarbeiter_Raum mr ON m.persknr=mr.persknr
+ LEFT OUTER JOIN Raum r ON mr.raum_ID=r.raum_ID
+ $where";
+ $ianz = $dbc -> querySingleItem($sqlc);
+
+ //$ianz = $dbc -> numrows($sql); //liefert nur $zeil!
+ printf ("<p>Anzahl: %s</p>", $ianz);
+
+ echo "<table border='0' cellspacing='0' cellpadding='2'>\n";
+ // Listenkopf
+ echo "<tr bgcolor='#68ACBF'>";
+ if ($rag["fkt"] == -1 || $rag["nfkt"]) echo "<th>Funktion</th>";
+ echo "<th>Name</th>";
+ echo "<th>Abt.</th>";
+ echo "<th>Geltungsbereich</th>";
+ echo "<th>Gebäude</th>";
+ echo "<th>Raum-Nr.</th>";
+ echo "<th>Tel.</th>";
+ echo "<th>E-Mail</th></tr>\n";
+
+
+ foreach ($result as $row)
+ {
+ if ($bg == $bg1) $bg = $bg2; else $bg = $bg1;
+ echo "<tr bgcolor='" . $bg . "'>";
+ if ($rag["fkt"] == -1 || $rag["nfkt"]) echo "<td>$row->fkt_bez $row->fkt_bem</td>";
+ echo "<td>$row->titel $row->nachname, $row->vorname</td>";
+ echo "<td>$row->abt_name</td>";
+ echo "<td>$row->fkt_bereich</td>";
+ echo "<td>$row->geb_ID</td>";
+ echo "<td>$row->raum_nr</td>";
+ echo "<td>$row->tel</td>";
+ echo "<td><a href='mailto:$row->email'>$row->email</a></td></tr>\n";
+ }
+ echo "</table>\n";
+
+ echo "<p></p><table width=60%><tr><td class='right'><a href=\"javascript:window.print()\" class='sc'>
+ <img src=\"/fhiiqm/img/printer.png\" alt=\"Bericht drucken\" border=\"0\" align=\"right\" title=\"Bericht drucken\"></a></td></tr></table>";
+
+ echo "</div>\n";
+
+ echo "<br /> ";
+ }
+ else
+ {
+ echo "<p class='red'> Leider gibt es kein Ergebnis für die von Ihnen gewählten Kriterien!</p>";
+ echo "</div>\n";
+ }
+
+ if (!isset($_GET["s"]))
+ echo "<br /><br /> <a href=\"" . $_SERVER["PHP_SELF"] . "\" target=\"_self\" title=\"Gefahren\" class=\"sc\">neuer Bericht Beauftragte</a></p>\n";
+ }
+
+?>
+
+</body>
+</html>
+
--- a/fhiiqm/report/vtr_kuend_emaila.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/report/vtr_kuend_emaila.php Fri Jun 08 15:04:22 2012 +0200
@@ -54,11 +54,12 @@
if (!is_null($row -> ckdate) && $heute->format("Y-m-d") == $row->ckdate && $row->email) // 28.02.2012
{
$av = $row->cauto? "automatisch" : " ";
- if ($begin = new DateTime($row->cbegin)) $begin=$begin->format("d.m.Y"); else $begin=" ";
- if ($end = new DateTime($row->cend)) $end=$end->format("d.m.Y"); else $end=" ";
- if ($ckd = new DateTime($row->ckdate)) $ckd=$ckd->format("d.m.Y"); else $ckd=" ";
+ if ($row->cbegin && $begin = new DateTime($row->cbegin)) $begin=$begin->format("d.m.Y"); else $begin=" ";
+ if ($row->cend && $end = new DateTime($row->cend)) $end=$end->format("d.m.Y"); else $end=" ";
+// if ($ckd = new DateTime($row->ckdate)) $ckd=$ckd->format("d.m.Y"); else $ckd=" ";
+ $bem = $row->bem ? $row->bem : " ";
$info = "<tr><td><b>$row->cname</b></td><td>$row->vtypk</td><td>$begin</td><td><b>$end</b></td>
- <td> $av</td><td> $row->cmon</td><td>$row->bem</td></tr>\n";
+ <td> $av</td><td> $row->cmon</td><td>$bem</td></tr>\n";
// Adressat(en)), Attachment? ermitteln
$strsql = $sql .$row->cid;
--- a/fhiiqm/test/email_attach.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/test/email_attach.php Fri Jun 08 15:04:22 2012 +0200
@@ -53,8 +53,9 @@
if (!is_null($row -> ckdate) && $heute->format("Y-m-d") == $row->ckdate && $row->email) // 28.02.2012
{
$av = $row->cauto? "automatisch" : " ";
- if ($begin = new DateTime($row->cbegin)) $begin=$begin->format("d.m.Y"); else $begin=" ";
- if ($end = new DateTime($row->cend)) $end=$end->format("d.m.Y"); else $end=" ";
+ if ($row->cbegin && $begin = new DateTime($row->cbegin)) $begin=$begin->format("d.m.Y"); else $begin=" ";
+ if ($row->cend && $end = new DateTime($row->cend)) $end=$end->format("d.m.Y"); else $end=" ";
+// echo "VEnde = ".$row->cend. ", formatiert = $end<br />";
if ($ckd = new DateTime($row->ckdate)) $ckd=$ckd->format("d.m.Y"); else $ckd=" ";
$info = "<tr><td><b>$row->cname</b></td><td>$row->vtypk</td><td>$begin</td><td><b>$end</b></td>
<td> $av</td><td> $row->cmon</td><td>$row->bem</td></tr>\n";
--- a/fhiiqm/test/raum_list.php Mon May 07 16:21:00 2012 +0200
+++ b/fhiiqm/test/raum_list.php Fri Jun 08 15:04:22 2012 +0200
@@ -42,8 +42,9 @@
echo "<p><b>Liste der erfassten Räume</b></p>\n";
printf ("<p>Es wurden %s Räume gefunden.</p>", $dbc->numrows($sql));
echo "<table>\n";
- echo "<tr bgcolor='#68ACBF'><th>Raum-Nr.</th><th>Bezeichnung</th><th>Haus</th><th>Typ</th><th>Fläche (m<sup>2</sup>)</th><th>Raumplan</th><th> </th>
- </tr>\n";
+ echo "<tr bgcolor='#68ACBF'><th>Raum-Nr.</th><th>Bezeichnung</th><th>Haus</th><th>Typ</th><th>Fläche (m<sup>2</sup>)</th><th>Raumplan</th>";
+// <th> </th>
+ echo "</tr>\n";
foreach ($result as $row)
{
if ($bg == $bg1) $bg = $bg2; else $bg = $bg1;
@@ -52,8 +53,9 @@
echo "<td>$row->geb_ID</td>";
echo "<td>$row->raumtyp_bez</td>";
echo "<td>" . str_replace(".",",",$row->raum_flaeche) . "</td>";
- echo "<td><a href=\"raeume/$row->raum_file\">$row->raum_file</td>";
- echo "<td><a href='/fhiiqm/raum_upd.php?uid=$row->raum_ID'><img src=\"/fhiiqm/img/edit.gif\" alt='edit' title='edit' border='0'/></a></td></tr>\n";
+ echo "<td><a href=\"http://achilleus/fhiiqm/raeume/$row->raum_file\">$row->raum_file</td>";
+ // echo "<td><a href='/fhiiqm/raum_upd.php?uid=$row->raum_ID'><img src=\"/fhiiqm/img/edit.gif\" alt='edit' title='edit' border='0'/></a></td></tr>\n";
+ echo "</tr>\n";
}
echo "</table></div>\n";
}