From 69fcb0144c008c6a785b05904000890037d0a6b7 Mon Sep 17 00:00:00 2001 From: kindlm Date: Fri, 17 Apr 2015 19:43:06 +0200 Subject: [PATCH] =?UTF-8?q?L=C3=B6schen=20von=20Gebieten=20schreibt=20Log?= =?UTF-8?q?=20und=20Undo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn in der Testtool-Administration die Antworten eines Gebiets eines Kandidaten gelöscht werden, wird ein Log-Eintrag in der DB samt UNDO-Befehl erstellt. --- .../reihungstest_administration.php | 156 +++++++++++++++++- 1 file changed, 150 insertions(+), 6 deletions(-) diff --git a/vilesci/stammdaten/reihungstest_administration.php b/vilesci/stammdaten/reihungstest_administration.php index 173117f84..1be182555 100644 --- a/vilesci/stammdaten/reihungstest_administration.php +++ b/vilesci/stammdaten/reihungstest_administration.php @@ -31,6 +31,7 @@ require_once('../../include/pruefling.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/reihungstest.class.php'); require_once('../../include/studiensemester.class.php'); +require_once('../../include/log.class.php'); // Studiengang lesen $s=new studiengang(); @@ -149,6 +150,7 @@ if(isset($_POST['personzuteilen'])) } //Links echo '
Auswertung | + Fragenadministration | Fragenkatalog

