fhiiqm/info_betrst_ed.php
author Bettina Schwarzer <schwarzer@fhi-berlin.mpg.de>
Fri, 16 Nov 2012 10:39:25 +0100
changeset 31 0a1eb975fbd9
parent 30 d02d02efc55a
child 36 4411d3239444
permissions -rw-r--r--
+ Raumverantwortliche + Mitarbeiter - Telefon

<?php

/**
 * @author Bettina Schwarzer, Fritz-Haber-Institut
 * @copyright 07/2012, 08/2012
 *
 * INSERT,UPDATE Informationen Betriebsstoerung, Betriebsanweisung  
 */

    error_reporting(E_ALL ^ E_NOTICE);
    
    session_start();
    if (! isset($_SESSION["userid"]))
    { 
        include_once ("inc/func_lib.inc.php");	
        login($_SERVER["PHP_SELF"]);
        exit;
    }
    
    $ityp   = $_GET["t"]; // t=7 - Betriebsstoerung, t=8 - Betriebsanweisung
    if ($ityp == 71) $repr = "dd"; else $repr = "i";
    if (is_null($_SESSION["recht"]) || (!is_null($_SESSION["recht"]) && !in_array($repr."r",$_SESSION["recht"]) && !in_array($repr."e",$_SESSION["recht"])))
    {
        header("Location: start.php");
        exit;
    }    

    
    $infid  = $_GET["i"];

    $zeil = $_GET["z"];
    if (!$zeil) $zeil = 10; // Anzahl der gezeigten Zeilen
    $start = $_GET["st"];   // Start bei DS $start+1
    if (!$start) $start=0;
	$sort   = $_GET["s"];   // Sortierung nach Spalte
    $dir    = $_GET["d"];   // Sortierrichtung
    $fnum   = $_GET["f"];   // Spaltennummer, nach der aktuell gefiltert wird
    $filter = $_GET["b"];   // Filterbegriff
    // $_GET-Parameter zurück zur Infoliste mit den selben Einstellungen wie zuvor
    $getp = "s=$sort&d=$dir&f=$fnum&b=$filter&st=$start&z=$zeil";
    
    $del    = $_POST["del"];
    $sub    = $_POST["eintragen"];
    $dup    = $_POST["dup"];
    if (!$dup) $dup = $_GET["dp"];
    $copy   = $_GET["c"];
	$inf    = $_POST["inf"];
    $ok		= $_POST["ok"];
    if (!$inf["okn"]) $ok = false;
    $duptext="";

    switch ($ityp)
    {
        case 7: $titel = "Betriebsst&ouml;rung";
            break;
        case 71: $titel = "Betriebsst&ouml;rung dezentrale Technik";
            break;
        case 8: $titel = "Betriebsanweisung";
            break;
        case 81: $titel = "Betriebsanweisung Anlage";
            break;
    }

    if ($_FILES["ifile"]["error"] == 1 || $_FILES["ifile"]["error"] == 2)
    {
        echo "<p class='red'><b>Uploadfile zu ID '$infid'  > 32MByte!.</b></p>\n";
        $retf=0; $reti=0;
    }    

	include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
    include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/func_lib.inc.php");
	$dbc = new dbconnection();
    
    if ($dup)
    {   // Info duplizieren
        $tab = "Info";
        $key = "info_ID";
        $val =  $infid;
//        $ret=1;
        $ret = duplicate_record ($tab, $key, $val);
        if ($ret)
        { 
            $infid_new=$ret;
            // Infofilename loeschen
            $sql = "UPDATE fhiiqm.Info SET info_file = NULL WHERE info_ID = $infid_new";
            $retf = $dbc -> execute($sql);
            if ($dbc->error) echo "<p  class='red'>error loeschen Info-File: " . $dbc->error . "</p>";
            
            // duplizieren Produkte
            $sql = "INSERT INTO Info_Produkt SELECT $infid_new,produkt_ID FROM Info_Produkt WHERE info_ID = $infid";
            $retp = $dbc -> execute($sql);
            if ($dbc->error) echo "<p  class='red'>error copy Info_Produkt: " . $dbc->error . "</p>";
            
            // duplizieren Adressat
            $sql = "INSERT INTO Info_Funktion SELECT $infid_new,fkt_ID FROM Info_Funktion WHERE info_ID = $infid";
            $reta = $dbc -> execute($sql);
            if ($dbc->error) echo "<p  class='red'>error copy Info_Adressat: " . $dbc->error . "</p>";
            
            // duplizieren Verantwortliche
            $retv=1;
/*            $sql = "INSERT INTO Info_Verantwortlich SELECT $infid_new,persknr,prioritaet FROM Info_Verantwortlich WHERE info_ID = $infid";
            $retv = $dbc -> execute($sql);
            if ($dbc->error) echo "<p  class='red'>error copy Info_Verantwortlich: " . $dbc->error . "</p>";
*/            
            if ($ret && $retf && $retp && $reta && $retv)
            {
                $addr = $_SERVER["PHP_SELF"] . "?i=$infid_new&c=1&t=$ityp&$getp";
                header("Location: $addr");
                exit;
            }
            else $duptext = " - Fehler beim Duplizieren von ". $inf["iname"];    
        }
        else $duptext = " - Fehler beim Duplizieren von ". $inf["iname"];    
    }
    
