Es kann nun konfiguriert werden ob bei der Punkteübernahme aus dem Reihungstest Punkte oder Prozentpunkte übernommen werden sollen

This commit is contained in:
oesi
2016-01-28 18:56:25 +01:00
parent 364c7b39d3
commit bf435a0896
4 changed files with 120 additions and 86 deletions
+58 -52
View File
@@ -15,7 +15,7 @@
* 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>,
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
@@ -30,12 +30,12 @@ class pruefling extends basis_db
public $registriert;
public $prestudent_id;
public $semester;
// ErgebnisArray
public $result=array();
public $num_rows=0;
public $new;
/**
* Konstruktor - Laedt optional einen pruefling
* @param $frage_id Frage die geladen werden soll (default=null)
@@ -47,7 +47,7 @@ class pruefling extends basis_db
if($pruefling_id != null)
$this->load($pruefling_id);
}
/**
* Laedt Pruefling mit der uebergebenen ID
* @param $pruefling_id ID der Frage die geladen werden soll
@@ -55,7 +55,7 @@ class pruefling extends basis_db
public function load($pruefling_id)
{
$qry = "SELECT * FROM testtool.tbl_pruefling WHERE pruefling_id=".$this->db_add_param($pruefling_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -68,21 +68,21 @@ class pruefling extends basis_db
$this->semester = $row->semester;
return true;
}
else
else
{
$this->errormsg = "Kein Eintrag gefunden fuer $pruefling_id";
return false;
}
}
}
else
else
{
$this->errormsg = "Fehler beim Laden";
return false;
}
}
}
/**
* Prueft die Variablen vor dem Speichern
* Prueft die Variablen vor dem Speichern
* auf Gueltigkeit.
* @return true wenn ok, false im Fehlerfall
*/
@@ -90,7 +90,7 @@ class pruefling extends basis_db
{
return true;
}
/**
* Speichert die Benutzerdaten in die Datenbank
* Wenn $new auf true gesetzt ist wird ein neuer Datensatz angelegt
@@ -102,7 +102,7 @@ class pruefling extends basis_db
//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_pruefling (studiengang_kz, idnachweis, registriert, prestudent_id, semester) VALUES('.
@@ -113,7 +113,7 @@ class pruefling extends basis_db
$this->db_add_param($this->semester).");";
}
else
{
{
$qry = 'UPDATE testtool.tbl_pruefling SET'.
' studiengang_kz='.$this->db_add_param($this->studiengang_kz, FHC_INTEGER).','.
' idnachweis='.$this->db_add_param($this->idnachweis).','.
@@ -122,7 +122,7 @@ class pruefling extends basis_db
' prestudent_id='.$this->db_add_param($this->prestudent_id, FHC_INTEGER).
" WHERE pruefling_id=".$this->db_add_param($this->pruefling_id, FHC_INTEGER, false).";";
}
if($this->db_query($qry))
{
if($this->new)
@@ -136,7 +136,7 @@ class pruefling extends basis_db
$this->db_query('COMMIT;');
return true;
}
else
else
{
$this->db_query('ROLLBACK;');
$this->errormsg = 'Fehler beim Lesen der Sequence';
@@ -150,19 +150,19 @@ class pruefling extends basis_db
return false;
}
}
else
else
{
return true;
}
}
else
{
else
{
$this->db_query('ROLLBACK');
$this->errormsg = 'Fehler beim Speichern der Frage';
return false;
}
}
/**
* Laedt einen Puefling anhand der Prestudent_id
*
@@ -172,7 +172,7 @@ class pruefling extends basis_db
public function getPruefling($prestudent_id)
{
$qry = "SELECT * FROM testtool.tbl_pruefling WHERE prestudent_id=".$this->db_add_param($prestudent_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -185,21 +185,21 @@ class pruefling extends basis_db
$this->semester = $row->semester;
return true;
}
else
else
{
$this->errormsg = "Kein Eintrag gefunden";
return false;
}
}
}
else
else
{
$this->errormsg = "Fehler beim Laden";
return false;
}
}
}
/**
* Ermittelt den aktuellen Level (schwierigkeitsgrad der Frage)
* Ermittelt den aktuellen Level (schwierigkeitsgrad der Frage)
* des Prueflings fuer das uebergebene Gebiet
*
* @param $pruefling_id
@@ -208,17 +208,17 @@ class pruefling extends basis_db
public function getPrueflingLevel($pruefling_id, $gebiet_id)
{
$gebiet = new gebiet($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
$qry = "SELECT max(level) as max, min(level) as min FROM testtool.tbl_frage
WHERE gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -226,24 +226,24 @@ class pruefling extends basis_db
$max_level = $row->max;
$min_level = $row->min;
}
else
else
{
$this->errormsg = 'unbekannter Fehler in getPrueflingLevel';
return false;
}
}
else
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)
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
@@ -251,7 +251,7 @@ class pruefling extends basis_db
tbl_pruefling_frage.pruefling_id=".$this->db_add_param($pruefling_id, FHC_INTEGER)." 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;
@@ -265,13 +265,13 @@ class pruefling extends basis_db
$anzahl_richtig++;
$anzahl_falsch=0;
}
else
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)
@@ -286,54 +286,60 @@ class pruefling extends basis_db
$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
else
{
$this->errormsg = 'Fehler bei einer Abfrage';
return false;
}
}
else
else
return -1;
}
/**
* Berechnet das Reihungstestergebnis fuer einen Prestudenten
*
* @param $prestudent_id
* @return Endpunkte des Reihungstests
*/
public function getReihungstestErgebnis($prestudent_id)
public function getReihungstestErgebnis($prestudent_id, $punkte=false)
{
$qry = "SELECT * FROM testtool.vw_auswertung
$qry = "SELECT * FROM testtool.vw_auswertung
WHERE prestudent_id=".$this->db_add_param($prestudent_id, FHC_INTEGER);
$ergebnis=0;
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
//wenn maxpunkte ueberschritten wurde -> 100%
if($row->punkte>=$row->maxpunkte)
{
$prozent=100;
$row->punkte = $row->maxpunkte;
}
else
$prozent = ($row->punkte/$row->maxpunkte)*100;
$ergebnis+=$prozent*$row->gewicht;
if($punkte)
$ergebnis +=$row->punkte;
else
$ergebnis+=$prozent*$row->gewicht;
}
return $ergebnis;
}
else
else
{
$this->errormsg = 'Fehler bei einer Abfrage';
return false;