, * Andreas Oesterreicher , * Rudolf Hangl and * Gerald Simane-Sequens */ /** * Formular zum Beantworten der Fragen */ header("Content-type: application/xhtml+xml"); require_once('../../config/cis.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/frage.class.php'); require_once('../../include/vorschlag.class.php'); require_once('../../include/antwort.class.php'); require_once('../../include/gebiet.class.php'); if (!$db = new basis_db()) die('Fehler beim Oeffnen der Datenbankverbindung'); $PHP_SELF=$_SERVER["PHP_SELF"]; session_start(); if(isset($_GET['gebiet_id'])) $gebiet_id = $_GET['gebiet_id']; else die('Gebiet muss uebergeben werden'); if(isset($_GET['frage_id'])) $frage_id = $_GET['frage_id']; else $frage_id = ''; //$MAX_VORSCHLAEGE_PRO_ZEILE=4; ?> level_start!='') $levelgebiet=true; else $levelgebiet=false; list($stunde, $minute, $sekunde) = explode(':',$gebiet->zeit); //Start des Pruefungsvorganges if(isset($_GET['start'])) { //Fragenpool generieren $frage = new frage(); if(!$frage->generateFragenpool($_SESSION['pruefling_id'], $gebiet_id)) die('Fehler beim Generieren des Fragenpools:'.$frage->errormsg); //Erste Frage des Pools holen if(!$frage_id = $frage->getNextFrage($gebiet_id, $_SESSION['pruefling_id'])) die('Es wurde keine Frage gefunden'); //Beginnzeit Speichern $prueflingfrage = new frage(); if(!$prueflingfrage->getPrueflingfrage($_SESSION['pruefling_id'], $frage_id)) die('Fehler:'.$prueflingfrage->errormsg); $prueflingfrage->begintime = date('Y-m-d H:i:s'); if(!$prueflingfrage->save_prueflingfrage(false)) die('Fehler beim Startvorgang'); echo ''; } //Speichern einer Antwort if(isset($_POST['submitantwort']) && isset($_GET['frage_id'])) { // vor dem Speichern der Antworten, alle Antworten zu der Frage loeschen // und die Antworten neu anlegen // Unterscheidung ob mehrere oder nur eine Antwort uebergeben wird $error=false; $db->db_query('BEGIN;'); // alle vorhandenen Antworten zu dieser Frage loeschen $qry = "DELETE FROM testtool.tbl_antwort WHERE antwort_id in( SELECT antwort_id FROM testtool.tbl_antwort JOIN testtool.tbl_vorschlag USING(vorschlag_id) WHERE frage_id='".addslashes($_GET['frage_id'])."' AND pruefling_id='".addslashes($_SESSION['pruefling_id'])."')"; $db->db_query($qry); // Antwort nur Speichern wenn eine Antwort gewaehlt wurde if(isset($_POST['vorschlag_id']) && $_POST['vorschlag_id']!='') { $vorschlaege = array(); //Falls nur eine einzelne Antwort kommt, diese auch in ein Array packen if(!is_array($_POST['vorschlag_id'])) $vorschlaege[0]=$_POST['vorschlag_id']; else $vorschlaege = $_POST['vorschlag_id']; //alle Antworten Speichern foreach ($vorschlaege as $vorschlag_id) { if($vorschlag_id!='') { $antwort = new antwort(); $antwort->new = true; $antwort->vorschlag_id = $vorschlag_id; $antwort->pruefling_id = $_SESSION['pruefling_id']; if(!$antwort->save()) { $errormsg = $antwort->errormsg; $error=true; } } } if(!$error) { //Endzeit der Frage eintragen $prueflingfrage = new frage(); if(!$prueflingfrage->getPrueflingfrage($_SESSION['pruefling_id'], $frage_id)) { $errormsg = $antwort->errormsg; $error = true; } $prueflingfrage->endtime = date('Y-m-d H:i:s'); if(!$prueflingfrage->save_prueflingfrage(false)) { $errormsg = $prueflingfrage->errormsg; $error = true; } } } if($error) { $db->db_query('ROLLBACK;'); die('Fehler:'.$errormsg); } else { $db->db_query('COMMIT;'); } $frage = new frage(); if($levelgebiet) { //bei gelevelten Fragen die naechste Frage holen $frage->generateFragenpool($_SESSION['pruefling_id'], $gebiet_id); } $frage_id = $frage->getNextFrage($gebiet_id, $_SESSION['pruefling_id'], $frage_id); } //Schauen ob dieses Gebiet schon gestartet wurde $qry = "SELECT begintime FROM testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id) WHERE pruefling_id='".addslashes($_SESSION['pruefling_id'])."' AND gebiet_id='".addslashes($gebiet_id)."' ORDER BY begintime ASC LIMIT 1"; if($result = $db->db_query($qry)) { if($row = $db->db_fetch_object($result)) { if($row->begintime!='') { //Hat bereits Fragen beantwortet -> Frage anzeigen $demo=false; } else { //Demo anzeigen $demo=true; } } else $demo=true; } else die('error'); $info=''; //Name und Studiengang anzeigen $qry_pruefling = "SELECT vorname, nachname, stg_bez FROM testtool.vw_pruefling WHERE pruefling_id='".addslashes($_SESSION['pruefling_id'])."'"; if($result_pruefling = $db->db_query($qry_pruefling)) { if($row_pruefling = $db->db_fetch_object($result_pruefling)) { $info = "$row_pruefling->vorname $row_pruefling->nachname, $row_pruefling->stg_bez"; } } $fortschrittsbalken=''; if($levelgebiet) { $max = $gebiet->maxfragen; $aktuell=0; $qry = "SELECT count(*) as anzahl FROM testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id) WHERE pruefling_id='".addslashes($_SESSION['pruefling_id'])."' AND gebiet_id='$gebiet_id'"; if($result_aktuell = $db->db_query($qry)) { if($row_aktuell = $db->db_fetch_object($result_aktuell)) { $aktuell = $row_aktuell->anzahl; } } $psolved = $aktuell/$max*100; //$fortschrittsbalken .= "$aktuell / $max"; $fortschrittsbalken .= '
'; $fortschrittsbalken .= ' '.$aktuell.' / '.$max.' ['.number_format($psolved,1,'.','').'%]'; } //Zeit des Gebietes holen echo '
'.$info.''.$fortschrittsbalken.'
'; if($demo) { //Wenn es sich um ein Demobeispiel handelt, dann wird die Maximale Gesamtzeit angezeigt echo " "; echo $minute.':'.$sekunde.' Minuten '; } else { //Wenn es sich um eine Testfrage handelt, dann wird die verbleibende Zeit angezeigt $qry = "SELECT '$gebiet->zeit'-(now()-min(begintime)) as time FROM testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id) WHERE gebiet_id='".addslashes($gebiet_id)."' AND pruefling_id='".addslashes($_SESSION['pruefling_id'])."'"; $result = $db->db_query($qry); $row = $db->db_fetch_object($result); //Zeit in Sekunden umrechnen list($stunde, $minute, $sekunde) = explode(':',$row->time); $zeit = (int) ($stunde*60*60+$minute*60+$sekunde); //Wenn die Zeit negativ ist und die Stunde 0 ist, //dann muss die Zeit mit -1 multipliziert werden if(substr($stunde,0,1)=='-' && $stunde==0) { $zeit = $zeit*-1; } echo ' Minuten'; echo ""; if($zeit<0) die('
Die Zeit ist abgelaufen!
Bitte aktivieren Sie Javascript in Ihrem Browser!
'); } echo ''; echo ''; //Laden der Frage $frage = new frage(); if($frage_id!='') //Frage wurde uebergeben { $frage->load($frage_id); } else { if($levelgebiet) { // wenn keine Frage uebergeben wurde und die maximale Fragenanzahl erreicht wurde // dann ist das Gebiet fertig $qry = "SELECT count(*) as anzahl FROM testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id) WHERE gebiet_id='".addslashes($gebiet_id)."' AND pruefling_id='".addslashes($_SESSION['pruefling_id'])."'"; $result = $db->db_query($qry); $row = $db->db_fetch_object($result); if($row->anzahl>=$gebiet->maxfragen) { die(""); } } $frage_id = $frage->getNextFrage($gebiet_id, $_SESSION['pruefling_id'], null, $demo); $frage->load($frage_id); } //Anzeigen der Frage if($frage->frage_id!='') { $frage_id = $frage->frage_id; $frage->getFrageSprache($frage_id, $_SESSION['sprache']); if(!$demo) { //Nachschauen ob diese Frage bereits angesehen wurde $antwort = new antwort(); $antwort->getAntwort($_SESSION['pruefling_id'],$frage_id); if(count($antwort->result)==0) { //wenn diese noch nicht angesehen wurde, dann wird die begintime gesetzt $prueflingfrage = new frage(); if(!$prueflingfrage->getPrueflingfrage($_SESSION['pruefling_id'], $frage_id)) die('Diese Frage ist nicht fuer Sie bestimmt'); if($prueflingfrage->begintime=='') { $prueflingfrage->begintime = date('Y-m-d H:i:s'); $prueflingfrage->new = false; if(!$prueflingfrage->save_prueflingfrage()) echo 'Fehler beim Speichern der Erstansicht'; } } } echo '