?>
<!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"/>
    <link type="text/css" href="/fhiiqm/css/jquery/ui-lightness-1.8.21/jquery-ui-1.8.21.custom.css" rel="Stylesheet" />	
    <script type="text/javascript" src="/fhiiqm/js/jquery/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="/fhiiqm/js/jquery/jquery-ui-1.8.21.custom.min.js"></script>

	<?php echo "<title>Edit $titel</title>\n"; ?>
</head>

<body>

    <script>
    <!--
        function split( val ) {
        	return val.split( /;\s*/ );
        }
        function extractLast( term ) {
        	return split( term ).pop();
        }
//        $(document).ready(function() {
        $(function() {
        $("#titel").focus();
        $("#persknr").autocomplete({
                source: "/fhiiqm/inc/ma_list_ac.inc.php",
    			minLength: 2,
                select: function(event,ui){$("#pid").val(ui.item.id);}
    		});
        $("#cdat").datepicker({
            dateFormat: 'yy-mm-dd', //nur Datum
            yearRange: '2000:2025',
            changeMonth: true,
			changeYear: true,
            firstDay: 1,
            dayNamesMin: ['So','Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ],
            monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'] 
        });
        $("#vdat").datepicker({
            dateFormat: 'yy-mm-dd', //nur Datum
            yearRange: '2000:2025',
            changeMonth: true,
			changeYear: true,
            firstDay: 1,
            dayNamesMin: ['So','Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ],
            monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'] 
        });
        $("#bdat").datepicker({
            dateFormat: 'yy-mm-dd', //nur Datum
            yearRange: '2000:2025',
            changeMonth: true,
			changeYear: true,
            firstDay: 1,
            dayNamesMin: ['So','Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ],
            monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'] 
        });
        $("input[id='persknr']").addClass("long20");
        $("input[id='cdat']").addClass("long10");
        $("input[id='vdat']").addClass("long10");
        $("input[id='bdat']").addClass("long10");
        });
        // Adressat mehrfach erstellen
        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='inf[adr][]'>"+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>

<?php
    echo "&nbsp;";  
    echo "<div class=\"float-br smaller\" valign='top'>";
    echo "&nbsp;&nbsp;&nbsp;user: " . $_SESSION["userid"];
    echo "&nbsp;&nbsp;&nbsp;<a class='sc' href='/fhiiqm/logout.php' title='Session beenden'>logout</a></div>\n";
    echo "<div class=\"float-r\"><img src=\"img/document_image_ver.png\" border=\"0\" alt=\"Infodaten &auml;ndern\" title=\"Infodaten &auml;ndern\"/></div>\n";

//print_r($inf); echo "<br />ok = $ok, okn = " .$inf['okn'].", upload: " . $_FILES["ifile"]["error"] .", sub = $sub<br /><br />";
//print_r($_FILES["ifile"]); echo "<br /><br />";
    echo "<div align='center'>";
    if ($infid) $text = "editieren"; else $text = "erfassen";
    if ($copy) $duptext = " (Kopie)";
    echo "<h3>$titel $text$duptext<h3>";
    
    echo "</div>\n";
    
    if (!$ok || (!$sub && !$del && !$dup))
    {
        if ($infid && (!$sub || !$del) && !isset($inf))
        { // update
            $sql = "SELECT info_ID,info_name_s,info_name_l,info_date,info_valid_from,info_valid_to,infotyp_ID,
                                i.persknr,lang,info_file,info_rel_ID,info_freigabe_ID,info_sort, 
                                CONCAT(nachname,', ',vorname) AS aname, i.raum_ID, i.geb_ID 
                                FROM fhiiqm.Info i LEFT OUTER JOIN fhiiqm.Mitarbeiter m 
                                ON i.persknr=m.persknr LEFT OUTER JOIN Raum r
                                ON i.raum_ID = r.raum_ID
                                WHERE info_ID = $infid";
            if ($result = $dbc -> queryObjectArray($sql))
            {
                foreach ($result as $row)
                {
                    $inf["infid"]   = $infid;
                    $inf["iname"]   = $row->info_name_s;
                    $inf["ilong"]   = $row->info_name_l;
                    $inf["cdat"]    = $row->info_date;
                    $inf["vdat"]    = $row->info_valid_from;
                    $inf["bdat"]    = $row->info_valid_to;
                    $inf["ityp"]    = $row->infotyp_ID;
                    $inf["persknr"] = $row->aname;
                    $inf["pers"]    = $row->persknr;
                    $inf["infrel"]  = $row->info_rel_ID;
                    $inf["ifname"]  = $row->info_file;
                    $inf["lang"]    = $row->lang;     
                    $inf["sort"]    = $row->info_sort;
                    $inf["raum"]    = $row->raum_ID;
                    $inf["geb"]     = $row->geb_ID;    
                    $inf["fg"]      = $row->info_freigabe_ID;
                }            
            }
            // Produkt
            $sql = "SELECT produkt_ID FROM Info_Produkt WHERE info_ID = $infid";
            if ($result = $dbc -> queryObjectArray($sql))
            {
                foreach ($result as $row)
                {
                    $inf['prid'][] = $row->produkt_ID;
                }
            }
            if (substr($ityp,0,1) !=8)
            {
                // Adressat
                $sql = "SELECT i.fkt_ID, fkt_bez FROM fhiiqm.Info_Funktion i 
                        LEFT OUTER JOIN Funktion f ON i.fkt_ID=f.fkt_ID WHERE info_id = $infid";
                if ($result = $dbc->queryObjectArray($sql))
                {
                    foreach ($result as $row)
                    $inf["adr"][] = $row->fkt_ID;
                }
            }
            if ($ityp == 81)    // Betriebsanweisung Anlage
            {
                $sql = "SELECT al_ID FROM Info_Anlage WHERE info_ID = $infid";
                $inf["anl"] = $dbc -> querySingleItem($sql);
            }
//    print_r($inf); echo "<br /><br />";
            
        }
        include($_SERVER["DOCUMENT_ROOT"]."/fhiiqm/form/info_betrst_form.inc.php");     
        if ($sub)
		{
            echo            
            "<tr>
        		<td>Upload Infodokument </td>
        		<td><input type=\"file\" name=\"ifile\" size=\"50\" maxlength=\"50\" value=\"" .
            $_FILES["ifile"]["name"] . "\"/></td>
            </tr>";
    
		}
        if ($sub || $del)
		{
		  	if ($sub)
                $frage = "Alle Angaben ok?";
            elseif ($del)
                $frage = "Information wirklich l&ouml;schen?";
			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($repr."e",$_SESSION["recht"]))
        {
            echo "
           	<tr><td>&nbsp;</td>\n
            	<td><input  class=\"button\" type=\"submit\" name=\"eintragen\" value=\"  eintragen  \" />";
            if ($infid)
            {
                echo "&nbsp;&nbsp;&nbsp;<input class=\"buttonr\" type=\"submit\" value=\"l&ouml;schen\" name=\"del\" title=\"delete\" />";
                echo "&nbsp;&nbsp;&nbsp;<input class=\"button\" type=\"submit\" value=\"duplizieren\" name=\"dup\" title=\"delete\" />";
            }    
           	echo "</td></tr>\n";
        }
        echo "</table>\n";
        echo "</div>\n";
//            if (!is_null($_SESSION["recht"]) && !in_array("le", $_SESSION["recht"]))
            echo "<p class='sc'>&nbsp;&nbsp;&nbsp;<a href=\"info_flist.php?$getp\" target=\"_self\" title=\"Infoliste\">&laquo; zur Infoliste</a></p>\n"; 
        echo "</form>\n";   
    }
    else
    {
        echo "<div align='center'>\n";
        
        if ($del)
        {   // loescht auch m:n - Tabellen wegen Loeschweitergabe
            $sql = "DELETE FROM Info WHERE info_ID = '$infid'";
            $retdi = $dbc -> execute($sql);
            if ($retdi)
            {
                include ("inc/file_upload.inc.php");
                $retdf  = mod_file("/var/www/fhiiqm/infos",$infid,"","del");  // Loeschen Dokument
                if ($retdf) echo "<p class='green'><b>Infodokument zu ID '$infid' wurde gel&ouml;scht.</b></p>\n";
                echo "<p class='green'><b>Infodaten zu ID '$infid' wurden gel&ouml;scht.</b></p>\n";
                echo "<br /><br />\n";
    
                // Anzeigen geloeschter Infodaten
                if ($fname)
                    $ifile = $infid . "_" . $fname;
                else
                    $ifile = $inf['ifname'];
                echo "<p class='green'><b>DELETE: Daten  zu '".$inf["iname"]."' wurden erfolgreich gel&ouml;scht.</b></p>\n";
                include ("inc/info_dat_show.inc.php");
            }                
            else
            {
                echo "<p class='red'><b>DELETE: Daten  zu '".$inf["iname"]."' konnten nicht gel&ouml;scht werden!</b></p>\n";
                echo "sql = $sql<br />";
                echo "error DELETE: " . $dbc->error . "<br />";
            }
        }
        else //INSERT oder UPDATE
        {
            //daten speichern
            $inf["iname"] = substr($inf["iname"],0,300);
            $inf["ilong"] = substr($inf["ilong"],0,8000);
            $inf["sort"] = substr($inf["sort"],0,10);   // 28.03.2012 5 -> 10 Zeichen
            if ($ityp == 8) $inf["sort"] = null;
            if ($inf["ityp"] == -1) $inf["ityp"] = null;
            
            if ($inf["persknr"] < "!") $inf["pers"] = null;
            if ($inf["infrel"] == -1) $inf["infrel"] = null;
            if ($inf["lang"] == -1) $inf["lang"] = null;
            if ($inf["ifname"] < "!") $inf["ifname"] = null;
            if ($inf["raum"] == -1) $inf["raum"] = null;
            if ($inf["geb"] == -1) $inf["geb"] = null;
            
            if ($inf["cdat"] == "") $inf["cdat"] = null; 
            if ($inf["vdat"] == "") $inf["vdat"] = null; 
            if ($inf["bdat"] == "") $inf["bdat"] = null; 
            if ($inf["fg"] == -1) $inf["fg"] = null;
    
            if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
            
            $stmt = $dbc -> stmtinit();
            if (is_object($stmt))
            {
                if ($infid)
                {   //UPDATE
                    // alter Name Infofile
                    $sql = "SELECT info_file FROM Info WHERE info_ID = $infid";
                    $ifile_old = $dbc -> querySingleItem($sql);
                    
                    $stmt -> prepare("UPDATE fhiiqm.Info SET
                                info_name_s = ?, 
                                info_name_l = ?, 
                                info_date = ?, 
                                info_valid_from = ?, 
                                info_valid_to = ?, 
                                infotyp_ID = ?, 
                                persknr = ?, 
                                lang = ?,
                                info_freigabe_ID = ?, 
                                info_sort = ?, 
                                info_rel_ID = ?,
                                raum_ID = ?, 
                                geb_ID = ? WHERE info_ID = $infid");
                    $stmt -> bind_param('sssssiisisiis',$inf["iname"],$inf["ilong"],$inf["cdat"],$inf["vdat"],$inf["bdat"],$inf["ityp"],$inf["pers"],$inf["lang"],$inf["fg"],$inf["sort"],$inf["infrel"],$inf["raum"],$inf["geb"]);
                    $result = $stmt -> execute();
                    if ($stmt->error) echo "error UPDATE Info: " . $stmt->error . "<br><br>\n";
                }
                else
                {   //INSERT
//                    print_r($inf); echo "<br /><br />";
                    $stmt -> prepare ("INSERT INTO Info (info_name_s,info_name_l,info_date,info_valid_from,info_valid_to,
                                infotyp_ID,persknr,lang,info_freigabe_ID,info_sort,info_rel_ID,raum_ID,geb_ID) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
                    $stmt -> bind_param('sssssiisisiis', $inf["iname"],$inf["ilong"],$inf["cdat"],$inf["vdat"],$inf["bdat"],$inf["ityp"],$inf["pers"],$inf["lang"],$inf["fg"],$inf["sort"],$inf["infrel"],$inf["raum"],$inf["geb"]);
                    $result = $stmt -> execute();      
                
                    if ($stmt->error) echo "error INSERT Info: " . $stmt->error . "<br><br>\n";
                    if ($result)
                    { // INSERT o.k.
                      // info_ID ermitteln
                        $infid = $dbc -> insertId();
                    }    
                } 
            }   // stmt-Objekt
            if ($result)
            {
//                echo "upload error: ". $_FILES["ifile"]["error"] . "<br /><br />";    
                 // n:m Tabellen INSERT
                include ("inc/info_tab_ins.inc.php");

                // upload File
                if ($_FILES["ifile"]["error"] == 1 || $_FILES["ifile"]["error"] == 2)
                {
                    echo "<p class='red'><b>Uploadfile zu ID '$infid'  > 32MByte!.</b></p>\n";
                    $retf=0; $reti=0;
                }    
                elseif (is_uploaded_file($_FILES["ifile"]["tmp_name"]) && isset($_FILES["ifile"]["name"]) && $_FILES["ifile"]["name"] )
                {
                    include ("inc/file_upload.inc.php");
                    $fname  = gen_filename($inf['ifname'],"ifile",$infid);
                    $retdf  = mod_file("/var/www/fhiiqm/infos",$infid,"","del");     // Loeschen alte Datei
                    $retf   = upload("ifile", $fname, $infid, "infos");              // Datei prüfen und in Dokumentenverzeichnis verschieben
                    
                    if ($retf)
                    {   // upload o.k.
                        //UPDATE des Filenamens
                        $sql = "UPDATE Info SET info_file = '" . $infid . "_" . $fname ."' WHERE info_ID=$infid";
                        $reti=$dbc->execute($sql);
                        if (!$reti) 
                            echo $dbc -> error . "<br>\n";
                    }
                   
                }
                else
                {// nur Aenderung Dateiname
                    if ($inf["ifname"]) // Dateiname vergeben
                    {
                        include ("inc/file_upload.inc.php");
                        $fname = gen_filename($inf["ifname"],$ifile_old,$infid,0);
                        $len = strlen($infid)+1;
                        if (substr($fname,0,$len) != "$infid" . "_") $fname = $infid . "_" . $fname;
                        if ($inf["ifname"] != $ifile_old)
                        {
                            $retf  = mod_file("/var/www/fhiiqm/infos",$infid,$fname,"upd");  // Umbenennen alte Datei
                            if ($retf) 
                            {
                                $sql = "UPDATE Info SET info_file = '" . $fname . "' WHERE info_ID=$infid";
                                $reti=$dbc->execute($sql);
                                if (!$reti) 
                                    echo $dbc -> error . "<br>\n";
                                if (substr($fname,0,$len) == "$infid" . "_") $fname = substr($fname,$len,50);
                            }
                            
                        }
                        else
                        {
                            //kein Upload, keine Dateinamenaenderung
                            if (substr($fname,0,$len) == "$infid" . "_") $fname = substr($fname,$len,50);
                            $retf=1; $reti=1;
                        }
                    }
                    else // kein Dateiname angegeben
                    {
                        include ("inc/file_upload.inc.php");
                        $retf=1; $reti=1;
                        if ($ifile_old)
                        {    // Loeschen alte Datei
                            $retf  = mod_file("/var/www/fhiiqm/infos",$infid,"","del");
                            if ($retf) 
                            {
                                $sql = "UPDATE Info SET info_file = null WHERE info_ID=$infid";
                                $reti=$dbc->execute($sql);
                                if (!$reti) 
                                    echo $dbc -> error . "<br>\n";
                            }
                        }    
                    }
                }
            }            
            if ($result && $retf && $reti && $reta && $retp && $retv && $retl) // INSERT/UPDATE Info
            {
                //Eingabe Daten, Upload File erfolgreich 
                    echo "<p class='green'><b>Infodaten zu ID '$infid' wurden erfolgreich gespeichert.</b></p>\n";
                    echo "<br /><br />\n";

                // Anzeigen gespeicherte Infodaten
                if ($fname)
                    $ifile = $infid . "_" . $fname;
                else
                    $ifile = $inf['ifname'];
                include ("inc/info_dat_show.inc.php");
            }            
        }   // INSERT / UPDATE
        echo "</div>";
        echo "<p class='sc'>&nbsp;&nbsp;&nbsp;<a href=\"info_flist.php?$getp\" target=\"_self\" title=\"Infoliste\">Infoliste</a></p>\n"; 
        echo "<p class='sc'>&nbsp;&nbsp;&nbsp;<a href=\"".$_SERVER["PHP_SELF"]."?t=" . $ityp ."\" target=\"_self\" title=\"Info erfassen\">Weitere $titel erfassen</a></p>\n";    
        
    }   // Form o.k. und submit
?>
    
</body>
</html>