'; //Anzeigen der kommenden Reihungstesttermine: @@ -194,7 +196,7 @@ if(isset($_GET['action']) && $_GET['action']=='showreihungstests') } } -// Antworten eines Gebietes einer Person löschen +// Antworten eines Gebietes einer Person löschen und einen Logfile-Eintrag mit Undo-Befehl erstellen $ps=new prestudent(); $datum=date('Y-m-d'); $ps->getPrestudentRT($datum,true); @@ -266,7 +268,58 @@ if(isset($_POST['deleteteilgebiet'])) $pruefling->getPruefling($_POST['prestudent']); if($pruefling->pruefling_id=='') die('Pruefling wurde nicht gefunden'); - + + //UNDO Befehl zusammenbauen und Log schreiben + $undo=''; + $db->db_query('BEGIN;'); + + $qry = "SELECT * FROM testtool.tbl_pruefling_frage WHERE pruefling_id=".$db->db_add_param($pruefling->pruefling_id, FHC_INTEGER)." AND + frage_id IN (SELECT frage_id FROM testtool.tbl_frage WHERE gebiet_id=".$db->db_add_param($_POST['gebiet'])."); + "; + + if($db->db_query($qry)) + { + while($row = $db->db_fetch_object()) + { + $undo.=" INSERT INTO testtool.tbl_pruefling_frage(prueflingfrage_id,pruefling_id,frage_id,nummer,begintime,endtime) VALUES (". + $db->db_add_param($row->prueflingfrage_id, FHC_INTEGER).', '. + $db->db_add_param($row->pruefling_id, FHC_INTEGER).', '. + $db->db_add_param($row->frage_id, FHC_INTEGER).', '. + $db->db_add_param($row->nummer, FHC_INTEGER).', '. + $db->db_add_param($row->begintime).', '. + $db->db_add_param($row->endtime).');'; + } + } + else + { + $db->errormsg = 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_pruefling_frage'; + $db->db_query('ROLLBACK'); + return false; + } + + $qry = "SELECT * FROM testtool.tbl_antwort + WHERE pruefling_id=".$db->db_add_param($pruefling->pruefling_id)." AND + vorschlag_id IN (SELECT vorschlag_id FROM testtool.tbl_vorschlag WHERE frage_id IN + (SELECT frage_id FROM testtool.tbl_frage WHERE gebiet_id=".$db->db_add_param($_POST['gebiet']).")); + "; + + if($db->db_query($qry)) + { + while($row = $db->db_fetch_object()) + { + $undo.=" INSERT INTO testtool.tbl_antwort(antwort_id,pruefling_id,vorschlag_id) VALUES (". + $db->db_add_param($row->antwort_id, FHC_INTEGER).', '. + $db->db_add_param($row->pruefling_id, FHC_INTEGER).', '. + $db->db_add_param($row->vorschlag_id, FHC_INTEGER).');'; + } + } + else + { + $db->errormsg = 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_antwort'; + $db->db_query('ROLLBACK'); + return false; + } + //Gebiet loeschen $qry = "DELETE FROM testtool.tbl_pruefling_frage where pruefling_id=".$db->db_add_param($pruefling->pruefling_id, FHC_INTEGER)." AND frage_id IN (SELECT frage_id FROM testtool.tbl_frage WHERE gebiet_id=".$db->db_add_param($_POST['gebiet'])."); @@ -274,18 +327,42 @@ if(isset($_POST['deleteteilgebiet'])) WHERE pruefling_id=".$db->db_add_param($pruefling->pruefling_id)." AND vorschlag_id IN (SELECT vorschlag_id FROM testtool.tbl_vorschlag WHERE frage_id IN (SELECT frage_id FROM testtool.tbl_frage WHERE gebiet_id=".$db->db_add_param($_POST['gebiet'])."));"; + if($result = $db->db_query($qry)) { + //Log schreiben + $log = new log(); + + $log->new = true; + $log->sql = $qry; + $log->sqlundo = $undo; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = "Testtool-Antworten-Gebiet ".$_POST['gebiet']." von Prestudent ".$_POST['prestudent']." geloescht"; + + if(!$log->save()) + { + $db->errormsg = 'Fehler beim Schreiben des Log-Eintrages'; + $db->db_query('ROLLBACK'); + return false; + } + + $db->db_query('COMMIT;'); echo ''.$db->db_affected_rows($result).' Antworten wurden gelöscht'; } else - echo 'Fehler beim Löschen der Daten'; + { + $db->errormsg = 'Fehler beim Loeschen der Daten'; + $db->db_query('ROLLBACK'); + } } else echo 'Wählen Sie bitte ein Gebiet, dessen Antworten Sie löschen wollen'; } echo ''; + +// Alle Antworten aller Gebiete einer Person löschen und einen Logfile-Eintrag mit Undo-Befehl erstellen if(isset($_POST['delete_all'])) { if(isset($_POST['prestudent']) && isset($_POST['gebiet']) && @@ -296,16 +373,83 @@ if(isset($_POST['delete_all'])) if($pruefling->pruefling_id=='') die('Pruefling wurde nicht gefunden'); + //UNDO Befehl zusammenbauen und Log schreiben + $undo=''; + $db->db_query('BEGIN;'); + + $qry = "SELECT * FROM testtool.tbl_pruefling_frage where pruefling_id=".$db->db_add_param($pruefling->pruefling_id)."; + "; + + if($db->db_query($qry)) + { + while($row = $db->db_fetch_object()) + { + $undo.=" INSERT INTO testtool.tbl_pruefling_frage(prueflingfrage_id,pruefling_id,frage_id,nummer,begintime,endtime) VALUES (". + $db->db_add_param($row->prueflingfrage_id, FHC_INTEGER).', '. + $db->db_add_param($row->pruefling_id, FHC_INTEGER).', '. + $db->db_add_param($row->frage_id, FHC_INTEGER).', '. + $db->db_add_param($row->nummer, FHC_INTEGER).', '. + $db->db_add_param($row->begintime).', '. + $db->db_add_param($row->endtime).');'; + } + } + else + { + $db->errormsg = 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_pruefling_frage'; + $db->db_query('ROLLBACK'); + return false; + } + + $qry = "SELECT * FROM testtool.tbl_antwort WHERE pruefling_id=".$db->db_add_param($pruefling->pruefling_id)."; + "; + + if($db->db_query($qry)) + { + while($row = $db->db_fetch_object()) + { + $undo.=" INSERT INTO testtool.tbl_antwort(antwort_id,pruefling_id,vorschlag_id) VALUES (". + $db->db_add_param($row->antwort_id, FHC_INTEGER).', '. + $db->db_add_param($row->pruefling_id, FHC_INTEGER).', '. + $db->db_add_param($row->vorschlag_id, FHC_INTEGER).');'; + } + } + else + { + $db->errormsg = 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_antwort'; + $db->db_query('ROLLBACK'); + return false; + } + //Gebiet loeschen $qry = "DELETE FROM testtool.tbl_pruefling_frage where pruefling_id=".$db->db_add_param($pruefling->pruefling_id)."; DELETE FROM testtool.tbl_antwort WHERE pruefling_id=".$db->db_add_param($pruefling->pruefling_id).";"; - - + if($result = $db->db_query($qry)) { + //Log schreiben + $log = new log(); + + $log->new = true; + $log->sql = $qry; + $log->sqlundo = $undo; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = "Testtool-Antworten aller Gebiete von Prestudent ".$_POST['prestudent']." geloescht"; + + if(!$log->save()) + { + $db->errormsg = 'Fehler beim Schreiben des Log-Eintrages'; + $db->db_query('ROLLBACK'); + return false; + } + + $db->db_query('COMMIT;'); echo ' Alle '.$db->db_affected_rows($result).' Antworten wurden gelöscht'; } else - echo 'Fehler beim Löschen der Daten'; + { + $db->errormsg = 'Fehler beim Loeschen der Daten'; + $db->db_query('ROLLBACK'); + } } else echo 'Um alle Antworten eines Prüflings zu löschen, wählen Sie im DropDown bitte "Alle Gebiete" aus';