Neues Testtool - Run Script system/testtool_aktualisierung.php

This commit is contained in:
Andreas Österreicher
2009-03-05 12:21:49 +00:00
parent 454e9b5012
commit 4b1b014c2e
46 changed files with 7848 additions and 5461 deletions
+54 -32
View File
@@ -24,11 +24,8 @@ class antwort
{
//Tabellenspalten
var $antwort_id;
var $frage_id;
var $antwort;
var $begintime;
var $endtime;
var $pruefling_id;
var $vorschlag_id;
// ErgebnisArray
var $result=array();
@@ -75,11 +72,8 @@ class antwort
if($row = pg_fetch_object($result))
{
$this->antwort_id = $row->antwort_id;
$this->frage_id = $row->frage_id;
$this->antwort = $row->antwort;
$this->begintime = $row->begintime;
$this->endtime = $row->endtime;
$this->pruefling_id = $row->pruefling_id;
$this->vorschlag_id = $row->vorschlag_id;
return true;
}
else
@@ -90,7 +84,7 @@ class antwort
}
else
{
$this->errormsg = "Fehler beim laden: $qry";
$this->errormsg = "Fehler beim Laden der Antwort";
return false;
}
}
@@ -130,19 +124,16 @@ class antwort
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
{
$qry = 'INSERT INTO testtool.tbl_antwort (frage_id, antwort, begintime, endtime, pruefling_id) VALUES('.
"'".addslashes($this->frage_id)."',".
$this->addslashes($this->antwort).",".
$this->addslashes($this->begintime).",".
$this->addslashes($this->endtime).",".
$this->addslashes($this->pruefling_id).");";
$qry = 'INSERT INTO testtool.tbl_antwort (pruefling_id, vorschlag_id) VALUES('.
$this->addslashes($this->pruefling_id).",".
$this->addslashes($this->vorschlag_id).");";
}
else
{
$qry = 'UPDATE testtool.tbl_antwort SET'.
' antwort='.$this->addslashes($this->antwort).','.
" endtime='".$this->endtime."'".
" WHERE frage_id='".addslashes($this->frage_id)."' AND pruefling_id='".addslashes($this->pruefling_id)."'";
' vorschlag_id='.$this->addslashes($this->vorschlag_id).','.
" pruefling_id='".$this->pruefling_id."'".
" WHERE antwort_id='".addslashes($this->antwort_id)."'";
}
if(pg_query($this->conn,$qry))
@@ -157,26 +148,57 @@ class antwort
}
}
/**
* Loescht einen Eintrag aus der Tabelle tbl_antwort
*
* @param $antwort_id
* @return true wenn ok, false im Fehlerfall
*/
public function delete($antwort_id)
{
if(!is_numeric($antwort_id) || $antwort_id=='')
{
$this->errormsg = 'Antwort_id ist ungueltig';
return false;
}
$qry = "DELETE FROM testtool.tbl_antwort WHERE antwort_id='".addslashes($antwort_id)."'";
if(pg_query($this->conn, $qry))
{
return true;
}
else
{
$this->errormsg = 'Fehler beim Löschen der Antwort';
return false;
}
}
function getAntwort($pruefling_id, $frage_id)
{
$qry = "SELECT * FROM testtool.tbl_antwort WHERE pruefling_id='".addslashes($pruefling_id)."' AND frage_id='".addslashes($frage_id)."'";
$qry = "SELECT * FROM testtool.tbl_antwort JOIN testtool.tbl_pruefling_frage USING(pruefling_id)
JOIN testtool.tbl_vorschlag USING(vorschlag_id)
WHERE
tbl_vorschlag.frage_id=tbl_pruefling_frage.frage_id AND
pruefling_id='".addslashes($pruefling_id)."' AND
tbl_vorschlag.frage_id='".addslashes($frage_id)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
while($row = pg_fetch_object($result))
{
$this->antwort_id = $row->antwort_id;
$this->frage_id = $row->frage_id;
$this->antwort = $row->antwort;
$this->begintime = $row->begintime;
$this->endtime = $row->endtime;
$this->pruefling_id = $row->pruefling_id;
return true;
$obj = new antwort($this->conn, null, null);
$obj->antwort_id = $row->antwort_id;
$obj->frage_id = $row->frage_id;
$obj->vorschlag_id = $row->vorschlag_id;
$obj->begintime = $row->begintime;
$obj->endtime = $row->endtime;
$obj->pruefling_id = $row->pruefling_id;
$this->result[] = $obj;
}
else
{
$this->errormsg = 'Antwort wurde nicht gefunden';
return false;
}
return true;
}
else
{
+595 -58
View File
@@ -16,22 +16,40 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <[email protected]>,
* Andreas Oesterreicher <[email protected]> and
* Rudolf Hangl <[email protected]>.
* Andreas Oesterreicher <[email protected]>,
* Rudolf Hangl <[email protected]> and
* Gerald Simane-Sequens <[email protected]>
*/
/**
* Klasse fuer die Fragen des Reihungstesttools
*/
require_once(dirname(__FILE__).'/gebiet.class.php');
require_once(dirname(__FILE__).'/pruefling.class.php');
class frage
{
//Tabellenspalten
var $frage_id;
var $gebiet_id;
var $gruppe_kurzbz;
var $loesung;
var $nummer;
var $demo;
var $level;
var $kategorie_kurzbz;
var $sprache;
var $audio;
var $text;
var $bild;
var $pruefling_id;
var $prueflingfrage_id;
var $begintime;
var $endtime;
var $insertamum;
var $updateamum;
var $insertvon;
var $updatevon;
// ErgebnisArray
var $result=array();
var $num_rows=0;
@@ -45,7 +63,7 @@ class frage
// * $unicode Gibt an ob die Daten mit UNICODE Codierung
// * oder LATIN9 Codierung verarbeitet werden sollen
// *************************************************************************
function frage($conn, $frage_id=null, $unicode=false)
public function frage($conn, $frage_id=null, $unicode=false)
{
$this->conn = $conn;
@@ -68,8 +86,14 @@ class frage
// * Laedt Frage mit der uebergebenen ID
// * @param $frage_id ID der Frage die geladen werden soll
// ***********************************************************
function load($frage_id)
{
public function load($frage_id)
{
if(!is_numeric($frage_id) || $frage_id=='')
{
$this->errormsg = 'Frage_id ist ungueltig';
return false;
}
$qry = "SELECT * FROM testtool.tbl_frage WHERE frage_id='".addslashes($frage_id)."'";
if($result = pg_query($this->conn, $qry))
@@ -78,12 +102,15 @@ class frage
{
$this->frage_id = $row->frage_id;
$this->gebiet_id = $row->gebiet_id;
$this->gruppe_kurzbz = $row->gruppe_kurzbz;
$this->loesung = $row->loesung;
$this->nummer = $row->nummer;
$this->demo = ($row->demo=='t'?true:false);
$this->text = $row->text;
$this->bild = $row->bild;
$this->kategorie_kurzbz = $row->kategorie_kurzbz;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->level = $row->level;
return true;
}
else
@@ -94,7 +121,7 @@ class frage
}
else
{
$this->errormsg = "Fehler beim laden: $qry";
$this->errormsg = "Fehler beim Laden: $qry";
return false;
}
}
@@ -105,7 +132,7 @@ class frage
// * Zeichen mit Backslash versehen und das Ergbnis
// * unter Hochkomma gesetzt.
// ************************************************
function addslashes($var)
private function addslashes($var)
{
return ($var!=''?"'".addslashes($var)."'":'null');
}
@@ -115,7 +142,7 @@ class frage
// * auf Gueltigkeit.
// * @return true wenn ok, false im Fehlerfall
// *******************************************
function validate()
private function validate()
{
return true;
}
@@ -126,7 +153,7 @@ class frage
// * ansonsten der Datensatz mit $uid upgedated
// * @return true wenn erfolgreich, false im Fehlerfall
// ******************************************************************
function save()
public function save()
{
//Variablen auf Gueltigkeit pruefen
if(!$this->validate())
@@ -134,31 +161,101 @@ class frage
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
{
$qry = 'INSERT INTO testtool.tbl_frage (frage_id, gebiet_id, gruppe_kurzbz, loesung, nummer, demo, text, bild) VALUES('.
"'".addslashes($this->frage_id)."',".
$this->addslashes($this->gebiet_id).",'".
$this->addslashes($this->gruppe_kurzbz).",'".
$this->addslashes($this->loesung).",".
$this->addslashes($this->nummer).",".
($this->demo?'true':'false').",'".
$this->text."',".
$this->addslashes($this->bild).");";
$qry = 'BEGIN;INSERT INTO testtool.tbl_frage (kategorie_kurzbz, gebiet_id, level, nummer, demo,
insertamum, insertvon, updateamum, updatevon) VALUES('.
$this->addslashes($this->kategorie_kurzbz).','.
$this->addslashes($this->gebiet_id).','.
$this->addslashes($this->level).','.
$this->addslashes($this->nummer).','.
($this->demo?'true':'false').','.
$this->addslashes($this->insertamum).','.
$this->addslashes($this->insertvon).','.
'null,null);';
}
else
{
$qry = 'UPDATE testtool.tbl_frage SET'.
' frage_id='.$this->addslashes($this->frage_id).','.
' gebiet_id='.$this->addslashes($this->gebiet_id).','.
" gruppe_kurzbz='".$this->gruppe_kurzbz."',".
' loesung='.$this->addslashes($this->loesung).','.
' kategorie_kurzbz='.$this->addslashes($this->kategorie_kurzbz).','.
' level='.$this->addslashes($this->level).','.
' nummer='.$this->addslashes($this->nummer).','.
' demo='.($this->demo?'true':'false').','.
" text='".$this->text."',".
' bild='.$this->addslashes($this->bild).
' updateamum='.$this->addslashes($this->updateamum).','.
' updatevon='.$this->addslashes($this->updatevon).
" WHERE frage_id='".addslashes($this->frage_id)."';";
}
//echo $qry;
if(pg_query($this->conn,$qry))
{
if($this->new)
{
$qry = "SELECT currval('testtool.tbl_frage_frage_id_seq') as id";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$this->frage_id = $row->id;
pg_query($this->conn,'COMMIT');
return true;
}
else
{
$this->errormsg = 'Fehler beim Lesen der Sequence';
pg_query($this->conn, 'ROLLBACK');
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Lesen der Sequence';
pg_query($this->conn, 'ROLLBACK');
return false;
}
}
else
{
return true;
}
}
else
{
$this->errormsg = 'Fehler beim Speichern der Frage:'.$qry;
return false;
}
}
/**
* Speichert die Frage in der angegebenen Sprache
*
* @return true wenn ok, false im Fehlerfall
*/
public function save_fragesprache()
{
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
{
$qry = 'INSERT INTO testtool.tbl_frage_sprache (frage_id, sprache, text, bild, audio,
insertamum, insertvon, updateamum, updatevon) VALUES('.
$this->addslashes($this->frage_id).','.
$this->addslashes($this->sprache).','.
$this->addslashes($this->text).','.
$this->addslashes($this->bild).','.
$this->addslashes($this->audio).','.
$this->addslashes($this->insertamum).','.
$this->addslashes($this->insertvon).','.
'null,null);';
}
else
{
$qry = 'UPDATE testtool.tbl_frage_sprache SET'.
' text='.$this->addslashes($this->text).','.
' bild='.$this->addslashes($this->bild).','.
' audio='.$this->addslashes($this->audio).','.
' updateamum='.$this->addslashes($this->updateamum).','.
' updatevon='.$this->addslashes($this->updatevon).
" WHERE frage_id='".addslashes($this->frage_id)."' AND sprache='".addslashes($this->sprache)."';";
}
//echo $qry;
if(pg_query($this->conn,$qry))
{
//Log schreiben
return true;
@@ -169,51 +266,70 @@ class frage
return false;
}
}
function getFrage($gebiet_id, $nummer, $gruppe_kurzbz)
public function getFragen($gebiet_id, $nummer)
{
$qry = "SELECT * FROM testtool.tbl_frage WHERE gebiet_id='$gebiet_id' AND nummer='$nummer' AND gruppe_kurzbz='$gruppe_kurzbz'";
$qry = "SELECT * FROM testtool.tbl_frage
WHERE gebiet_id='".addslashes($gebiet_id)."' AND nummer='".addslashes($nummer)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
while($row = pg_fetch_object($result))
{
$this->frage_id = $row->frage_id;
$this->gebiet_id = $row->gebiet_id;
$this->gruppe_kurzbz = $row->gruppe_kurzbz;
$this->loesung = $row->loesung;
$this->nummer = $row->nummer;
$this->demo = ($row->demo=='t'?true:false);
$this->text = $row->text;
$this->bild = $row->bild;
return true;
}
else
{
$this->errormsg = 'Fehler beim laden';
return false;
$obj = new frage($this->conn, null, null);
$obj->frage_id = $row->frage_id;
$obj->kategorie_kurzbz = $row->kategorie_kurzbz;
$obj->gebiet_id = $row->gebiet_id;
$obj->level = $row->level;
$obj->nummer = $row->nummer;
$obj->demo = ($row->demo=='t'?true:false);
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim laden der Daten';
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
function getNextFrage($gebiet_id, $gruppe_kurzbz, $frage_id, $demo=false)
/**
* Laedt die naechste Frage eines Gebiets
*
* @param $gebiet_id
* @param $pruefling_id
* @param $frage_id ID der vorherigen Frage. wenn Null dann wird die erste Frage geliefert
* @param $demo
* @return frage_id der naechsten Frage oder false wenn Fehler
*/
public function getNextFrage($gebiet_id, $pruefling_id, $frage_id=null, $demo=false)
{
$qry = "SELECT frage_id FROM testtool.tbl_frage WHERE gebiet_id='".addslashes($gebiet_id)."' AND gruppe_kurzbz='".addslashes($gruppe_kurzbz)."' AND nummer".($demo?'<':'>')."(SELECT nummer FROM testtool.tbl_frage WHERE frage_id='".addslashes($frage_id)."') ";
if($demo)
{
$qry.=" AND demo=true";
$order = 'DESC';
$qry = "SELECT frage_id FROM testtool.tbl_frage
WHERE tbl_frage.gebiet_id='".addslashes($gebiet_id)."'
AND demo ";
if(!is_null($frage_id))
$qry.=" AND nummer<(SELECT nummer FROM testtool.tbl_frage WHERE frage_id='".addslashes($frage_id)."')";
$qry .= " ORDER BY nummer DESC LIMIT 1";
}
else
{
$qry = "SELECT frage_id FROM testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id)
WHERE
tbl_frage.gebiet_id='".addslashes($gebiet_id)."' AND
tbl_pruefling_frage.pruefling_id='".addslashes($pruefling_id)."' AND
NOT demo ";
if(!is_null($frage_id))
$qry.=" AND tbl_pruefling_frage.nummer>(SELECT nummer FROM testtool.tbl_pruefling_frage WHERE pruefling_id='".addslashes($pruefling_id)."' AND frage_id='".addslashes($frage_id)."' LIMIT 1)";
$qry.="ORDER BY tbl_pruefling_frage.nummer ASC LIMIT 1";
}
else
$order = 'ASC';
$qry.=" ORDER BY nummer $order LIMIT 1";
if($result = pg_query($this->conn, $qry))
{
@@ -225,5 +341,426 @@ class frage
else
return false;
}
/**
* Laedt die Frage in der angegebenen Sprache
*
* @param $frage_id
* @param $sprache
* @return true wenn ok, false im Fehlerfall
*/
public function getFrageSprache($frage_id, $sprache)
{
$qry = "SELECT * FROM testtool.tbl_frage_sprache JOIN testtool.tbl_frage USING(frage_id)
WHERE frage_id='".addslashes($frage_id)."' AND sprache='".addslashes($sprache)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$this->frage_id = $row->frage_id;
$this->sprache = $row->sprache;
$this->text = $row->text;
$this->bild = $row->bild;
$this->audio = $row->audio;
$this->insertaum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
$this->level = $row->level;
$this->demo = ($row->demo=='t'?true:false);
$this->nummer = $row->nummer;
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Frage';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Frage';
return false;
}
}
/**
* Liefert das naechste Level zu dem noch Fragen fehlen
*
* @param $levelarr Array mit den Levels und der Anzahl der noch zu liefernden Fragen
* @return naechstes level bzw null wenn keines mehr vorhanden
*/
private function getNextFrageLevel($levelarr)
{
foreach ($levelarr as $key=>$row)
{
if($row>0)
return $key;
}
return null;
}
/**
* Generiert den Fragenpool fuer den Pruefling bzw
* die naechste Frage bei gelevelten Gebieten
*
* @param $pruefling_id
* @param $gebiet_id
*/
public function generateFragenpool($pruefling_id, $gebiet_id)
{
$gebiet = new gebiet($this->conn, $gebiet_id);
//Bei Levelgesteuerten Fragen wird nur die erste Frage angelegt
if($gebiet->level_start!='')
{
// Anzahl der bereits vorhandenen Fragen holen
$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($pruefling_id)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
if($row->anzahl>=$gebiet->maxfragen)
{
// maximale Fragenanzahl erreicht
return true;
}
}
}
$maxfragen=1;
}
else
{
$maxfragen = $gebiet->maxfragen;
// Wie viele Fragen gibt es in diesem Gebiet
$qry = "SELECT count(*) as anzahl FROM testtool.tbl_frage WHERE NOT demo AND gebiet_id='".addslashes($gebiet_id)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$fragengesamt = $row->anzahl;
}
}
// Wenn im Gebiet keine Maximalzahl angegeben ist, dann kommen alle Fragen in den Pool
if($maxfragen=='')
{
$maxfragen = $fragengesamt;
}
$level = array();
// Bei Levelgleichverteilung die Anzahl der Fragen pro level ermitteln
if($gebiet->levelgleichverteilung)
{
$qry = "SELECT level, count(*) as anzahl FROM testtool.tbl_frage
WHERE NOT demo AND gebiet_id='".addslashes($gebiet_id)."'
GROUP BY level
ORDER BY level";
if($result = pg_query($this->conn, $qry))
{
while($row = pg_fetch_object($result))
{
$level[$row->level]=round(($row->anzahl/$fragengesamt)*$maxfragen);
}
}
// Von jedem Gebiet muss mindestens eine Frage kommen
foreach ($level as $key=>$row)
{
if($level[$key]==0)
{
$level[$key]=1;
}
}
}
}
pg_query($this->conn, 'BEGIN;');
while($maxfragen>0)
{
//Bei levelgleichverteilung das Level der naechsten Frage holen
if($gebiet->levelgleichverteilung)
{
$nextlevel=$this->getNextFrageLevel($level);
if(isset($level[$nextlevel]))
$level[$nextlevel]=$level[$nextlevel]-1;
}
else
{
$nextlevel=null;
}
$this->frage_id=$this->getNewFrage($gebiet_id, $pruefling_id, $nextlevel);
$this->pruefling_id=$pruefling_id;
//hoechste Nummer holen
$qry = "SELECT
tbl_pruefling_frage.nummer
FROM
testtool.tbl_pruefling_frage JOIN testtool.tbl_frage USING(frage_id)
WHERE
tbl_frage.gebiet_id='".addslashes($gebiet_id)."' AND
tbl_pruefling_frage.pruefling_id='".addslashes($pruefling_id)."'
ORDER BY nummer DESC LIMIT 1;";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
$this->nummer = $row->nummer+1;
else
$this->nummer = 1;
}
else
{
$this->errormsg = 'Fehler beim Generieren des Fragenpools'.$qry;
pg_query($this->conn, 'ROLLBACK');
return false;
}
$this->begintime='';
$this->endtime='';
//PrueflingFrage speichern
if(!$this->save_prueflingfrage(true))
{
pg_query($this->conn, 'ROLLBACK');
return false;
}
$maxfragen--;
}
pg_query($this->conn, 'COMMIT;');
return true;
}
/**
* Laedt eine Prueflingfrage
*
* @param $prueflingfrage_id
* @return true wenn ok, false im Fehlerfall
*/
public function load_prueflingfrage($prueflingfrage_id)
{
if(!is_numeric($prueflingfrage_id) || $prueflingfrage_id=='')
{
$this->errormsg = 'prueflingfrage_id ist ungueltig';
return false;
}
$qry = "SELECT * FROM testtool.tbl_pruefling_frage WHERE prueflingfrage_id='".addslashes($prueflingfrage_id)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$this->prueflingfrage_id = $row->prueflingfrage_id;
$this->pruefling_id = $row->pruefling_id;
$this->frage_id = $row->frage_id;
$this->nummer = $row->nummer;
$this->begintime = $row->begintime;
$this->endtime = $row->endtime;
return true;
}
else
{
$this->errormsg = 'Es wurde keine PrueflingFrage mit der uebergebenen ID gefunden';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der PrueflingFrage';
return false;
}
}
/**
* Laedt eine Prueflingfrage
*
* @param $pruefling_id
* @param $frage_id
* @return true wenn ok, false wenn Fehler oder kein Eintrag vorhanden
*/
public function getPrueflingfrage($pruefling_id, $frage_id)
{
if(!is_numeric($pruefling_id) || $pruefling_id=='')
{
$this->errormsg = 'Pruefling_id ist ungueltig';
return false;
}
if(!is_numeric($frage_id) || $frage_id=='')
{
$this->errormsg = 'Frage_id ist ungueltig';
return false;
}
$qry = "SELECT * FROM testtool.tbl_pruefling_frage WHERE pruefling_id='".addslashes($pruefling_id)."' AND frage_id='".addslashes($frage_id)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$this->prueflingfrage_id = $row->prueflingfrage_id;
$this->pruefling_id = $row->pruefling_id;
$this->frage_id = $row->frage_id;
$this->nummer = $row->nummer;
$this->begintime = $row->begintime;
$this->endtime = $row->endtime;
return true;
}
else
{
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der PrueflingFrage';
return false;
}
}
/**
* Prueft die Daten vor dem Speichern in die Tabelle tbl_pruefling_frage
*
*/
private function validate_prueflingfrage()
{
if(!is_numeric($this->pruefling_id) || $this->pruefling_id=='')
{
$this->errormsg = 'Pruefling_id ist ungueltig';
return false;
}
if(!is_numeric($this->frage_id) || $this->frage_id=='')
{
$this->errormsg = 'Frage_id ist ungueltig';
return false;
}
if(!is_numeric($this->nummer))
{
$this->errormsg = 'Nummer ist ungueltig';
return false;
}
return true;
}
/**
* Speichert einen Eintrag in der Tabelle tbl_pruefling_frage
*
* @param $new
*/
public function save_prueflingfrage($new=null)
{
if(!$this->validate_prueflingfrage())
return false;
if(is_null($new))
$new = $this->new;
if($new)
{
$qry = 'INSERT INTO testtool.tbl_pruefling_frage(pruefling_id, frage_id, nummer, begintime, endtime) VALUES('.
$this->addslashes($this->pruefling_id).','.
$this->addslashes($this->frage_id).','.
$this->addslashes($this->nummer).','.
$this->addslashes($this->begintime).','.
$this->addslashes($this->endtime).');';
}
else
{
$qry = 'UPDATE testtool.tbl_pruefling_frage SET'.
' pruefling_id='.$this->addslashes($this->pruefling_id).','.
' frage_id='.$this->addslashes($this->frage_id).','.
' nummer='.$this->addslashes($this->nummer).','.
' begintime='.$this->addslashes($this->begintime).','.
' endtime='.$this->addslashes($this->endtime).
" WHERE prueflingfrage_id='".addslashes($this->prueflingfrage_id)."'";
}
if(pg_query($this->conn, $qry))
{
return true;
}
else
{
$this->errormsg = 'Fehler beim Speichern in tbl_pruefling_frage';
return false;
}
}
/**
* Sucht eine neue Frage fuer einen Pruefling
*
* @param $gebiet_id
* @param $pruefling_id
* @param $level (nur bei Levelgleichverteilung)
*/
private function getNewFrage($gebiet_id, $pruefling_id, $level=null)
{
$gebiet = new gebiet($this->conn, $gebiet_id);
$pruefling = new pruefling($this->conn);
//Frage suchen die dem pruefling noch nicht zugeordnet ist
$qry = "SELECT frage_id FROM testtool.tbl_frage
WHERE gebiet_id='".addslashes($gebiet_id)."' AND
frage_id NOT IN (SELECT frage_id FROM testtool.tbl_pruefling_frage
WHERE pruefling_id='".addslashes($pruefling_id)."'
)
AND NOT demo";
// Wenn die Frage abhaengig vom level sein soll, dann den aktuellen Level ermitteln und dazuhaengen
if($gebiet->level_start!='')
{
$level2 = $pruefling->getPrueflingLevel($pruefling_id, $gebiet_id);
$qry.=" AND level='".addslashes($level2)."'";
}
// Bei Levelgleichverteilung wird der Level mituebergeben
if(!is_null($level))
{
$qry.=" AND level='".addslashes($level)."'";
}
//Sortierung
if($gebiet->zufallfrage)
$qry .= " ORDER BY random()";
else
$qry .= " ORDER BY nummer ASC";
$qry .= " LIMIT 1";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
return $row->frage_id;
}
else
{
$this->errormsg = 'Es gibt keine Fragen die den Kriterien entsprechen';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Holen der Frage';
return false;
}
}
}
?>
+583
View File
@@ -0,0 +1,583 @@
<?php
/* Copyright (C) 2009 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <[email protected]>,
* Andreas Oesterreicher <[email protected]>,
* Rudolf Hangl <[email protected]> and
* Gerald Simane-Sequens <[email protected]>
*/
/**
* Klasse fuer die Gebiete des Testtools (Reihungstesttool)
*
*/
class gebiet
{
//Tabellenspalten
public $gebiet_id;
public $kurzbz;
public $bezeichnung;
public $beschreibung;
public $zeit;
public $multipleresponse;
public $kategorien;
public $maxfragen;
public $zufallfrage;
public $zufallvorschlag;
public $level_start;
public $level_sprung_auf;
public $level_sprung_ab;
public $levelgleichverteilung;
public $maxpunkte;
public $insertamum;
public $insertvon;
public $updateamum;
public $updatevon;
// ErgebnisArray
public $result=array();
public $errormsg;
public $new;
// *************************************************************************
// * Konstruktor - Uebergibt die Connection und laedt optional ein Gebiet
// * @param $conn Datenbank-Connection
// * $gebiet_id Gebiet das geladen werden soll (default=null)
// * $unicode Gibt an ob die Daten mit UNICODE Codierung
// * oder LATIN9 Codierung verarbeitet werden sollen
// *************************************************************************
public function gebiet($conn, $gebiet_id=null, $unicode=false)
{
$this->conn = $conn;
if($unicode)
$qry = "SET CLIENT_ENCODING TO 'UNICODE';";
else
$qry = "SET CLIENT_ENCODING TO 'LATIN9';";
if(!pg_query($conn,$qry))
{
$this->errormsg = 'Encoding konnte nicht gesetzt werden';
return false;
}
if($gebiet_id != null)
$this->load($gebiet_id);
}
// ***********************************************************
// * Laedt Gebiet mit der uebergebenen ID
// * @param $gebiet_id ID des Gebiets das geladen werden soll
// ***********************************************************
public function load($gebiet_id)
{
$qry = "SELECT * FROM testtool.tbl_gebiet WHERE gebiet_id='".addslashes($gebiet_id)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$this->gebiet_id = $row->gebiet_id;
$this->kurzbz = $row->kurzbz;
$this->bezeichnung = $row->bezeichnung;
$this->beschreibung = $row->beschreibung;
$this->zeit = $row->zeit;
$this->multipleresponse = ($row->multipleresponse=='t'?true:false);
$this->kategorien = ($row->kategorien=='t'?true:false);
$this->maxfragen = $row->maxfragen;
$this->zufallfrage = ($row->zufallfrage=='t'?true:false);
$this->zufallvorschlag = ($row->zufallvorschlag=='t'?true:false);
$this->level_start = $row->level_start;
$this->level_sprung_auf = $row->level_sprung_auf;
$this->level_sprung_ab = $row->level_sprung_ab;
$this->levelgleichverteilung = ($row->levelgleichverteilung=='t'?true:($row->levelgleichverteilung=='f'?false:null));
$this->maxpunkte = $row->maxpunkte;
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
return true;
}
else
{
$this->errormsg = "Kein Eintrag gefunden fuer $gebiet_id";
return false;
}
}
else
{
$this->errormsg = "Fehler beim Laden des Gebiets";
return false;
}
}
// ************************************************
// * wenn $var '' ist wird NULL zurueckgegeben
// * wenn $var !='' ist werden Datenbankkritische
// * Zeichen mit Backslash versehen und das Ergbnis
// * unter Hochkomma gesetzt.
// ************************************************
private function addslashes($var)
{
return ($var!=''?"'".addslashes($var)."'":'null');
}
// *******************************************
// * Prueft die Variablen vor dem Speichern
// * auf Gueltigkeit.
// * @return true wenn ok, false im Fehlerfall
// *******************************************
private function validate()
{
if(strlen($this->kurzbz)>10)
{
$this->errormsg = 'Kurzbz darf nicht laenger als 10 Zeichen sein';
return false;
}
if(strlen($this->bezeichnung)>50)
{
$this->errormsg = 'Bezeichnung darf nicht laenger als 50 Zeichen sein';
return false;
}
if(!is_bool($this->multipleresponse))
{
$this->errormsg = 'Multipleresponse muss ein boolscher Wert sein';
return false;
}
if(!is_bool($this->kategorien))
{
$this->errormsg = 'Kategorien muss ein boolscher Wert sein';
return false;
}
if(!is_numeric($this->maxfragen) && $this->maxfragen!='')
{
$this->errormsg = 'maxfragen muss eine gueltige Zahl sein';
return false;
}
if(!is_bool($this->zufallfrage))
{
$this->errormsg = 'Zufallfrage muss ein boolscher Wert sein';
return false;
}
if(!is_bool($this->zufallvorschlag))
{
$this->errormsg = 'Zufallvorschlag muss ein boolscher Wert sein';
return false;
}
if(!is_bool($this->levelgleichverteilung) && !is_null($this->levelgleichverteilung))
{
$this->errormsg = 'Levelgleichverteilung ist ungueltig';
return false;
}
if(!is_numeric($this->maxpunkte) && $this->maxpunkte!='')
{
$this->errormsg = 'Maxpunkte muss eine gueltige Zahl sein';
return false;
}
return true;
}
// ******************************************************************
// * Speichert das Gebiet in die Datenbank
// * Wenn $new auf true gesetzt ist wird ein neuer Datensatz angelegt
// * ansonsten der Datensatz aktualisiert
// * @return true wenn erfolgreich, false im Fehlerfall
// ******************************************************************
public function save($new=null)
{
if(is_null($new))
$new = $this->new;
//Variablen auf Gueltigkeit pruefen
if(!$this->validate())
return false;
if($new)
{
$qry = 'BEGIN;INSERT INTO testtool.tbl_gebiet (kurzbz, bezeichnung, beschreibung, zeit, multipleresponse,
kategorien, maxfragen, zufallfrage, zufallvorschlag, level_start, level_sprung_auf, level_sprung_ab,
levelgleichverteilung, maxpunkte, insertamum, insertvon , updateamum, updatevon) VALUES('.
$this->addslashes($this->kurzbz).",".
$this->addslashes($this->bezeichnung).",'".
$this->addslashes($this->beschreibung).",'".
$this->addslashes($this->zeit).",".
($this->multipleresponse?'true':'false').",".
$this->addslashes($this->kategorien).",".
$this->addslashes($this->maxfragen).",".
($this->zufallfrage?'true':'false').",'".
($this->zufallvorschlag?'true':'false').",'".
$this->addslashes($this->level_start).",".
$this->addslashes($this->level_sprung_auf).",".
$this->addslashes($this->level_sprung_ab).",".
($this->levelgleichverteilung?'true':($this->levelgleichverteilung==false?'false':'null')).",".
$this->addslashes($this->maxpunkte).",".
$this->addslashes($this->insertamum).",".
$this->addslashes($this->insertvon).
",null, null);";
}
else
{
$qry = 'UPDATE testtool.tbl_gebiet SET'.
' kurzbz='.$this->addslashes($this->kurzbz).','.
' bezeichnung='.$this->addslashes($this->bezeichnung).','.
' beschreibung='.$this->addslashes($this->beschreibung).','.
' zeit='.$this->addslashes($this->zeit).','.
' multipleresponse='.($this->multipleresponse?'true':'false').','.
' kategorien='.($this->kategorien?'true':'false').','.
' maxfragen='.$this->addslashes($this->maxfragen).','.
' zufallfrage='.($this->zufallfrage?'true':'false').','.
' zufallvorschlag='.($this->zufallvorschlag?'true':'false').','.
' level_start='.$this->addslashes($this->level_start).','.
' level_sprung_auf='.$this->addslashes($this->level_sprung_auf).','.
' level_sprung_ab='.$this->addslashes($this->level_sprung_ab).','.
' levelgleichverteilung='.($this->levelgleichverteilung?'true':($this->levelgleichverteilung==false?'false':'null')).','.
' maxpunkte='.$this->addslashes($this->maxpunkte).','.
' updateamum='.$this->addslashes($this->updateamum).','.
' updatevon='.$this->addslashes($this->updatevon).
" WHERE gebiet_id='".addslashes($this->gebiet_id)."';";
}
if(pg_query($this->conn,$qry))
{
//aktuelle ID aus der Sequence holen
if($new)
{
$qry='SELECT currval("testtool.tbl_gebiet_gebiet_id_seq") as id;';
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$this->gebiet_id = $row->id;
pg_query($this->conn, 'COMMIT');
return true;
}
else
{
$this->errormsg = 'Fehler beim Lesen der Sequence';
pg_query($this->conn, 'ROLLBACK;');
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Lesen der Sequence';
pg_query($this->conn, 'ROLLBACK');
return false;
}
}
else
return true;
}
else
{
$this->errormsg = 'Fehler beim Speichern der Frage:'.$qry;
return false;
}
}
/**
* prueft das Gebiet auf Gueltigkeit
* (diverse Plausichecks)
*
* @param $gebiet_id
*/
function check_gebiet($gebiet_id)
{
$this->errormsg = '';
$this->load($gebiet_id);
//wenn levels verwendet werden muss maxfragen gesetzt sein
if($this->level_start!='' && $this->maxfragen=='')
{
$this->errormsg .= "Wenn Levels verwendet werden, muss die maximale Fragenanzahl gesetzt sein.\n";
}
//Levelgleichverteilung gibt es nur bei nicht geleveltem ablauf
if($this->level_start!='' && $this->levelgleichverteilung)
{
$this->errormsg .= "Levelgleichverteilung ist nur dann erlaubt, wenn der Ablauf nicht gelevelt ist.\n";
}
//Von jedem level muessen mindestens maxfragen vorhanden sein wenn levels aktiv ist
if($this->level_start!='')
{
$qry = "SELECT count(*) as anzahl, level FROM testtool.tbl_frage WHERE gebiet_id='".addslashes($gebiet_id)."' GROUP BY level";
if($result = pg_query($this->conn, $qry))
{
while($row = pg_fetch_object($result))
{
if($row->anzahl<$this->maxfragen)
{
$this->errormsg .= "Es gibt nur $row->anzahl Fragen fuer das Level $row->level. Es muessen aber mindestens $this->maxfragen angelegt werden.\n";
}
}
}
}
//Pruefen ob jede Fragen mindestens 2 Vorschlaege hat
$qry = "SELECT frage_id, nummer FROM testtool.tbl_frage
WHERE (SELECT count(*) as anzahl FROM testtool.tbl_vorschlag WHERE frage_id=tbl_frage.frage_id)<2
AND gebiet_id='".addslashes($gebiet_id)."' AND NOT demo;";
if($result = pg_query($this->conn, $qry))
{
while($row = pg_fetch_object($result))
{
$this->errormsg .= "Frage Nummer $row->nummer (ID: $row->frage_id) hat weniger als 2 Vorschlaege.\n";
}
}
//Wenn Levels verwendet werden, muessen mindestens 2 Verschiedene Level vorhanden sein
if($this->level_start!='')
{
$qry = "SELECT level FROM testtool.tbl_frage WHERE gebiet_id='".addslashes($gebiet_id)."' AND level is not null GROUP by level";
if($result = pg_query($this->conn, $qry))
{
if(pg_num_rows($result)<2)
{
$this->errormsg .= "Wenn Levels verwendet werden, muessen mindestens 2 verschiedene Level vorhanden sein.\n";
}
}
}
// Wenn Levelgleichverteilung true ist, muss maxfragen mindestens so gross wie die Anzahl der level sein
if($this->levelgleichverteilung)
{
if($this->maxfragen!='' && $this->maxfragen!=0)
{
$qry = "SELECT count(*) as anzahl FROM testtool.tbl_frage WHERE gebiet_id='".addslashes($gebiet_id)."' AND not demo AND level is not null GROUP BY level";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
if($row->anzahl>$this->maxfragen)
{
$this->errormsg .= "Wenn Levelgleichverteilung gesetzt ist, muss maxfragen groesser als die Anzahl der verwendeten Levels sein\n";
}
}
}
}
}
// Wenn zufallsfrage=true und level_start!='' oder levelgleichverteilung
// dann darf die punkteanzahl pro level/Frage sich nicht unterscheiden
if($this->zufallfrage && ($this->level_start!='' || $this->levelgleichverteilung))
{
$qry = "SELECT * FROM (
SELECT level, count(*) as anzahl FROM (
SELECT level, punkte, count(*) as anzahl FROM (
SELECT level, sum(punkte) as punkte
FROM testtool.tbl_frage JOIN testtool.tbl_vorschlag USING(frage_id)
WHERE punkte>0 AND not demo AND gebiet_id='".addslashes($gebiet_id)."'
GROUP BY frage_id, level) as a
GROUP BY level, punkte ) as b
GROUP BY level) as c
WHERE c.anzahl>1";
if($result = pg_query($this->conn, $qry))
{
while($row = pg_fetch_object($result))
{
$this->errormsg .= "Pro Level/Frage darf die positive Punkteanzahl nicht unterschiedlich sein wenn Zufallsfragen und Levels/Levelgleichverteilung verwendet wird. (Unterschiede in Level $row->level)\n";
}
}
}
// kein Multipleresponse bei gelevelten Gebieten
if($this->level_start!='' && $this->level_start!=0 && $this->multipleresponse)
{
$this->errormsg .= "Bei gelevelten Gebieten ist Multipleresponse nicht erlaubt\n";
}
// maxpunkte muss eingetragen sein
if($this->maxpunkte=='' || $this->maxpunkte==0)
{
$this->errormsg = "Es wurden keine Maximalpunkte fuer dieses Gebiet eingetragen\n";
}
if($this->errormsg=='')
return true;
else
return false;
}
/**
* Holt alle Gebiete aus der DB
*
* @return true wenn ok, false wenn Fehler
*/
public function getAll()
{
$qry = 'SELECT * FROM testtool.tbl_gebiet ORDER BY bezeichnung';
if($result = pg_query($this->conn, $qry))
{
while($row = pg_fetch_object($result))
{
$obj = new gebiet($this->conn, null, null);
$obj->gebiet_id = $row->gebiet_id;
$obj->kurzbz = $row->kurzbz;
$obj->bezeichnung = $row->bezeichnung;
$obj->beschreibung = $row->beschreibung;
$obj->zeit = $row->zeit;
$obj->multipleresponse = ($row->multipleresponse=='t'?true:false);
$obj->kategorien = ($row->kategorien=='t'?true:false);
$obj->maxfragen = $row->maxfragen;
$obj->zufallfrage = ($row->zufallfrage=='t'?true:false);
$obj->zufallvorschlag = ($row->zufallvorschlag=='t'?true:false);
$obj->levelgleichverteilung = ($row->levelgleichverteilung=='t'?true:false);
$obj->maxpunkte = $row->maxpunkte;
$obj->level_start = $row->level_start;
$obj->level_sprung_ab = $row->level_sprung_ab;
$obj->level_sprung_auf = $row->level_sprung_auf;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler in Fkt getAll()';
return false;
}
}
/**
* Berechnet die maxpunkte fuer das Gebiet
*
* @param $gebiet_id
*/
public function berechneMaximalpunkte($gebiet_id)
{
if(!$this->load($gebiet_id))
return false;
if(!$this->levelgleichverteilung && ($this->level_start=='' || $this->level_start==0))
{
$qry = "SELECT sum(punkte) as max
FROM testtool.tbl_vorschlag JOIN testtool.tbl_frage USING(frage_id)
WHERE gebiet_id='".addslashes($gebiet_id)."' AND punkte>0 AND NOT demo";
if($this->maxfragen!='' && $this->maxfragen>0)
$qry.=" LIMIT $maxfragen";
}
elseif($this->levelgleichverteilung && !$this->multipleresponse)
{
//Levelgleichverteilung mit singleresponse
$qry = "SELECT sum(punkteprolevel) as max FROM
(
SELECT round((anz::decimal/fragengesamt::decimal)*$this->maxfragen*punkte) as punkteprolevel
FROM
(
SELECT
level, punkte, count(*) as anz,
(SELECT count(*) FROM testtool.tbl_frage
WHERE gebiet_id='".addslashes($gebiet_id)."') as fragengesamt
FROM
testtool.tbl_frage
JOIN testtool.tbl_vorschlag USING(frage_id)
WHERE
gebiet_id='".addslashes($gebiet_id)."'
AND NOT demo
GROUP BY level, punkte
) a
) b";
}
elseif($this->levelgleichverteilung && $this->multipleresponse)
{
//Levelgleichverteilung mit multipleresponse
$qry = "SELECT sum(punkteprolevel) as max FROM
(
SELECT round((anz::decimal/fragengesamt::decimal)*$this->maxfragen*punkte) as punkteprolevel
FROM
(
SELECT
level, punkte, count(*) as anz,
(SELECT count(*) FROM testtool.tbl_frage
WHERE gebiet_id='".addslashes($gebiet_id)."') as fragengesamt
FROM
testtool.tbl_frage
JOIN testtool.tbl_vorschlag USING(frage_id)
WHERE
gebiet_id='".addslashes($gebiet_id)."'
AND NOT demo
GROUP BY level, punkte
) a
) b";
}
elseif($this->level_start!='')
{
//Maximalpunkte fuer geleveltes Gebiet ermitteln
//Punkte pro Level holen
$qry = "
SELECT level, punkte
FROM
(
SELECT level, frage_id, sum(punkte) as punkte
FROM testtool.tbl_frage JOIN testtool.tbl_vorschlag USING(frage_id)
WHERE gebiet_id=22 AND punkte>0 AND level>=2 AND NOT demo
GROUP BY level, frage_id
) as a
GROUP by level, punkte";
if($result = pg_query($this->conn, $qry))
{
$maxfragen = $this->maxfragen;
$maxpunkte = 0;
$lastpunkte=0;
//Punkte mit der Anzahl der Mindestfragen fuer dieses Level multiplizieren
while($row = pg_fetch_object($result))
{
if($maxfragen>0)
{
$maxpunkte += $row->punkte*$this->level_sprung_auf;
$lastpunkte = $row->punkte;
$maxfragen -=$this->level_sprung_auf;
}
}
// zuletzt die verbleibenden Fragen mit der Punkteanzahl der letzten (schwersten) Fragen multiplizieren
$maxpunkte += $lastpunkte*$maxfragen;
return $maxpunkte;
}
}
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
return $row->max;
}
else
{
$this->errormsg = 'Fehler beim Ermitteln der Maximalpunkte';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Ermitteln der Maximalpunkte';
return false;
}
}
}
?>
+35 -6
View File
@@ -39,7 +39,9 @@ class prestudent extends person
var $anmeldungreihungstest;
var $reihungstestangetreten;
var $reihungstest_id;
var $punkte;
var $punkte; //rt_gesamtpunkte
var $rt_punkte1;
var $rt_punkte2;
var $bismelden;
var $anmerkung;
var $ext_id_prestudent;
@@ -118,7 +120,9 @@ class prestudent extends person
$this->anmeldungreihungstest = $row->anmeldungreihungstest;
$this->reihungstestangetreten = ($row->reihungstestangetreten=='t'?true:false);
$this->reihungstest_id = $row->reihungstest_id;
$this->punkte = $row->punkte;
$this->punkte = $row->rt_gesamtpunkte;
$this->rt_punkte1 = $row->rt_punkte1;
$this->rt_punkte2 = $row->rt_punkte2;
$this->bismelden = ($row->bismelden=='t'?true:false);
$this->person_id = $row->person_id;
$this->anmerkung = $row->anmerkung;
@@ -150,6 +154,21 @@ class prestudent extends person
// *******************************************
function validate()
{
if($this->punkte>9999.9999)
{
$this->errormsg = 'Reihungstestgesamtpunkte darf nicht groesser als 9999.9999 sein';
return false;
}
if($this->rt_punkte1>9999.9999)
{
$this->errormsg = 'Reihungstestpunkte1 darf nicht groesser als 9999.9999 sein';
return false;
}
if($this->rt_punkte2>9999.9999)
{
$this->errormsg = 'Reihungstestpunkte2 darf nicht groesser als 9999.9999 sein';
return false;
}
return true;
}
@@ -171,7 +190,7 @@ class prestudent extends person
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
{
$qry = 'BEGIN;INSERT INTO public.tbl_prestudent (aufmerksamdurch_kurzbz, person_id, studiengang_kz, berufstaetigkeit_code, ausbildungcode, zgv_code, zgvort, zgvdatum, zgvmas_code, zgvmaort, zgvmadatum, aufnahmeschluessel, facheinschlberuf, reihungstest_id, anmeldungreihungstest, reihungstestangetreten, punkte, bismelden, insertamum, insertvon, updateamum, updatevon, ext_id, anmerkung, dual) VALUES('.
$qry = 'BEGIN;INSERT INTO public.tbl_prestudent (aufmerksamdurch_kurzbz, person_id, studiengang_kz, berufstaetigkeit_code, ausbildungcode, zgv_code, zgvort, zgvdatum, zgvmas_code, zgvmaort, zgvmadatum, aufnahmeschluessel, facheinschlberuf, reihungstest_id, anmeldungreihungstest, reihungstestangetreten, rt_gesamtpunkte, rt_punkte1, rt_punkte2, bismelden, insertamum, insertvon, updateamum, updatevon, ext_id, anmerkung, dual) VALUES('.
$this->addslashes($this->aufmerksamdurch_kurzbz).",".
$this->addslashes($this->person_id).",".
$this->addslashes($this->studiengang_kz).",".
@@ -189,6 +208,8 @@ class prestudent extends person
$this->addslashes($this->anmeldungreihungstest).",".
($this->reihungstestangetreten?'true':'false').",".
$this->addslashes($this->punkte).",".
$this->addslashes($this->rt_punkte1).",".
$this->addslashes($this->rt_punkte2).",".
($this->bismelden?'true':'false').",".
$this->addslashes($this->insertamum).",".
$this->addslashes($this->insertvon).",".
@@ -217,7 +238,9 @@ class prestudent extends person
' reihungstest_id='.$this->addslashes($this->reihungstest_id).",".
' anmeldungreihungstest='.$this->addslashes($this->anmeldungreihungstest).",".
' reihungstestangetreten='.($this->reihungstestangetreten?'true':'false').",".
' punkte='.$this->addslashes($this->punkte).",".
' rt_gesamtpunkte='.$this->addslashes($this->punkte).",".
' rt_punkte1='.$this->addslashes($this->rt_punkte1).",".
' rt_punkte2='.$this->addslashes($this->rt_punkte2).",".
' bismelden='.($this->bismelden?'true':'false').",".
' updateamum='.$this->addslashes($this->updateamum).",".
' updatevon='.$this->addslashes($this->updatevon).",".
@@ -329,6 +352,8 @@ class prestudent extends person
$ps->anmeldungreihungstest = $row->anmeldungreihungstest;
$ps->reihungstestangetreten = $row->reihungstestangetreten;
$ps->punkte = $row->punkte;
$ps->rt_punkte1 = $row->rt_punkte1;
$ps->rt_punkte2 = $row->rt_punkte2;
$ps->bismelden = $row->bismelden;
$ps->rt_studiengang_kz = $row->rt_studiengang_kz;
$ps->rt_ort = $row->rt_ort;
@@ -551,7 +576,9 @@ class prestudent extends person
$ps->anmeldungreihungstest = $row->anmeldungreihungstest;
$ps->reihungstestangetreten = ($row->reihungstestangetreten=='t'?true:false);
$ps->reihungstest_id = $row->reihungstest_id;
$ps->punkte = $row->punkte;
$ps->punkte = $row->rt_gesamtpunkte;
$ps->rt_punkte1 = $row->rt_punkte1;
$ps->rt_punkte2 = $row->rt_punkte2;
$ps->bismelden = ($row->bismelden=='t'?true:false);
$ps->anmerkung = $row->anmerkung;
$ps->dual = ($row->dual=='t'?true:false);
@@ -835,7 +862,9 @@ class prestudent extends person
$obj->anmeldungreihungstest = $row->anmeldungreihungstest;
$obj->reihungstestangetreten = ($row->reihungstestangetreten=='t'?true:false);
$obj->reihungstest_id = $row->reihungstest_id;
$obj->punkte = $row->punkte;
$obj->punkte = $row->rt_gesamtpunkte;
$obj->rt_punkte1 = $row->rt_punkte1;
$obj->rt_punkte2 = $row->rt_punkte2;
$obj->bismelden = ($row->bismelden=='t'?true:false);
$obj->person_id = $row->person_id;
$obj->anmerkung = $row->anmerkung;
+141 -10
View File
@@ -28,8 +28,8 @@ class pruefling
var $idnachweis;
var $registriert;
var $prestudent_id;
var $gruppe_kurzbz;
var $semester;
// ErgebnisArray
var $result=array();
var $num_rows=0;
@@ -79,7 +79,7 @@ class pruefling
$this->idnachweis = $row->idnachweis;
$this->registriert = $row->registriert;
$this->prestudent_id = $row->prestudent_id;
$this->gruppe_kurzbz = $row->gruppe_kurzbz;
$this->semester = $row->semester;
return true;
}
else
@@ -130,12 +130,12 @@ class pruefling
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
{
$qry = 'BEGIN;INSERT INTO testtool.tbl_pruefling (studiengang_kz, idnachweis, registriert, prestudent_id, gruppe_kurzbz) VALUES('.
$qry = 'BEGIN;INSERT INTO testtool.tbl_pruefling (studiengang_kz, idnachweis, registriert, prestudent_id, semester) VALUES('.
$this->addslashes($this->studiengang_kz).",".
$this->addslashes($this->idnachweis).",".
$this->addslashes($this->registriert).",".
$this->addslashes($this->prestudent_id).",".
$this->addslashes($this->gruppe_kurzbz).");";
$this->addslashes($this->semester).");";
}
else
{
@@ -143,8 +143,8 @@ class pruefling
' studiengang_kz='.$this->addslashes($this->studiengang_kz).','.
' idnachweis='.$this->addslashes($this->idnachweis).','.
' registriert='.$this->addslashes($this->registriert).','.
' prestudent_id='.$this->addslashes($this->prestudent_id).','.
' gruppe_kurzbz='.$this->addslashes($this->gruppe_kurzbz).
' semester='.$this->addslashes($this->semester).','.
' prestudent_id='.$this->addslashes($this->prestudent_id).
" WHERE pruefling_id='".addslashes($this->pruefling_id)."';";
}
@@ -164,14 +164,14 @@ class pruefling
else
{
pg_query($this->conn, 'ROLLBACK;');
$this->errormsg = 'Fehler beim lesen der Sequence';
$this->errormsg = 'Fehler beim Lesen der Sequence';
return false;
}
}
else
{
pg_query($this->conn, 'ROLLBACK;');
$this->errormsg = 'Fehler beim lesen der Sequence';
$this->errormsg = 'Fehler beim Lesen der Sequence';
return false;
}
}
@@ -200,7 +200,7 @@ class pruefling
$this->idnachweis = $row->idnachweis;
$this->registriert = $row->registriert;
$this->prestudent_id = $row->prestudent_id;
$this->gruppe_kurzbz = $row->gruppe_kurzbz;
$this->semester = $row->semester;
return true;
}
else
@@ -215,5 +215,136 @@ class pruefling
return false;
}
}
/**
* Ermittelt den aktuellen Level (schwierigkeitsgrad der Frage)
* des Prueflings fuer das uebergebene Gebiet
*
* @param $pruefling_id
* @param $gebiet_id
*/
function getPrueflingLevel($pruefling_id, $gebiet_id)
{
$gebiet = new gebiet($this->conn, $gebiet_id);
//wenn Levelsystem fuer dieses Gebiet aktiviert ist
if($gebiet->level_start!='')
{
//Maximal und Minimal Level fuer dieses Gebiet ermitteln
$max_level = 0;
$min_level = 0;
$qry = "SELECT max(level) as max, min(level) as min FROM testtool.tbl_frage WHERE gebiet_id='".addslashes($gebiet_id)."'";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$max_level = $row->max;
$min_level = $row->min;
}
else
{
$this->errormsg = 'unbekannter Fehler in getPrueflingLevel';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Ermitteln des Pruefling-Levels';
return false;
}
//alle bisherigen Antworten fuer dieses Gebiet holen
$qry = "SELECT
tbl_vorschlag.punkte
FROM
testtool.tbl_pruefling_frage
JOIN testtool.tbl_vorschlag USING(frage_id)
JOIN testtool.tbl_antwort USING(vorschlag_id)
JOIN testtool.tbl_frage USING(frage_id)
WHERE
tbl_frage.gebiet_id='".addslashes($gebiet_id)."' AND
tbl_pruefling_frage.pruefling_id='".addslashes($pruefling_id)."' AND
tbl_antwort.pruefling_id = tbl_pruefling_frage.pruefling_id
ORDER BY tbl_pruefling_frage.nummer ASC";
$aktueller_level=$gebiet->level_start;
$anzahl_richtig=0;
$anzahl_falsch=0;
if($result = pg_query($this->conn, $qry))
{
while($row = pg_fetch_object($result))
{
if($row->punkte>0)
{
//wenn die Frage richtig beantwortet wurde dann richtig-zaehler erhoehen
$anzahl_richtig++;
$anzahl_falsch=0;
}
else
{
//wenn die Frage falsch beantwortet wurde dann falsch-zaehler erhoehen
$anzahl_richtig=0;
$anzahl_falsch++;
}
//wenn einer der Zaehler das Sprunglevel erreicht hat, dann
//in ein anderes Level springen
if($anzahl_richtig==$gebiet->level_sprung_auf)
{
$aktueller_level++;
$anzahl_richtig=0;
$anzahl_falsch=0;
}
elseif($anzahl_falsch==$gebiet->level_sprung_ab)
{
$aktueller_level--;
$anzahl_richtig=0;
$anzahl_falsch=0;
}
//aktueller level darf nicht kleiner/groesser als der minimal/maximal Level sein
if($aktueller_level<$min_level)
$aktueller_level=$min_level;
if($aktueller_level>$max_level)
$aktueller_level=$max_level;
}
return $aktueller_level;
}
}
else
return -1;
}
/**
* Berechnet das Reihungstestergebnis fuer einen Prestudenten
*
* @param $prestudent_id
* @return Endpunkte des Reihungstests
*/
function getReihungstestErgebnis($prestudent_id)
{
$qry = "SELECT * FROM testtool.vw_auswertung
WHERE prestudent_id='".addslashes($prestudent_id)."'";
$ergebnis=0;
if($result = pg_query($this->conn, $qry))
{
while($row = pg_fetch_object($result))
{
//wenn maxpunkte ueberschritten wurde -> 100%
if($row->punkte>=$row->maxpunkte)
$prozent=100;
else
$prozent = ($row->punkte/$row->maxpunkte)*100;
$ergebnis+=$prozent*$row->gewicht;
}
return $ergebnis;
}
}
}
?>
+6
View File
@@ -49,6 +49,8 @@ class studiengang
var $ext_id; // bigint
var $orgform_kurzbz;
var $zusatzinfo_html;
var $sprache;
var $testtool_sprachwahl;
var $kuerzel; // = typ + kurzbz (Bsp: BBE)
@@ -126,6 +128,8 @@ class studiengang
$this->kuerzel = strtoupper($row->typ.$row->kurzbz);
$this->orgform_kurzbz = $row->orgform_kurzbz;
$this->zusatzinfo_html = $row->zusatzinfo_html;
$this->sprache = $row->sprache;
$this->testtool_sprachwahl = $row->testtool_sprachwahl;
$this->telefon=$row->telefon;
$this->titelbescheidvom=$row->titelbescheidvom;
@@ -185,6 +189,8 @@ class studiengang
$stg_obj->kuerzel = strtoupper($row->typ.$row->kurzbz);
$stg_obj->orgform_kurzbz = $row->orgform_kurzbz;
$stg_obj->zusatzinfo_html = $row->zusatzinfo_html;
$stg_obj->sprache = $row->sprache;
$stg_obj->testtool_sprachwahl = $row->testtool_sprachwahl;
$stg_obj->telefon=$row->telefon;
$stg_obj->titelbescheidvom=$row->titelbescheidvom;
+161 -26
View File
@@ -26,10 +26,17 @@ class vorschlag
var $vorschlag_id;
var $frage_id;
var $nummer;
var $antwort;
var $punkte;
var $text;
var $bild;
var $audio;
var $insertamum;
var $insertvon;
var $updateamum;
var $updatevon;
// ErgebnisArray
var $result=array();
var $num_rows=0;
@@ -66,7 +73,7 @@ class vorschlag
// * Laedt Vorschlag mit der uebergebenen ID
// * @param $vorschlag_id ID des Vorschlages der geladen werden soll
// ***********************************************************
function load($vorschlag_id)
function load($vorschlag_id, $sprache='German')
{
$qry = "SELECT * FROM testtool.tbl_vorschlag WHERE vorschlag_id='".addslashes($vorschlag_id)."'";
@@ -76,24 +83,38 @@ class vorschlag
{
$this->vorschlag_id = $row->vorschlag_id;
$this->frage_id = $row->frage_id;
$this->antwort = $row->antwort;
$this->punkte = $row->punkte;
$this->nummer = $row->nummer;
$this->text = $row->text;
$this->bild = $row->bild;
$this->loadVorschlagSprache($vorschlag_id, $sprache);
return true;
}
else
{
$this->errormsg = "Kein Eintrag gefunden fuer $vorschlag_id";
$this->errormsg = "Kein Eintrag gefunden fuer $vorschlag_id $sprache";
return false;
}
}
else
{
$this->errormsg = "Fehler beim laden: $qry";
$this->errormsg = "Fehler beim Laden: $qry";
return false;
}
}
function loadVorschlagSprache($vorschlag_id, $sprache)
{
$qry = "SELECT * FROM testtool.tbl_vorschlag_sprache
WHERE vorschlag_id='".addslashes($vorschlag_id)."' AND sprache='".addslashes($sprache)."'";
if($result_sprache = pg_query($this->conn, $qry))
{
if($row_sprache = pg_fetch_object($result_sprache))
{
$this->text = $row_sprache->text;
$this->bild = $row_sprache->bild;
$this->audio = $row_sprache->audio;
}
}
}
// ************************************************
// * wenn $var '' ist wird NULL zurueckgegeben
@@ -130,29 +151,57 @@ class vorschlag
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
{
$qry = 'INSERT INTO testtool.tbl_vorschlag (frage_id, nummer, antwort, text, bild) VALUES('.
"'".addslashes($this->frage_id)."',".
$this->addslashes($this->nummer).",".
$this->addslashes($this->antwort).",'".
$this->text."',".
$this->addslashes($this->bild).");";
$qry = 'BEGIN;INSERT INTO testtool.tbl_vorschlag (frage_id, nummer, punkte, insertamum, insertvon, updateamum, updatevon) VALUES('.
$this->addslashes($this->frage_id).','.
$this->addslashes($this->nummer).','.
$this->addslashes($this->punkte).','.
$this->addslashes($this->insertamum).','.
$this->addslashes($this->insertvon).','.
$this->addslashes($this->updateamum).','.
$this->addslashes($this->updatevon).');';
}
else
{
$qry = 'UPDATE testtool.tbl_vorschlag SET'.
' frage_id='.$this->addslashes($this->frage_id).','.
' nummer='.$this->addslashes($this->nummer).','.
' antwort='.$this->addslashes($this->antwort).','.
" text='".$this->text."'";
if($this->bild!='')
$qry.=' , bild='.$this->addslashes($this->bild);
$qry.=" WHERE vorschlag_id='".addslashes($this->vorschlag_id)."';";
' punkte='.$this->addslashes($this->punkte).','.
' updateamum='.$this->addslashes($this->updateamum).','.
' updatevon='.$this->addslashes($this->updatevon).
" WHERE vorschlag_id='".addslashes($this->vorschlag_id)."';";
}
if(pg_query($this->conn,$qry))
{
//Log schreiben
return true;
if($this->new)
{
$qry = "SELECT currval('testtool.tbl_vorschlag_vorschlag_id_seq') as id";
if($result = pg_query($this->conn, $qry))
{
if($row = pg_fetch_object($result))
{
$this->vorschlag_id = $row->id;
pg_query($this->conn, 'COMMIT;');
return true;
}
else
{
$this->errormsg = 'Fehler beim Auslesen der Sequence';
pg_query($this->conn, 'ROLLBACK');
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Auslesen der Sequence';
pg_query($this->conn, 'ROLLBACK');
return false;
}
}
else
{
return true;
}
}
else
{
@@ -161,9 +210,84 @@ class vorschlag
}
}
function getVorschlag($frage_id)
/**
* Pueft die Daten vor dem Speichern
*
* @return true wenn ok, false wenn Fehler
*/
function validate_vorschlagsprache()
{
$qry = "SELECT * FROM testtool.tbl_vorschlag WHERE frage_id='".addslashes($frage_id)."' ORDER BY nummer";
return true;
}
/**
* Speichert einen Eintrag in tbl_vorschlag_sprache
*
* @return true wenn ok, false wenn Fehler
*/
function save_vorschlagsprache()
{
//Variablen auf Gueltigkeit pruefen
if(!$this->validate_vorschlagsprache())
return false;
$qry = "SELECT * FROM testtool.tbl_vorschlag_sprache
WHERE vorschlag_id='".addslashes($this->vorschlag_id)."' AND
sprache='".addslashes($this->sprache)."'";
if($result = pg_query($this->conn, $qry))
{
if(pg_num_rows($result)>0)
$this->new=false;
else
$this->new=true;
}
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
{
$qry = 'INSERT INTO testtool.tbl_vorschlag_sprache (vorschlag_id, sprache, text, bild, audio,
insertamum, insertvon, updateamum, updatevon) VALUES('.
$this->addslashes($this->vorschlag_id).','.
$this->addslashes($this->sprache).','.
$this->addslashes($this->text).','.
$this->addslashes($this->bild).','.
$this->addslashes($this->audio).','.
$this->addslashes($this->insertamum).','.
$this->addslashes($this->insertvon).','.
$this->addslashes($this->updateamum).','.
$this->addslashes($this->updatevon).');';
}
else
{
$qry = 'UPDATE testtool.tbl_vorschlag_sprache SET'.
' text='.$this->addslashes($this->text).',';
if($this->bild!='')
$qry.=' bild='.$this->addslashes($this->bild).',';
if($this->audio!='')
$qry.=' audio='.$this->addslashes($this->audio).',';
$qry.= ' updateamum='.$this->addslashes($this->updateamum).','.
' updatevon='.$this->addslashes($this->updatevon).
" WHERE vorschlag_id='".addslashes($this->vorschlag_id)."' AND sprache='".addslashes($this->sprache)."';";
}
if($result = pg_query($this->conn, $qry))
{
return true;
}
else
{
$this->errormsg = 'Fehler beim Speichern der Daten';
return false;
}
}
function getVorschlag($frage_id, $sprache, $random)
{
$qry = "SELECT * FROM testtool.tbl_vorschlag WHERE frage_id='".addslashes($frage_id)."'";
if($random)
$qry.=" ORDER BY random()";
else
$qry.=" ORDER BY nummer";
if($result = pg_query($this->conn, $qry))
{
@@ -173,9 +297,19 @@ class vorschlag
$vs->vorschlag_id = $row->vorschlag_id;
$vs->frage_id = $row->frage_id;
$vs->nummer = $row->nummer;
$vs->antwort = $row->antwort;
$vs->text = $row->text;
$vs->bild = $row->bild;
$vs->punkte = $row->punkte;
$qry = "SELECT * FROM testtool.tbl_vorschlag_sprache
WHERE vorschlag_id='".addslashes($row->vorschlag_id)."' AND sprache='".addslashes($sprache)."'";
if($result_sprache = pg_query($this->conn, $qry))
{
if($row_sprache = pg_fetch_object($result_sprache))
{
$vs->text = $row_sprache->text;
$vs->bild = $row_sprache->bild;
$vs->audio = $row_sprache->audio;
}
}
$this->result[] = $vs;
@@ -188,6 +322,7 @@ class vorschlag
return false;
}
}
function delete($vorschlag_id)
{
$qry = "DELETE FROM testtool.tbl_vorschlag WHERE vorschlag_id='".addslashes($vorschlag_id)."'";