, * Andreas Oesterreicher , * Rudolf Hangl , * Gerald Simane-Sequens , * Manfred Kindl */ /** * Formular zum Beantworten der Fragen */ header("Content-type: application/xhtml+xml"); require_once('../../config/cis.config.inc.php'); require_once('../../config/global.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'); require_once('../../include/sprache.class.php'); require_once '../../include/phrasen.class.php'; require_once '../../include/reihungstest.class.php'; require_once '../../include/pruefling.class.php'; if (!$db = new basis_db()) die('Fehler beim Oeffnen der Datenbankverbindung'); $PHP_SELF=$_SERVER["PHP_SELF"]; // Start session session_start(); // If language is changed by language select menu, reset language variables if (isset($_GET['sprache_user']) && !empty($_GET['sprache_user'])) { $_SESSION['sprache_user'] = $_GET['sprache_user']; $sprache_user = $_GET['sprache_user']; } // Set language variable, which impacts the question language $sprache_user = (isset($_SESSION['sprache_user']) && !empty($_SESSION['sprache_user'])) ? $_SESSION['sprache_user'] : DEFAULT_LANGUAGE; $p = new phrasen($sprache_user); 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; echo ' '; ?> t('testtool/bitteZuerstAnmelden')); $pruefling = new pruefling(); $pruefling->load($_SESSION['pruefling_id']); if ($pruefling->gesperrt === 't') die(""); $gebiet = new gebiet($gebiet_id); if($gebiet->level_start!='') $levelgebiet=true; else $levelgebiet=false; list($stunde, $minute, $sekunde) = explode(':',$gebiet->zeit); $gestartet = $gebiet->isGestartet($gebiet_id, $_SESSION['pruefling_id'], null); if(!$gestartet && $gebiet->errormsg!='') { die($gebiet->errormsg.''); } //Start des Pruefungsvorganges if(isset($_GET['start']) && !$gestartet) { //Wenn der Reihungstest nicht freigeschaltet ist, kann das Gebiet nicht gestartet werden if (isset($_SESSION['reihungstestID']) && $_SESSION['reihungstestID'] != '') { $rt = new reihungstest($_SESSION['reihungstestID']); if ($rt->freigeschaltet == false) { echo '
Die Gesamtbearbeitungszeit des Reihungstests ist vorbei und der Test wurde gesperrt.
'; die(); } } //Fragenpool generieren $frage = new frage(); if(!$frage->generateFragenpool($_SESSION['pruefling_id'], $gebiet_id)) die($p->t('testtool/fehlerBeimGenerierenDesFragenpools').':'.$frage->errormsg); //Erste Frage des Pools holen if(!$frage_id = $frage->getNextFrage($gebiet_id, $_SESSION['pruefling_id'])) die($p->t('testtool/esWurdeKeineFrageGefunden')); //Beginnzeit Speichern $prueflingfrage = new frage(); if(!$prueflingfrage->getPrueflingfrage($_SESSION['pruefling_id'], $frage_id)) die($p->t('testtool/fehler').':'.$prueflingfrage->errormsg); $prueflingfrage->begintime = date('Y-m-d H:i:s'); if(!$prueflingfrage->save_prueflingfrage(false)) die($p->t('testtool/fehlerBeimStartvorgang')); 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 if($levelgebiet && !isset($_POST['vorschlag_id'])) { echo ''.$p->t('testtool/beiDiesemGebietMuessenSieJedeFrageBeantworten').''; } else { $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=".$db->db_add_param($_GET['frage_id'])." AND pruefling_id=".$db->db_add_param($_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($p->t('testtool/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=".$db->db_add_param($_SESSION['pruefling_id'], FHC_INTEGER)." AND gebiet_id=".$db->db_add_param($gebiet_id, FHC_INTEGER)." 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, tbl_studiengangstyp.bezeichnung FROM testtool.vw_pruefling JOIN public.tbl_studiengang USING (studiengang_kz) JOIN public.tbl_studiengangstyp USING (typ) WHERE pruefling_id=".$db->db_add_param($_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"; } } $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=".$db->db_add_param($_SESSION['pruefling_id'], FHC_INTEGER)." AND gebiet_id=".$db->db_add_param($gebiet_id, FHC_INTEGER); 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 '
TeilnehmerIn: '.$info.'
'.$fortschrittsbalken.'
'; if($demo) { //Wenn es sich um ein Demobeispiel handelt, dann wird die Maximale Gesamtzeit angezeigt echo $p->t('testtool/bearbeitungszeit').': '.$stunde.'h '.$minute.'m '.$sekunde.'s'; echo '
'; echo " t("testtool/gebietStarten")."\" onclick=\"GebietStarten('".$db->convert_html_chars($gebiet->bezeichnung)."','".$stunde."','".$minute."','".$sekunde."','".$gebiet_id."')\" /> "; } 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=".$db->db_add_param($gebiet_id, FHC_INTEGER)." AND pruefling_id=".$db->db_add_param($_SESSION['pruefling_id'], FHC_INTEGER); $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 $p->t('testtool/bearbeitungszeit').': '; echo ""; if($zeit<0) die('
'.$p->t('testtool/dieZeitIstAbgelaufen').'
'); } 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=".$db->db_add_param($gebiet_id, FHC_INTEGER)." AND pruefling_id=".$db->db_add_param($_SESSION['pruefling_id'], FHC_INTEGER)." AND tbl_pruefling_frage.endtime is not null"; $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, $levelgebiet); $frage->load($frage_id); } //Anzeigen der Frage if($frage->frage_id!='') { $frage_id = $frage->frage_id; $frage->bild = ''; $frage->audio = ''; $frage->text = ''; $frage->getFrageSprache($frage_id, $_SESSION['sprache_user']); $fallbacksprache = $_SESSION['sprache_user']; // Fallback auf DEFAULT_LANGUAGE wenn keine Frage in der $_SESSION['sprache_user'] vorhanden ist if ($frage->text == '' && $frage->bild == '' && $frage->audio == '') { $frage->getFrageSprache($frage_id, DEFAULT_LANGUAGE); $fallbacksprache = DEFAULT_LANGUAGE; } 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($p->t('testtool/dieseFrageIstNichtFuerSieBestimmt')); if($prueflingfrage->begintime=='') { $prueflingfrage->begintime = date('Y-m-d H:i:s'); $prueflingfrage->new = false; if(!$prueflingfrage->save_prueflingfrage()) echo $p->t('testtool/fehlerBeimSpeichernDerErstansicht'); } } } //Kopfzeile 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=".$db->db_add_param($gebiet_id, FHC_INTEGER)." AND pruefling_id=".$db->db_add_param($_SESSION['pruefling_id'], FHC_INTEGER)." AND demo=false ORDER BY nummer"; echo " "; //Nummern der Fragen Anzeigen $result = $db->db_query($qry); while($row = $db->db_fetch_object($result)) { $antwort = new antwort(); $antwort->getAntwort($_SESSION['pruefling_id'],$row->frage_id); if($row->frage_id==$frage_id) echo ""; else echo " "; } //echo "
".($row->nummer<10?" ":"")."$row->nummer$row->nummer
"; } //Weiter Button nur bei nicht gelevelten Gebieten anzeigen if(!$levelgebiet) { //Naechste Frage holen und Weiter-Button anzeigen $frage2 = new frage(); $nextfrage = $frage2->getNextFrage($gebiet_id, $_SESSION['pruefling_id'], $frage_id, $demo); if($nextfrage) { if($demo) $value=''; else $value=$p->t('testtool/blaettern').' >>'; echo " $value"; } else { if(!$demo) { //Wenns der letzte Eintrag ist, wieder zum ersten springen echo " ".$p->t('testtool/blaettern')." >>"; } } } if(!$demo && !$levelgebiet) echo " "; echo '
'; //Bild und Text der Frage anzeigen if($frage->bild!='') { echo '