'; //Bild und Text der Frage anzeigen if($frage->bild!='') echo "

\n"; //Sound einbinden if($frage->audio!='') { //echo '
'; echo ' '; } echo "$frage->text

\n"; //Vorschlaege laden $vs = new vorschlag(); $vs->getVorschlag($frage->frage_id, $_SESSION['sprache'], $gebiet->zufallvorschlag); echo "
frage_id\" method=\"POST\">"; echo ''; echo ''; $anzahl = 1; //Antworten laden falls bereits vorhanden $antwort = new antwort(); $antwort->getAntwort($_SESSION['pruefling_id'],$frage->frage_id); //Vorschlaege anzeigen foreach ($vs->result as $vorschlag) { echo "\n"; $anzahl++; if($anzahl>$gebiet->antwortenprozeile) { echo ''; $anzahl=1; } } //wenn singleresponse und keine Levels und vorschlaege vorhanden sind, dann gibt es auch die //moeglichkeit fuer keine Antwort if(!$gebiet->multipleresponse && !$levelgebiet && count($vs->result)>0) { echo "'; } echo '
"; //Bei multipleresponse checkboxen anzeigen ansonsten radiobuttons if($gebiet->multipleresponse) $type='checkbox'; else $type='radio'; //Antworten markieren wenn die Frage bereits beantwortet wurde $checked=false; reset($antwort->result); foreach ($antwort->result as $answer) { if($vorschlag->vorschlag_id==$answer->vorschlag_id) { $checked='checked="checked"'; } } echo ''; echo '
'; if($vorschlag->bild!='') echo "
"; if($vorschlag->audio!='') { //echo '
'; echo ' '; } if($vorschlag->text!='') echo $vorschlag->text.'
'; echo "
"; echo '
CLEAR
'; if(!$demo) { echo ""; } echo "
"; echo '


