From 03c6873b7008d2d5ace24ee0a9b31fca9555bca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 28 Feb 2019 07:13:02 +0100 Subject: [PATCH] =?UTF-8?q?Unterst=C3=BCtzung=20von=20Matrikelnummern=20zu?= =?UTF-8?q?r=20Semesterticket=20Schnittstelle=20hinzugef=C3=BCgt.=20Es=20w?= =?UTF-8?q?ird=20nun=20sowohl=20das=20Personenkenneichen=20als=20auch=20di?= =?UTF-8?q?e=20Matrikelnummer=20unterst=C3=BCtzt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/person.class.php | 29 +++ soap/semesterticket.soap.php | 485 +++++++++++++++++++---------------- 2 files changed, 287 insertions(+), 227 deletions(-) diff --git a/include/person.class.php b/include/person.class.php index 78642431d..b4f3f2676 100644 --- a/include/person.class.php +++ b/include/person.class.php @@ -994,4 +994,33 @@ class person extends basis_db return false; } } + + /** + * Laedt eine Person anhand der Matrikelnummer + * + * @param $matr_nr Matrikelnummer + * @return boolean true wenn ok, false im Fehlerfall. + */ + public function getPersonByMatrNr($matr_nr) + { + $qry = "SELECT person_id FROM public.tbl_person WHERE matr_nr=".$this->db_add_param($matr_nr); + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + return $this->load($row->person_id); + } + else + { + $this->errormsg = 'Person nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } } diff --git a/soap/semesterticket.soap.php b/soap/semesterticket.soap.php index 2783abfb2..78853a573 100644 --- a/soap/semesterticket.soap.php +++ b/soap/semesterticket.soap.php @@ -1,227 +1,258 @@ -. - */ - -require_once('../config/vilesci.config.inc.php'); -require_once('../include/student.class.php'); -require_once('../include/benutzer.class.php'); -require_once('../include/adresse.class.php'); -require_once('../include/person.class.php'); -require_once('../include/webservicelog.class.php'); - -ini_set("soap.wsdl_cache_enabled", "0"); - -$SOAPServer = new SoapServer(APP_ROOT."/soap/semesterticket.wsdl.php?".microtime(true)); -$SOAPServer->addFunction("verifyData"); -$SOAPServer->handle(); - -$fehler = ''; - - -/** - * - * Nimmt Anfrage entgegen und überprüft ob Student auch wirklich Student ist (anhand Matrikelnummer) - * @param $parameters - */ -function verifyData($parameters) -{ - global $fehler; - class foo{}; - - $obj = new foo(); - - if (!$db = new basis_db()) - die('Es konnte keine Verbindung zum Server aufgebaut werden.'); - - // Eintrag in der LogTabelle anlegen - $log = new webservicelog(); - $log->request_data = file_get_contents('php://input'); - $log->webservicetyp_kurzbz = 'wienerlinien'; - $log->request_id = $parameters->token; - $log->beschreibung = "Semesterticketanfrage"; - $log->save(true); - - if(!validateRequest($parameters)) - { - $obj->result = 'false'; - $obj->fehler = $fehler; - } - else - { - $student = new student(); - $student_uid = $student->getUidFromMatrikelnummer($parameters->Matrikelnummer); - - // überprüfe ob Benutzer aktiv ist - $benutzer = new benutzer(); - $benutzer->load($student_uid); - if(!$benutzer->bnaktiv) - { - $obj->result = 'false'; - $obj->fehler ='1'; - return $obj; - } - - // überprüfe vorname - if($benutzer->vorname != $parameters->Vorname) - { - // es wurde keine übereinstimmung gefunden - $obj->result = 'false'; - $obj->fehler = '6'; - return $obj; - } - - if($benutzer->nachname != $parameters->Name) - { - // es wurde keine übereinstimmung gefunden - $obj->result = 'false'; - $obj->fehler = '7'; - return $obj; - } - - // Überprüfe PLZ - $adresse = new adresse(); - $adresse->load_pers($benutzer->person_id); - - $foundAdr = false; - foreach($adresse->result as $adr) - { - if($adr->plz == $parameters->Postleitzahl && $adr->typ == 'h') - $foundAdr = true; - } - if($foundAdr == false) - { - // es wurde keine übereinstimmung gefunden - $obj->result = 'false'; - $obj->fehler = '5'; - return $obj; - } - - // Überprüfe Geburtsdatum - $person = new person(); - $person->load($benutzer->person_id); - if($person->gebdatum != $parameters->Geburtsdatum) - { - $obj->result = 'false'; - $obj->fehler = '4'; - return $obj; - } - - // hole prestudentID - $student->load($student_uid); - if($student->prestudent_id == '') - { - // es wurde kein student gefunden - $obj->result = 'false'; - $obj->fehler = '3'; - return $obj; - } - - // Übergabe von studiensemester -> z.b 11W, 12S auf WS2011, SS2012 - $year = mb_substr($parameters->Semesterkuerzel, 0,2); - $semester = mb_substr($parameters->Semesterkuerzel,2,1); - if($semester == 'S') - { - $semester = 'SS'; - } - else if($semester == 'W') - { - $semester= 'WS'; - } - else - { - // ungültiges Semester - $obj->result = 'false'; - $obj->fehler = '8'; - return $obj; - } - $studiensemester = $semester.'20'.$year; - - // letzten Status holen - $qry = "Select public.get_rolle_prestudent ('".$student->prestudent_id."', '".$studiensemester."')"; - - if($db->db_query($qry)) - { - if($row = $db->db_fetch_object()) - { - $status=$row->get_rolle_prestudent; - } - } - // Status Student und Diplomand gültig - if($status == 'Student' || $status == 'Diplomand') - { - $obj->result = 'true'; - $obj->fehler = ''; - } - else - { - $obj->result = 'false'; - $obj->fehler ='1'; - } - } - return $obj; -} - -/** - * - * Prüft die übergebenen Parameter auf Richtigkeit - * @param $parameter - */ -function validateRequest($parameter) -{ - /** - * Fehlercodes - * 1: Kein aufrechtes Studium - * 2: Fehlerhafter Request - * 3: Student wurde nicht gefunden - * 4: Fehler Geburtsdatum - * 5: Fehler Postleitzahl - * 6: Fehler Vorname - * 7: Fehler Nachname - * 8: Fehler Semester - * 9: Fehler Matrikelnummer - */ - - global $fehler; - - if(mb_strlen($parameter->Postleitzahl) > 10) - { - $fehler = '5'; - return false; - } - if(mb_strlen($parameter->Vorname) > 255) - { - $fehler = '6'; - return false; - } - if(mb_strlen($parameter->Name) > 255) - { - $fehler = '7'; - return false; - } - - if(mb_strlen($parameter->Matrikelnummer) >15 || $parameter->Matrikelnummer == '') - { - $fehler = '9'; - return false; - } - - return true; -} - -?> +. + */ + +require_once('../config/vilesci.config.inc.php'); +require_once('../include/student.class.php'); +require_once('../include/benutzer.class.php'); +require_once('../include/adresse.class.php'); +require_once('../include/person.class.php'); +require_once('../include/webservicelog.class.php'); + +ini_set("soap.wsdl_cache_enabled", "0"); + +$SOAPServer = new SoapServer(APP_ROOT."/soap/semesterticket.wsdl.php?".microtime(true)); +$SOAPServer->addFunction("verifyData"); +$SOAPServer->handle(); + +$fehler = ''; + + +/** + * + * Nimmt Anfrage entgegen und überprüft ob Student auch wirklich Student ist (anhand Matrikelnummer) + * @param $parameters + */ +function verifyData($parameters) +{ + global $fehler; + + $obj = new stdClass(); + + if (!$db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + + // Eintrag in der LogTabelle anlegen + $log = new webservicelog(); + $log->request_data = file_get_contents('php://input'); + $log->webservicetyp_kurzbz = 'wienerlinien'; + $log->request_id = $parameters->Token; + $log->beschreibung = "Semesterticketanfrage"; + $log->save(true); + + if(!validateRequest($parameters)) + { + $obj->result = 'false'; + $obj->fehler = $fehler; + } + else + { + // nach Personenkennzeichen suchen + $student = new student(); + $student_uid = $student->getUidFromMatrikelnummer($parameters->Matrikelnummer); + $studenten_arr = array(); + + if($student_uid !== false) + { + // überprüfe ob Benutzer aktiv ist + $benutzer = new benutzer(); + $benutzer->load($student_uid); + if(!$benutzer->bnaktiv) + { + $obj->result = 'false'; + $obj->fehler ='1'; + return $obj; + } + $person = new person(); + if(!$person->load($benutzer->person_id)) + { + $obj->result = 'false'; + $obj->fehler ='3'; + return $obj; + } + $studenten_arr[] = $student_uid; + } + else + { + // nach richtiger Matrikelnummer suchen + $person = new person(); + if(!$person->getPersonByMatrNr($parameters->Matrikelnummer)) + { + $obj->result = 'false'; + $obj->fehler = '9'; + return $obj; + } + + // Aktive Accounts der Person laden + $benutzer = new benutzer(); + $benutzer->getBenutzerFromPerson($person->person_id); + foreach($benutzer->result as $row) + { + $studenten_arr[] = $row->uid; + } + } + + // überprüfe vorname + if($person->vorname != $parameters->Vorname) + { + // es wurde keine übereinstimmung gefunden + $obj->result = 'false'; + $obj->fehler = '6'; + return $obj; + } + + if($person->nachname != $parameters->Name) + { + // es wurde keine übereinstimmung gefunden + $obj->result = 'false'; + $obj->fehler = '7'; + return $obj; + } + + // Überprüfe PLZ + $adresse = new adresse(); + $adresse->load_pers($person->person_id); + + $foundAdr = false; + foreach($adresse->result as $adr) + { + if($adr->plz == $parameters->Postleitzahl && $adr->typ == 'h') + $foundAdr = true; + } + if($foundAdr == false) + { + // es wurde keine übereinstimmung gefunden + $obj->result = 'false'; + $obj->fehler = '5'; + return $obj; + } + + // Überprüfe Geburtsdatum + if($person->gebdatum != $parameters->Geburtsdatum) + { + $obj->result = 'false'; + $obj->fehler = '4'; + return $obj; + } + + foreach($studenten_arr as $student_uid) + { + // hole prestudentID + if(!$student->load($student_uid)) + continue; + + // Übergabe von studiensemester -> z.b 11W, 12S auf WS2011, SS2012 + $year = mb_substr($parameters->Semesterkuerzel, 0,2); + $semester = mb_substr($parameters->Semesterkuerzel,2,1); + if($semester == 'S') + { + $semester = 'SS'; + } + else if($semester == 'W') + { + $semester= 'WS'; + } + else + { + // ungültiges Semester + $obj->result = 'false'; + $obj->fehler = '8'; + return $obj; + } + $studiensemester = $semester.'20'.$year; + + // letzten Status holen + $qry = "Select public.get_rolle_prestudent ('".$student->prestudent_id."', '".$studiensemester."')"; + + if($db->db_query($qry)) + { + if($row = $db->db_fetch_object()) + { + $status=$row->get_rolle_prestudent; + } + } + // Status Student und Diplomand gültig + if($status == 'Student' || $status == 'Diplomand') + { + $obj->result = 'true'; + $obj->fehler = ''; + return $obj; + } + else + { + continue; + } + } + + // es wurde kein passender student gefunden + $obj->result = 'false'; + $obj->fehler = '1'; + return $obj; + } + return $obj; +} + +/** + * + * Prüft die übergebenen Parameter auf Richtigkeit + * @param $parameter + */ +function validateRequest($parameter) +{ + /** + * Fehlercodes + * 1: Kein aufrechtes Studium + * 2: Fehlerhafter Request + * 3: Student wurde nicht gefunden + * 4: Fehler Geburtsdatum + * 5: Fehler Postleitzahl + * 6: Fehler Vorname + * 7: Fehler Nachname + * 8: Fehler Semester + * 9: Fehler Matrikelnummer + */ + + global $fehler; + + if(mb_strlen($parameter->Postleitzahl) > 10) + { + $fehler = '5'; + return false; + } + if(mb_strlen($parameter->Vorname) > 255) + { + $fehler = '6'; + return false; + } + if(mb_strlen($parameter->Name) > 255) + { + $fehler = '7'; + return false; + } + + if(mb_strlen($parameter->Matrikelnummer) >15 || $parameter->Matrikelnummer == '') + { + $fehler = '9'; + return false; + } + + return true; +} + +?>