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';