diff --git a/application/controllers/api/v1/person/Person.php b/application/controllers/api/v1/person/Person.php index d18c7afb6..47f63e498 100644 --- a/application/controllers/api/v1/person/Person.php +++ b/application/controllers/api/v1/person/Person.php @@ -155,7 +155,6 @@ class Person extends REST_Controller 'success' => true, 'message' => 'Interested student saved.' ]; - $payload['data'] = $result; } else { diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index aeffb722f..9c03e4921 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -117,19 +117,26 @@ class Person_model extends DB_Model */ public function savePerson($person = NULL) { + $result = FALSE; + // Checks if the operation is permitted by the API caller // All the code should be put inside this if statement - if($this->_checkPermissions() && isset($person)) + if($this->_checkPermissions()) { - if(isset($person['person_id'])) + if($this->_validate($person)) { - return $this->_updatePerson($person); - } - else - { - return $this->_insertPerson($person); + if(isset($person['person_id'])) + { + $result = $this->_updatePerson($person); + } + else + { + $result = $this->_insertPerson($person); + } } } + + return $result; } /** @@ -137,25 +144,87 @@ class Person_model extends DB_Model */ private function _insertPerson($person) { - $data = array( - "vorname" => $person["vorname"], - "nachname" => $person["nachname"], - "gebdatum" => $person["gebdatum"], - "aktiv" => TRUE, - "zugangscode" => $person["zugangscode"], - "zugangscode_timestamp" => date('Y-m-d H:i:s'), - "insertamum" => date('Y-m-d H:i:s'), - "insertvon" => $person["insertvon"], - ); - - if($this->db->insert("public.tbl_person", $data)) + $this->db->trans_begin(); // Start DB transaction + + $insertQuery = "INSERT INTO public.tbl_person ( + sprache, + anrede, + titelpost, + titelpre, + nachname, + vorname, + vornamen, + gebdatum, + gebort, + gebzeit, + foto, + anmerkung, + homepage, + svnr, + ersatzkennzeichen, + familienstand, + anzahlkinder, + aktiv, + insertamum, + insertvon, + updateamum, + updatevon, + geschlecht, + geburtsnation, + staatsbuergerschaft, + kurzbeschreibung, + zugangscode, + foto_sperre, + matr_nr + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + + $sqlParametersArray = array($person['sprache'], + $person['anrede'], + $person['titelpost'], + $person['titelpre'], + $person['nachname'], + $person['vorname'], + $person['vornamen'], + $person['gebdatum'], + $person['gebort'], + $person['gebzeit'], + $person['foto'], + $person['anmerkung'], + $person['homepage'], + $person['svnr'], + $person['ersatzkennzeichen'], + $person['familienstand'], + $person['anzahlkinder'], + $person['aktiv'], + "now()", + $person['insertvon'], + "now()", + $person['updatevon'], + $person['geschlecht'], + $person['geburtsnation'], + $person['staatsbuergerschaft'], + $person['kurzbeschreibung'], + $person['zugangscode'], + $person['foto_sperre'], + $person['matr_nr']); + + $result = $this->db->query($insertQuery, $sqlParametersArray); + + // Check DB transaction result + if($this->db->trans_status() === FALSE) { - return $this->db->insert_id(); + $this->db->trans_rollback(); + $result = FALSE; } else { - return FALSE; + $this->db->trans_commit(); + $result = TRUE; } + + return $result; } /** @@ -163,16 +232,518 @@ class Person_model extends DB_Model */ private function _updatePerson($person) { - $this->db->set("zugangscode", $person["zugangscode"]); - $this->db->where("person_id", $person["person_id"]); - if($this->db->update("public.tbl_person")) + $this->db->trans_begin(); // Start DB transaction + + $updateQuery = "UPDATE public.tbl_person SET + sprache = ?, + anrede = ?, + titelpost = ?, + titelpre = ?, + nachname = ?, + vorname = ?, + vornamen = ?, + gebdatum = ?, + gebort = ?, + gebzeit = ?, + foto = ?, + anmerkung = ?, + homepage = ?, + svnr = ?, + ersatzkennzeichen = ?, + familienstand = ?, + anzahlkinder = ?, + aktiv = ?, + updateamum = ?, + updatevon = ?, + geschlecht = ?, + geburtsnation = ?, + staatsbuergerschaft = ?, + kurzbeschreibung = ?, + foto_sperre = ?, + zugangscode = ?, + matr_nr = ? + WHERE person_id = ?"; + + $sqlParametersArray = array($person['sprache'], + $person['anrede'], + $person['titelpost'], + $person['titelpre'], + $person['nachname'], + $person['vorname'], + $person['vornamen'], + $person['gebdatum'], + $person['gebort'], + $person['gebzeit'], + $person['foto'], + $person['anmerkung'], + $person['homepage'], + $person['svnr'], + $person['ersatzkennzeichen'], + $person['familienstand'], + $person['anzahlkinder'], + $person['aktiv'], + "now()", + $person['updatevon'], + $person['geschlecht'], + $person['geburtsnation'], + $person['staatsbuergerschaft'], + $person['kurzbeschreibung'], + $person['foto_sperre'], + $person['zugangscode'], + $person['matr_nr'], + $person['person_id']); + + $result = $this->db->query($updateQuery, $sqlParametersArray); + + // Check DB transaction result + if($this->db->trans_status() === FALSE) { - return TRUE; + $this->db->trans_rollback(); + $result = FALSE; } else + { + $this->db->trans_commit(); + $result = TRUE; + } + + return $result; + } + + /** + * + */ + public function saveInterestedStudent($interestedStudent = NULL) + { + // Checks if the operation is permitted by the API caller + // All the code should be put inside this if statement + if($this->_checkPermissions()) + { + return $this->_saveInterestedStudent($interestedStudent); + } + } + + /** + * Method saveInterestedStudent + * + * @return bool true when everything goes right, otherwise false + */ + private function _saveInterestedStudent($interestedStudent = NULL) + { + if(!isset($interestedStudent)) { return FALSE; } + + if($interestedStudent['zgvmas_code'] && $interestedStudent['zgvmanation']) + { + $interestedStudent['ausstellungsstaat'] = $interestedStudent['zgvmanation']; + } + elseif($interestedStudent['zgv_code'] && $interestedStudent['zgvnation']) + { + $interestedStudent['ausstellungsstaat'] = $interestedStudent['zgvnation']; + } + + //Variablen auf Gueltigkeit pruefen + if(isset($interestedStudent['prestudent_id']) && $interestedStudent['punkte'] > 9999.9999) + { + //$this->errormsg = 'Reihungstestgesamtpunkte should be no bigger than 9999.9999'; + return FALSE; + } + if($interestedStudent['rt_punkte1'] > 9999.9999) + { + //$this->errormsg = 'Reihungstestpunkte1 should be no bigger than 9999.9999'; + return FALSE; + } + if($interestedStudent['rt_punkte2'] > 9999.9999) + { + //$this->errormsg = 'Reihungstestpunkte2 should be no bigger than 9999.9999'; + return FALSE; + } + if($interestedStudent['rt_punkte3'] > 9999.9999) + { + //$this->errormsg = 'Reihungstestpunkte3 should be no bigger than 9999.9999'; + return FALSE; + } + + $this->db->trans_begin(); // Start DB transaction + + // If prestudent_id is NOT set it's an insert + if(!isset($interestedStudent['prestudent_id'])) + { + $insertQuery = "INSERT INTO public.tbl_prestudent ( + aufmerksamdurch_kurzbz, + person_id, + studiengang_kz, + berufstaetigkeit_code, + ausbildungcode, + zgv_code, + zgvort, + zgvdatum, + zgvnation, + zgvmas_code, + zgvmaort, + zgvmadatum, + zgvmanation, + aufnahmeschluessel, + facheinschlberuf, + reihungstest_id, + anmeldungreihungstest, + reihungstestangetreten, + rt_gesamtpunkte, + rt_punkte1, + rt_punkte2, + rt_punkte3, + bismelden, + insertamum, + insertvon, + updateamum, + updatevon, + anmerkung, + dual, + ausstellungsstaat, + mentor + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + + $sqlParametersArray = array($interestedStudent['aufmerksamdurch_kurzbz'], + $interestedStudent['person_id'], + $interestedStudent['studiengang_kz'], + $interestedStudent['berufstaetigkeit_code'], + $interestedStudent['ausbildungcode'], + $interestedStudent['zgv_code'], + $interestedStudent['zgvort'], + $interestedStudent['zgvdatum'], + $interestedStudent['zgvnation'], + $interestedStudent['zgvmas_code'], + $interestedStudent['zgvmaort'], + $interestedStudent['zgvmadatum'], + $interestedStudent['zgvmanation'], + $interestedStudent['aufnahmeschluessel'], + $interestedStudent['facheinschlberuf'], + $interestedStudent['reihungstest_id'], + $interestedStudent['anmeldungreihungstest'], + $interestedStudent['reihungstestangetreten'], + $interestedStudent['rt_gesamtpunkte'], + $interestedStudent['rt_punkte1'], + $interestedStudent['rt_punkte2'], + $interestedStudent['rt_punkte3'], + $interestedStudent['bismelden'], + $interestedStudent['insertamum'], + $interestedStudent['insertvon'], + $interestedStudent['updateamum'], + $interestedStudent['updatevon'], + $interestedStudent['anmerkung'], + $interestedStudent['dual'], + $interestedStudent['ausstellungsstaat'], + $interestedStudent['mentor']); + + $result = $this->db->query($insertQuery, $sqlParametersArray); + } + // otherwise it's an update + else + { + $updateQuery = "UPDATE public.tbl_prestudent SET + aufmerksamdurch_kurzbz = ?, + person_id = ?, + studiengang_kz = ?, + berufstaetigkeit_code = ?, + ausbildungcode = ?, + zgv_code = ?, + zgvort = ?, + zgvdatum = ?, + zgvnation = ?, + zgvmas_code = ?, + zgvmaort = ?, + zgvmadatum = ?, + zgvmanation = ?, + aufnahmeschluessel = ?, + facheinschlberuf = ?, + reihungstest_id = ?, + anmeldungreihungstest = ?, + reihungstestangetreten = ?, + rt_gesamtpunkte = ?, + rt_punkte1 = ?, + rt_punkte2 = ?, + rt_punkte3 = ?, + bismelden = ?, + updateamum = ?, + updatevon = ?, + anmerkung = ?, + mentor = ?, + dual = ?, + ausstellungsstaat = ? + WHERE prestudent_id = ?"; + + $sqlParametersArray = array($interestedStudent['aufmerksamdurch_kurzbz'], + $interestedStudent['person_id'], + $interestedStudent['studiengang_kz'], + $interestedStudent['berufstaetigkeit_code'], + $interestedStudent['ausbildungcode'], + $interestedStudent['zgv_code'], + $interestedStudent['zgvort'], + $interestedStudent['zgvdatum'], + $interestedStudent['zgvnation'], + $interestedStudent['zgvmas_code'], + $interestedStudent['zgvmaort'], + $interestedStudent['zgvmadatum'], + $interestedStudent['zgvmanation'], + $interestedStudent['aufnahmeschluessel'], + $interestedStudent['facheinschlberuf'], + $interestedStudent['reihungstest_id'], + $interestedStudent['anmeldungreihungstest'], + $interestedStudent['reihungstestangetreten'], + $interestedStudent['punkte'], + $interestedStudent['rt_punkte1'], + $interestedStudent['rt_punkte2'], + $interestedStudent['rt_punkte3'], + $interestedStudent['bismelden'], + $interestedStudent['updateamum'], + $interestedStudent['updatevon'], + $interestedStudent['anmerkung'], + $interestedStudent['mentor'], + $interestedStudent['dual'], + $interestedStudent['ausstellungsstaat'], + $interestedStudent['prestudent_id']); + + $result = $this->db->query($updateQuery, $sqlParametersArray); + } + + // Check DB transaction result + if($this->db->trans_status() === FALSE) + { + $this->db->trans_rollback(); + $result = FALSE; + } + else + { + $this->db->trans_commit(); + $result = TRUE; + } + + return $result; + } + + private function _validate($person = NULL) + { + if(!isset($person)) + { + return false; + } + + $person['nachname'] = trim($person['nachname']); + $person['vorname'] = trim($person['vorname']); + $person['vornamen'] = trim($person['vornamen']); + $person['anrede'] = trim($person['anrede']); + $person['titelpost'] = trim($person['titelpost']); + $person['titelpre'] = trim($person['titelpre']); + + if(mb_strlen($person['sprache']) > 16) + { + //$this->errormsg = 'Sprache darf nicht laenger als 16 Zeichen sein'; + return false; + } + if(mb_strlen($person['anrede']) > 16) + { + //$this->errormsg = 'Anrede darf nicht laenger als 16 Zeichen sein'; + return false; + } + if(mb_strlen($person['titelpost']) > 32) + { + //$this->errormsg = 'Titelpost darf nicht laenger als 32 Zeichen sein'; + return false; + } + if(mb_strlen($person['titelpre']) > 64) + { + //$this->errormsg = 'Titelpre darf nicht laenger als 64 Zeichen sein'; + return false; + } + if(mb_strlen($person['nachname']) > 64) + { + //$this->errormsg = 'Nachname darf nicht laenger als 64 Zeichen sein'; + return false; + } + if($person['nachname'] == '' || is_null($person['nachname'])) + { + //$this->errormsg = 'Nachname muss eingegeben werden'; + return false; + } + + if(mb_strlen($person['vorname']) > 32) + { + //$this->errormsg = 'Vorname darf nicht laenger als 32 Zeichen sein'; + return false; + } + if(mb_strlen($person['vornamen']) > 128) + { + //$this->errormsg = 'Vornamen darf nicht laenger als 128 Zeichen sein'; + return false; + } + //ToDo Gebdatum pruefen -> laut bis muss student aelter als 10 Jahre sein + /* if (strlen($person['gebdatum) == 0 || is_null($person['gebdatum)) + { + //$this->errormsg = "Geburtsdatum muss eingegeben werden\n"; + return false; + } */ + if(mb_strlen($person['gebort']) > 128) + { + //$this->errormsg = 'Geburtsort darf nicht laenger als 128 Zeichen sein'; + return false; + } + + if(mb_strlen($person['homepage']) > 256) + { + //$this->errormsg = 'Homepage darf nicht laenger als 256 Zeichen sein'; + return false; + } + if(mb_strlen($person['svnr']) > 16) + { + //$this->errormsg = 'SVNR darf nicht laenger als 16 Zeichen sein'; + return false; + } + + if(mb_strlen($person['matr_nr']) > 32) + { + //$this->errormsg = 'Matrikelnummer darf nicht laenger als 32 Zeichen sein'; + return false; + } + + if($person['svnr'] != '' && mb_strlen($person['svnr']) != 16 && mb_strlen($person['svnr']) != 10) + { + //$this->errormsg = 'SVNR muss 10 oder 16 Zeichen lang sein'; + return false; + } + + if($person['svnr'] != '' && mb_strlen($person['svnr']) == 10) + { + //SVNR mit Pruefziffer pruefen + //Die 4. Stelle in der SVNR ist die Pruefziffer + //(Summe von (gewichtung[i]*svnr[i])) modulo 11 ergibt diese Pruefziffer + //Falls nicht, ist die SVNR ungueltig + $gewichtung = array(3, 7, 9, 0, 5, 8, 4, 2, 1, 6); + $erg = 0; + //Quersumme bilden + for($i = 0; $i < 10; $i++) + { + $erg += $gewichtung[$i] * $person['svnr']{$i}; + } + + if($person['svnr']{3} != ($erg % 11)) //Vergleichen der Pruefziffer mit Quersumme Modulo 11 + { + //$this->errormsg = 'SVNR ist ungueltig'; + return false; + } + } + + if($person['svnr'] != '') + { + //Pruefen ob bereits ein Eintrag mit dieser SVNR vorhanden ist + $qry = "SELECT person_id FROM public.tbl_person WHERE svnr=" . $person['svnr']; + if(db_query($qry)) + { + if($row = db_fetch_object()) + { + if($row->person_id != $person['person_id']) + { + //$this->errormsg = 'Es existiert bereits eine Person mit dieser SVNR! Daten wurden NICHT gepeichert.'; + return false; + } + } + } + } + + if(mb_strlen($person['ersatzkennzeichen']) > 10) + { + //$this->errormsg = 'Ersatzkennzeichen darf nicht laenger als 10 Zeichen sein'; + return false; + } + if(mb_strlen($person['familienstand']) > 1) + { + //$this->errormsg = 'Familienstand ist ungueltig'; + return false; + } + if($person['anzahlkinder'] != '' && !is_numeric($person['anzahlkinder'])) + { + //$this->errormsg = 'Anzahl der Kinder ist ungueltig'; + return false; + } + if($person['aktiv'] != "t" && $person['aktiv'] != "f") + { + //$this->errormsg = 'Aktiv ist ungueltig'; + return false; + } + if(!isset($person['person_id']) && mb_strlen($person['insertvon']) > 32) + { + //$this->errormsg = 'Insertvon darf nicht laenger als 32 Zeichen sein'; + return false; + } + if(mb_strlen($person['updatevon']) > 32) + { + //$this->errormsg = 'Updatevon darf nicht laenger als 32 Zeichen sein'; + return false; + } + /*if($person['ext_id'] != '' && !is_numeric($person['ext_id'])) + { + //$this->errormsg = 'Ext_ID ist keine gueltige Zahl'; + return false; + }*/ + if(mb_strlen($person['geschlecht']) > 1) + { + //$this->errormsg = 'Geschlecht darf nicht laenger als 1 Zeichen sein'; + return false; + } + if(mb_strlen($person['geburtsnation']) > 3) + { + //$this->errormsg = 'Geburtsnation darf nicht laenger als 3 Zeichen sein'; + return false; + } + if(mb_strlen($person['staatsbuergerschaft']) > 3) + { + //$this->errormsg = 'Staatsbuergerschaft darf nicht laenger als 3 Zeichen sein'; + return false; + } + if($person['geschlecht'] != 'm' && $person['geschlecht'] != 'w' && $person['geschlecht'] != 'u') + { + //$this->errormsg = 'Geschlecht muss w, m oder u sein!'; + return false; + } + + //Pruefen ob das Geburtsdatum mit der SVNR uebereinstimmt. + if($person['svnr'] != '' && $person['gebdatum'] != '') + { + if(mb_ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", $person['gebdatum'], $regs)) + { + //$day = sprintf('%02s',$regs[1]); + //$month = sprintf('%02s',$regs[2]); + //$year = mb_substr($regs[3],2,2); + } + elseif(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})", $person['gebdatum'], $regs)) + { + //$day = sprintf('%02s',$regs[3]); + //$month = sprintf('%02s',$regs[2]); + //$year = mb_substr($regs[1],2,2); + } + else + { + //$this->errormsg = 'Format des Geburtsdatums ist ungueltig'; + return false; + } + + /* das muss nicht immer so sein + $day_svnr = mb_substr($person['svnr, 4, 2); + $month_svnr = mb_substr($person['svnr, 6, 2); + $year_svnr = mb_substr($person['svnr, 8, 2); + + if ($day_svnr!=$day || $month_svnr!=$month || $year_svnr!=$year) + { + //$this->errormsg = 'SVNR und Geburtsdatum passen nicht zusammen'; + return false; + } + */ + } + + return true; } /** @@ -191,7 +762,7 @@ class Person_model extends DB_Model return $query->result_object(); } } - + /** * */ @@ -243,44 +814,4 @@ class Person_model extends DB_Model ->where("p.zugangscode", $code); return $this->db->get()->result_array(); } - - /** - * - */ - public function saveInterestedStudent($interestedStudent = NULL) - { - // Checks if the operation is permitted by the API caller - // All the code should be put inside this if statement - if($this->_checkPermissions() && isset($interestedStudent)) - { - /* - $data = array( - "vorname" => $person["vorname"], - "nachname" => $person["nachname"], - "gebdatum" => $person["gebdatum"], - "aktiv" => TRUE, - "zugangscode" => $person["zugangscode"], - "zugangscode_timestamp" => date('Y-m-d H:i:s'), - "insertamum" => date('Y-m-d H:i:s'), - "insertvon" => $person["insertvon"], - ); - - if($this->db->insert("public.tbl_person", $data)) - { - return $this->db->insert_id(); - } - else - { - return FALSE; - }*/ - - //$prestudent = new prestudent(); - - error_log($interestedStudent['zgv_code']); - - /*$prestudent->zgv_code = $interestedStudent['zgv_code']; - - $prestudent->save();*/ - } - } } \ No newline at end of file diff --git a/cis/private/bildupload.php b/cis/private/bildupload.php index d27309a1b..cfc14f07e 100644 --- a/cis/private/bildupload.php +++ b/cis/private/bildupload.php @@ -24,7 +24,7 @@ // Oberflaeche zum Upload von Bildern -session_cache_limiter('none'); //muss gesetzt werden damit der upload in chrome und das automatische updaten des profilbildes funktioniert +//session_cache_limiter('none'); //muss gesetzt werden damit der upload in chrome und das automatische updaten des profilbildes funktioniert require_once('../../config/cis.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/person.class.php'); diff --git a/include/prestudent.class.php b/include/prestudent.class.php index c832ced1e..697e87f53 100644 --- a/include/prestudent.class.php +++ b/include/prestudent.class.php @@ -331,7 +331,7 @@ class prestudent extends Person_model return false; } } - + /** * Falls ZGV vorhanden, setze Ausstellungsstaat (für BIS-Meldung) * auf Nation der höchsten angegebenen ZGV