'; //Fusszeile mit Weiter Button und Sprung direkt zu einer Frage if(!$demo && !$levelgebiet) { $qry = "SELECT tbl_pruefling_frage.nummer, tbl_pruefling_frage.frage_id FROM testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id) WHERE gebiet_id='".addslashes($gebiet_id)."' AND pruefling_id='".addslashes($_SESSION['pruefling_id'])."' AND demo=false ORDER BY nummer"; //Nummern der Fragen Anzeigen $result = $db->db_query($qry); while($row = $db->db_fetch_object($result)) { if($row->frage_id==$frage_id) echo " $row->nummer -"; else echo " $row->nummer -"; } } //Weiter Button nur bei nicht gelevelten Gebieten anzeigen if(!$levelgebiet) { //Naechste Frage holen und Weiter-Button anzeigen $frage = new frage(); $nextfrage = $frage->getNextFrage($gebiet_id, $_SESSION['pruefling_id'], $frage_id, $demo); if($nextfrage) { if($demo) $value="Demo"; else $value="Weiter"; echo " $value >>"; } else { if($demo) { $qry = "SELECT count(*) as anzahl FROM testtool.tbl_frage WHERE tbl_frage.gebiet_id='".addslashes($gebiet_id)."' AND demo "; if($row = $db->db_fetch_object($db->db_query($qry))) { if($row->anzahl>1) { //Bei Demos den Weiter-Button nur anzeigen, wenn ausser der Startseite noch andere Demoseiten vorhanden sind echo " Startseite >>"; } } } else { //Wenns der letzte Eintrag ist, wieder zum ersten springen echo " Weiter >>"; } } } else { //Naechste Frage holen und Weiter-Button anzeigen $frage = new frage(); $nextfrage = $frage->getNextFrage($gebiet_id, $_SESSION['pruefling_id'], $frage_id, $demo); if($nextfrage) { if($demo) $value="Demo"; else $value="Weiter"; echo " $value >>"; } else { if($demo) { //Naechste Frage holen und Weiter-Button anzeigen //$frage = new frage(); //$nextfrage = $frage->getNextFrage($gebiet_id, $_SESSION['pruefling_id'], $frage_id, $demo); $qry = "SELECT count(*) as anzahl FROM testtool.tbl_frage WHERE tbl_frage.gebiet_id='".addslashes($gebiet_id)."' AND demo "; if($row = $db->db_fetch_object($db->db_query($qry))) { if($row->anzahl>1) { //Bei Demos den Weiter-Button nur anzeigen, wenn ausser der Startseite noch andere Demoseiten vorhanden sind echo " Startseite >>"; } } } } } echo '
'; } else { //Wenn kein Demo vorhanden ist echo "


Start druecken um zu beginnen
"; } /* //Test mit Button unten echo '


'; echo '
'; if($demo) { //Wenn es sich um ein Demobeispiel handelt, dann wird die Maximale Gesamtzeit angezeigt echo $minute.':'.$sekunde.' Minuten '; echo '

'; echo ""; } else { //Wenn es sich um eine Testfrage handelt, dann wird die verbleibende Zeit angezeigt $qry = "SELECT '$gebiet->zeit'-(now()-min(begintime)) as time FROM testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id) WHERE gebiet_id='".addslashes($gebiet_id)."' AND pruefling_id='".addslashes($_SESSION['pruefling_id'])."'"; $result = $db->db_query($qry); $row = $db->db_fetch_object($result); //Zeit in Sekunden umrechnen list($stunde, $minute, $sekunde) = split(':',$row->time); $zeit = (int) ($stunde*60*60+$minute*60+$sekunde); //Wenn die Zeit negativ ist und die Stunde 0 ist, //dann muss die Zeit mit -1 multipliziert werden if(substr($stunde,0,1)=='-' && $stunde==0) { $zeit = $zeit*-1; } echo ' Minuten'; echo ""; } echo '
'; */ ?>