'; } $timestamp = time(); //Sound einbinden if($frage->audio!='') { echo '
'; } $display_well = $frage->nummer == 0 ? '' : 'well'; // don't style frage 0 because this is always the introduction to gebiet echo '
'. $frage->text. '
'; //Vorschlaege laden $vs = new vorschlag(); $vs->getVorschlag($frage->frage_id, $_SESSION['sprache_user'], $gebiet->zufallvorschlag); // Fallback auf DEFAULT_LANGUAGE wenn kein Vorschlag in der $_SESSION['sprache_user'] vorhanden ist if (isset($vs->result[0]) && $vs->result[0]->text == '' && $vs->result[0]->bild == '' && $vs->result[0]->audio == '') { $vs = new vorschlag(); $vs->getVorschlag($frage->frage_id, DEFAULT_LANGUAGE, $gebiet->zufallvorschlag); } $letzte = $frage->getNextFrage($gebiet_id, $_SESSION['pruefling_id'], $frage_id, $demo); echo "
frage_id\" method=\"POST\" ".(!$letzte && !$levelgebiet?"onsubmit=\"letzteFrage()\"":"").">"; echo '
'; $anzahl = 1; $beantwortet = false; $cnt = 0; // counter für foreach-Schleife $len = count($vs->result); //Antworten laden falls bereits vorhanden $antwort = new antwort(); $antwort->getAntwort($_SESSION['pruefling_id'],$frage->frage_id); //Vorschlaege anzeigen foreach ($vs->result as $vorschlag) { echo ""; $anzahl++; if($anzahl>$gebiet->antwortenprozeile && ($cnt < $len-1)) { echo ''; $anzahl=1; } $cnt++; } //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"'; $beantwortet = true; } } echo ''; echo '
'; if($vorschlag->bild!='') echo "
"; if($vorschlag->audio!='') { echo ' '; } if($vorschlag->text!='') echo $vorschlag->text.'
'; echo "
"; echo '
'.$p->t('testtool/keineAntwort').'
'; if(!$demo) { echo ''; } else { $frage2 = new frage(); $nextfrage = $frage2->getNextFrage($gebiet_id, $_SESSION['pruefling_id'], $frage_id, $demo); if($nextfrage) { echo " ".$p->t("testtool/demo").""; } else { //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=".$db->db_add_param($gebiet_id, FHC_INTEGER)." 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 " ".$p->t("testtool/zurueckZurStartseite").""; } } } } echo '
'; echo "
"; echo '
'; echo '




'; } else { //Wenn kein Demo vorhanden ist echo "

".$p->t("testtool/startDrueckenUmZuBeginnen")."
"; } ?>