- Removed CI Inheritance from Prestudent because it breaks the person inheritance

- Added function to parse Language Arrays to db_extras
This commit is contained in:
oesi
2016-07-05 16:28:35 +02:00
parent c85a406ec6
commit 65765bceb1
2 changed files with 91 additions and 109 deletions
+44 -16
View File
@@ -33,16 +33,16 @@ trait db_extra
{
if(is_null($i))
return pg_fetch_object($this->db_result);
else
else
return pg_fetch_object($this->db_result, $i);
}
else
else
{
if(is_null($i))
return pg_fetch_object($result);
else
else
return pg_fetch_object($result, $i);
}
}
}
public function db_add_param($var, $type=FHC_STRING, $nullable=true)
@@ -57,7 +57,7 @@ trait db_extra
switch($type)
{
case FHC_INTEGER:
case FHC_INTEGER:
$var = $this->db_escape($var);
if(!is_numeric($var) && $var!=='')
die('Invalid Integer Parameter detected:'.$var);
@@ -76,14 +76,14 @@ trait db_extra
break;
case FHC_STRING:
default:
default:
$var = $this->db_escape($var);
$var = $this->db_null_value($var);
break;
}
return $var;
return $var;
}
public function db_escape($var)
{
return pg_escape_string($var);
@@ -94,14 +94,14 @@ trait db_extra
if($qoute)
return ($var!==''?$this->db_qoute($var):'null');
else
return ($var!==''?$var:'null');
return ($var!==''?$var:'null');
}
public function db_qoute($var)
{
return "'".$var."'";
}
public function db_parse_bool($var)
{
if($var=='t')
@@ -113,7 +113,7 @@ trait db_extra
else
die('Invalid DB Boolean. Wrong DB-Engine?');
}
/**
* Bereitet ein Array von Elementen auf, damit es in der IN-Klausel eines
* Select Befehls verwendet werden kann.
@@ -129,7 +129,7 @@ trait db_extra
}
return $string;
}
public function db_num_fields($result=null)
{
if(is_null($result))
@@ -137,12 +137,12 @@ trait db_extra
else
return pg_num_fields($result);
}
public function convert_html_chars($value)
{
return htmlspecialchars($value);
}
/**
* Liefert den Feldnamen mit index i
*/
@@ -153,9 +153,37 @@ trait db_extra
else
return pg_field_name($result, $i);
}
public function db_last_error()
{
return pg_last_error();
}
/**
* Erstellt aus einem DB Array ein PHP Array
* @param $var DB Result Array Spalte
* @return php array
*/
public function db_parse_lang_array($var)
{
if ($var == '')
return;
preg_match_all('/(?<=^\{|,)(([^,"{]*)|\s*"((?:[^"\\\\]|\\\\(?:.|[0-9]+|x[0-9a-f]+))*)"\s*)(,|(?<!^\{)(?=\}$))/i', $var, $matches, PREG_SET_ORDER);
$values = array();
$sprache = new sprache();
$sprache->loadIndexArray();
$sprache = new sprache();
$sprache->getAll(true);
$languages = $sprache->getAllIndexesSorted();
foreach ($matches as $mk => $match)
{
$values[$languages[$mk+1]] = $match[3] != '' ? stripcslashes($match[3]) : (strtolower($match[2]) == 'null' ? null : $match[2]);
}
return $values;
}
}
+47 -93
View File
@@ -19,19 +19,20 @@
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
require_once(dirname(__FILE__).'/datum.class.php');
require_once(dirname(__FILE__).'/person.class.php');
require_once(dirname(__FILE__).'/log.class.php');
// CI
require_once(dirname(__FILE__).'/../ci_hack.php');
require_once(dirname(__FILE__).'/../application/models/crm/Prestudent_model.php');
require_once(dirname(__FILE__).'/phrasen.class.php');
require_once(dirname(__FILE__).'/globals.inc.php');
require_once(dirname(__FILE__).'/sprache.class.php');
class prestudent extends Prestudent_model
$sprache = getSprache();
$lang = new sprache();
$lang->load($sprache);
$p = new phrasen($sprache);
class prestudent extends person
{
use db_extra; //CI Hack
public $errormsg; // string
//Tabellenspalten
public $prestudent_id; // varchar(16)
public $aufmerksamdurch_kurzbz;
@@ -105,22 +106,22 @@ class prestudent extends Prestudent_model
* Laedt Prestudent mit der uebergebenen ID
* @param $prestudent_id ID des Prestudenten der geladen werden soll
*/
public function load($prestudent_id = null)
public function load($prestudent_id=null)
{
if (!is_numeric($prestudent_id))
if(!is_numeric($prestudent_id))
{
$this->errormsg = 'ID ist ungueltig';
return false;
}
$result = parent::load($prestudent_id);
$qry = 'SELECT * '
. 'FROM public.tbl_prestudent '
. 'WHERE prestudent_id = '.$this->db_add_param($prestudent_id, FHC_INTEGER);
if (is_object($result) && $result->error == EXIT_SUCCESS && is_array($result->retval))
if($this->db_query($qry))
{
if (count($result->retval) > 0)
if($row = $this->db_fetch_object())
{
$row = $result->retval[0];
$this->prestudent_id = $row->prestudent_id;
$this->aufmerksamdurch_kurzbz = $row->aufmerksamdurch_kurzbz;
$this->studiengang_kz = $row->studiengang_kz;
@@ -155,8 +156,10 @@ class prestudent extends Prestudent_model
$this->zgvdoktordatum = $row->zgvdoktordatum;
$this->zgvdoktornation = $row->zgvdoktornation;
$person = new person();
return $person->load($row->person_id);
if(!person::load($row->person_id))
return false;
else
return true;
}
else
{
@@ -176,7 +179,7 @@ class prestudent extends Prestudent_model
* auf Gueltigkeit.
* @return true wenn ok, false im Fehlerfall
*/
protected function validate()
public function validate()
{
if($this->punkte>9999.9999)
{
@@ -331,7 +334,7 @@ class prestudent extends Prestudent_model
return false;
}
}
/**
* Falls ZGV vorhanden, setze Ausstellungsstaat (für BIS-Meldung)
* auf Nation der höchsten angegebenen ZGV
@@ -779,12 +782,14 @@ class prestudent extends Prestudent_model
*/
public function save_rolle()
{
global $p;
if($this->new)
{
//pruefen ob die Rolle schon vorhanden ist
if($this->load_rolle($this->prestudent_id, $this->status_kurzbz, $this->studiensemester_kurzbz, $this->ausbildungssemester))
{
$this->errormsg = 'Diese Rolle existiert bereits';
//$this->errormsg = 'Diese Rolle existiert bereits';
$this->errormsg = $p->t('errors/rolleExistiertBereits');
return false;
}
@@ -821,7 +826,8 @@ class prestudent extends Prestudent_model
{
if($this->load_rolle($this->prestudent_id, $this->status_kurzbz, $this->studiensemester_kurzbz, $this->ausbildungssemester))
{
$this->errormsg = 'Diese Rolle existiert bereits';
//$this->errormsg = 'Diese Rolle existiert bereits';
$this->errormsg = $p->t('errors/rolleExistiertBereits');
return false;
}
}
@@ -971,22 +977,33 @@ class prestudent extends Prestudent_model
* @param $studiensemester_kurzbz
* @return boolean
*/
public function getLastStatus($prestudent_id, $studiensemester_kurzbz = '', $status_kurzbz = '')
public function getLastStatus($prestudent_id, $studiensemester_kurzbz='', $status_kurzbz = '')
{
if ($prestudent_id == '' || !is_numeric($prestudent_id))
if($prestudent_id=='' || !is_numeric($prestudent_id))
{
$this->errormsg = 'Prestudent_id ist ungueltig';
return false;
}
$result = parent::getLastStatus($prestudent_id, $studiensemester_kurzbz, $status_kurzbz);
if (is_object($result) && $result->error != EXIT_SUCCESS && is_array($result->retval))
$qry = "SELECT tbl_prestudentstatus.*, bezeichnung AS studienplan_bezeichnung,
tbl_status.bezeichnung_mehrsprachig
FROM public.tbl_prestudentstatus
LEFT JOIN lehre.tbl_studienplan USING (studienplan_id)
JOIN public.tbl_status USING (status_kurzbz)
WHERE tbl_status.status_kurzbz = tbl_prestudentstatus.status_kurzbz
AND prestudent_id=".$this->db_add_param($prestudent_id, FHC_INTEGER);
if($studiensemester_kurzbz!='')
$qry.=" AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
if($status_kurzbz !='')
$qry.= " AND status_kurzbz =".$this->db_add_param($status_kurzbz);
$qry.=" ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1";
if($this->db_query($qry))
{
if (count($result->retval) > 0)
if($row = $this->db_fetch_object())
{
$row = $result->retval[0];
$this->prestudent_id = $row->prestudent_id;
$this->status_kurzbz = $row->status_kurzbz;
$this->status_mehrsprachig = $this->db_parse_lang_array($row->bezeichnung_mehrsprachig);
@@ -1716,67 +1733,4 @@ class prestudent extends Prestudent_model
return false;
}
}
/**
* Laedt alle Studenten eines Studienplans und eines Studiensemesters
* @param $studienplan_id
* @param $studiensemester_kurzbz
* @param $studiengang_kz
* @return array mit allen Prestudenten, welche sich für den angegebenen Studienplan im angegebenen Semester beworben haben
*/
public function getAllStudentenFromStudienplanAndStudsem($studienplan_id, $studiensemester_kurzbz, $studiengang_kz)
{
if(!is_numeric($studienplan_id))
{
$this->errormsg = 'studienplan_id ist ungueltig';
return false;
}
if(!$studiensemester_kurzbz || $studiensemester_kurzbz == "")
{
$this->errormsg = 'studiensemester_kurzbz ist ungueltig';
return false;
}
$qry = "SELECT DISTINCT prestudent_id, vorname, nachname, gebdatum, rt_gesamtpunkte, tbl_prestudent.studiengang_kz, bis.tbl_zgvgruppe.bezeichnung, get_rolle_prestudent(prestudent_id, null) as laststatus
FROM
public.tbl_prestudent
JOIN public.tbl_person USING(person_id)
LEFT JOIN bis.tbl_zgvgruppe_zuordnung USING(zgv_code)
LEFT JOIN bis.tbl_zgvgruppe USING(gruppe_kurzbz)
WHERE
tbl_prestudent.studiengang_kz=". $this->db_add_param($studiengang_kz)."
AND EXISTS(
SELECT
1
FROM
public.tbl_prestudentstatus
WHERE
tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id
AND studiensemester_kurzbz=". $this->db_add_param($studiensemester_kurzbz)."
AND status_kurzbz='Bewerber'
AND (
studienplan_id=". $this->db_add_param($studienplan_id)."
OR
(anmerkung like '%' || (SELECT orgform_kurzbz || '_' || sprache FROM lehre.tbl_studienplan WHERE studienplan_id=". $this->db_add_param($studienplan_id).") || '%')
)
);";
if($result = $this->db_query($qry))
{
$ret = array();
while($row = $this->db_fetch_object($result))
$ret[] = $row;
return $ret;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}