mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 16:44:28 +00:00
Neues Testtool - Run Script system/testtool_aktualisierung.php
This commit is contained in:
+54
-32
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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
@@ -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)."'";
|
||||
|
||||
Reference in New Issue
Block a user