mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
767 lines
21 KiB
PHP
767 lines
21 KiB
PHP
<?php
|
|
/* Copyright (C) 2007 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 <christian.paminger@technikum-wien.at>,
|
|
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>,
|
|
* Rudolf Hangl <rudolf.hangl@technikum-wien.at> and
|
|
* Gerald Simane-Sequens <gerald.simane-sequens@technikum-wien.at>
|
|
*/
|
|
/**
|
|
* 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 $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;
|
|
var $errormsg;
|
|
var $new;
|
|
|
|
// *************************************************************************
|
|
// * Konstruktor - Uebergibt die Connection und laedt optional eine frage
|
|
// * @param $conn Datenbank-Connection
|
|
// * $frage_id Frage die geladen werden soll (default=null)
|
|
// * $unicode Gibt an ob die Daten mit UNICODE Codierung
|
|
// * oder LATIN9 Codierung verarbeitet werden sollen
|
|
// *************************************************************************
|
|
public function frage($conn, $frage_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($frage_id != null)
|
|
$this->load($frage_id);
|
|
}
|
|
|
|
// ***********************************************************
|
|
// * Laedt Frage mit der uebergebenen ID
|
|
// * @param $frage_id ID der Frage die geladen werden soll
|
|
// ***********************************************************
|
|
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))
|
|
{
|
|
if($row = pg_fetch_object($result))
|
|
{
|
|
$this->frage_id = $row->frage_id;
|
|
$this->gebiet_id = $row->gebiet_id;
|
|
$this->nummer = $row->nummer;
|
|
$this->demo = ($row->demo=='t'?true:false);
|
|
$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
|
|
{
|
|
$this->errormsg = "Kein Eintrag gefunden fuer $frage_id";
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$this->errormsg = "Fehler beim Laden: $qry";
|
|
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()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
// ******************************************************************
|
|
// * Speichert die Benutzerdaten in die Datenbank
|
|
// * Wenn $new auf true gesetzt ist wird ein neuer Datensatz angelegt
|
|
// * ansonsten der Datensatz mit $uid upgedated
|
|
// * @return true wenn erfolgreich, false im Fehlerfall
|
|
// ******************************************************************
|
|
public function save()
|
|
{
|
|
//Variablen auf Gueltigkeit pruefen
|
|
if(!$this->validate())
|
|
return false;
|
|
|
|
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
|
|
{
|
|
$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'.
|
|
' gebiet_id='.$this->addslashes($this->gebiet_id).','.
|
|
' kategorie_kurzbz='.$this->addslashes($this->kategorie_kurzbz).','.
|
|
' level='.$this->addslashes($this->level).','.
|
|
' nummer='.$this->addslashes($this->nummer).','.
|
|
' demo='.($this->demo?'true':'false').','.
|
|
' 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;
|
|
}
|
|
else
|
|
{
|
|
$this->errormsg = 'Fehler beim Speichern der Frage:'.$qry;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function getFragen($gebiet_id, $nummer)
|
|
{
|
|
$qry = "SELECT * FROM testtool.tbl_frage
|
|
WHERE gebiet_id='".addslashes($gebiet_id)."' AND nummer='".addslashes($nummer)."'";
|
|
|
|
if($result = pg_query($this->conn, $qry))
|
|
{
|
|
while($row = pg_fetch_object($result))
|
|
{
|
|
$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';
|
|
return 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)
|
|
{
|
|
if($demo)
|
|
{
|
|
$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";
|
|
}
|
|
|
|
if($result = pg_query($this->conn, $qry))
|
|
{
|
|
if($row = pg_fetch_object($result))
|
|
return $row->frage_id;
|
|
else
|
|
return false;
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
?>
|