From 53684c4d507476cb3846723b87b36dc7231b0c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 2 Nov 2018 16:44:40 +0100 Subject: [PATCH] =?UTF-8?q?Datenverbund=20Schnittstelle=20aktualisiert=20-?= =?UTF-8?q?=20neue=20Option=20f=C3=BCr=20Softrun=20hinzugef=C3=BCgt=20um?= =?UTF-8?q?=20bestehende=20Matrikelnummern=20zu=20importieren=20ohne=20ein?= =?UTF-8?q?e=20Vergabemeldung=20durchzuf=C3=BChren.=20-=20Matrikelnummerna?= =?UTF-8?q?bfrage=20nach=20Nachname=20und=20Geburtsdatum=20hinzugef=C3=BCg?= =?UTF-8?q?t=20-=20Zus=C3=A4tzliche=20Pr=C3=BCfung=20hinzugef=C3=BCgt=20we?= =?UTF-8?q?nn=20die=20Person=20nicht=20nach=20SVNR/Ersatzkennzeichen=20gef?= =?UTF-8?q?unden=20wird,=20wird=20alternativ=20nach=20Name=20und=20Geburts?= =?UTF-8?q?datum=20gesucht.=20Wenn=20hier=20ein=20Eintrag=20gefunden=20wir?= =?UTF-8?q?d,=20erfolgt=20keine=20Vergabemeldung=20da=20hier=20manuell=20g?= =?UTF-8?q?epr=C3=BCft=20werden=20muss=20ob=20es=20sich=20um=20die=20selbe?= =?UTF-8?q?=20Person=20handelt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/dvb.class.php | 174 ++++++++++++++++++++++++++- soap/datenverbund_client.php | 25 ++++ vilesci/cronjobs/matrikelnummern.php | 14 ++- 3 files changed, 209 insertions(+), 4 deletions(-) diff --git a/include/dvb.class.php b/include/dvb.class.php index 994896bc6..b7d42c684 100644 --- a/include/dvb.class.php +++ b/include/dvb.class.php @@ -36,6 +36,7 @@ class dvb extends basis_db const DVB_URL_WEBSERVICE_OAUTH = DVB_PORTAL.'/dvb/oauth/token'; const DVB_URL_WEBSERVICE_SVNR = DVB_PORTAL.'/rws/0.2/simpleStudentBySozialVersicherungsnummer.xml'; const DVB_URL_WEBSERVICE_ERSATZKZ = DVB_PORTAL.'/rws/0.2/simpleStudentByErsatzKennzeichen.xml'; + const DVB_URL_WEBSERVICE_NACHNAME = DVB_PORTAL.'/rws/0.2/simpleStudentByNachname.xml'; const DVB_URL_WEBSERVICE_RESERVIERUNG = DVB_PORTAL.'/dvb/matrikelnummern/1.0/reservierung.xml'; const DVB_URL_WEBSERVICE_MELDUNG = DVB_PORTAL.'/dvb/matrikelnummern/1.0/meldung.xml'; const DVB_URL_WEBSERVICE_BPK = DVB_PORTAL.'/rws/0.2/pruefeBpk.xml'; @@ -64,9 +65,11 @@ class dvb extends basis_db * Wenn die Person noch keine Matrikelnummer besitzt, wird eine neue Matrikelnummer * angefordert und der Person zugeordnet * @param int $person_id ID der Person. + * @param boolean $softrun Wird dieser Parameter gesetzt, werden nur bestehende Daten abgerufen, + * es werden keine neuen Vergabemeldungen gemacht * @return boolean true wenn Erfolgreich, false im Fehlerfall */ - public function assignMatrikelnummer($person_id) + public function assignMatrikelnummer($person_id, $softrun = false) { $person = new person(); if (!$person->load($person_id)) @@ -139,6 +142,18 @@ class dvb extends basis_db } else { + if($this->existsByName($person_id)) + { + $this->errormsg = 'Namenssuche ergab Treffer -> manuelle Pruefung erforderlich'; + return ErrorHandler::error(); + } + + if($softrun == true) + { + $this->errormsg = 'Nicht gefunden Softrun enabled keine Meldung'; + return ErrorHandler::error(); + } + // Es wurde noch keine Matrikelnummer zu dieser Person zugeordnet // Es wird eine neue Matrikelnummer aus dem Kontingent angefordert // und an die Person vergeben @@ -211,6 +226,8 @@ class dvb extends basis_db $person_meldung->staat = $person->staatsbuergerschaft; if ($person->svnr != '') $person_meldung->svnr = $person->svnr; + else if($person->ersatzkennzeichen != '') + $person_meldung->svnr = $person->ersatzkennzeichen; // PLZ der Meldeadresse laden $adresse = new adresse(); @@ -1203,6 +1220,161 @@ class dvb extends basis_db } } + public function existsByName($person_id) + { + $person = new person(); + if($person->load($person_id)) + { + $result = $this->getMatrikelnrByNachname($person->nachname, $person->gebdatum); + + if(ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result) + && isset($result->retval->data) + && is_array($result->retval->data) + && count($result->retval->data)>0) + { + foreach($result->retval->data as $row) + { + if(isset($row->vorname) && isset($row->nachname)) + { + if(mb_substr(mb_strtolower($row->vorname),0,5) == mb_substr(mb_strtolower($person->vorname),0,5) + && mb_substr(mb_strtolower($row->nachname),0,10) == mb_substr(mb_strtolower($person->nachname),0,10)) + { + return true; + } + } + } + return false; + } + else + { + return false; + } + } + } + + /** + * Get Matrikelnummer by Surname + * @param string $nachname Surname of Person. + * @param string $geburtsdatum Date of Birth + * @return Matrikelnummer or false on error. + */ + public function getMatrikelnrByNachname($nachname, $geburtsdatum) + { + if ($this->tokenIsExpired()) + { + $result = $this->authenticate(); + if (ErrorHandler::isError($result)) + return ErrorHandler::error(); + } + + $this->debug('getMatrikelnrByNachname'); + + $curl = curl_init(); + + $geburtsdatum = str_replace("-", "", $geburtsdatum); + + $url = self::DVB_URL_WEBSERVICE_NACHNAME; + $url .= '?nachName='.curl_escape($curl, $nachname); + $url .= '&geburtsDatum='.curl_escape($curl, $geburtsdatum); + + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + + $headers = array( + 'Accept: application/json', + 'Authorization: Bearer '.$this->authentication->access_token, + 'User-Agent: FHComplete', + 'Connection: Keep-Alive', + 'Expect:', + 'Content-Length: 0' + ); + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + + $this->debug('Sending Request to '.$url); + + $response = curl_exec($curl); + $curl_info = curl_getinfo($curl); + curl_close($curl); + + $this->debug('ResponseCode: '.$curl_info['http_code']); + $this->debug('ResponseData: '.print_r($response, true)); + + if ($curl_info['http_code'] == '200') + { + /* Example Response: + + + 12345678 + Max + sdfaASDAFasdfads+asasdffd= + Mustermann + M + 1999-02-19 + A + + + */ + $dom = new DOMDocument(); + $dom->loadXML($response); + $namespace = 'http://www.brz.gv.at/datenverbund-unis'; + $domnodes_student = $dom->getElementsByTagNameNS($namespace, 'student'); + + $retval = new stdClass(); + $retval->data = array(); + + foreach ($domnodes_student as $row_student) + { + // Wenn nicht gesperrt und fix vergeben + $ingesamtpool = $row_student->getAttribute('inGesamtPool'); + $gesperrt = $row_student->getAttribute('gesperrt'); + + if ($ingesamtpool == 'true' && $gesperrt == 'false') + { + $data = new stdClass(); + + $domnodes_matrikelnummer = $row_student->getElementsByTagNameNS($namespace, 'matrikelNummer'); + foreach ($domnodes_matrikelnummer as $row) + { + // MatrikelNr Found + $data->matrikelnr = $row->textContent; + break; + } + $domnodes_bpk = $row_student->getElementsByTagNameNS($namespace, 'personenkennzeichen'); + foreach ($domnodes_bpk as $row) + { + // BPK Found + $data->bpk = $row->textContent; + break; + } + $domnodes = $row_student->getElementsByTagNameNS($namespace, 'vorName'); + if($domnodes->length>0) + $data->vorname = $domnodes->item(0)->textContent; + $domnodes = $row_student->getElementsByTagNameNS($namespace, 'nachName'); + if($domnodes->length>0) + $data->nachname = $domnodes->item(0)->textContent; + $domnodes = $row_student->getElementsByTagNameNS($namespace, 'geschlecht'); + if($domnodes->length>0) + $data->geschlecht = $domnodes->item(0)->textContent; + $domnodes = $row_student->getElementsByTagNameNS($namespace, 'staatsAngehoerigkeit'); + if($domnodes->length>0) + $data->staatsangehoerigkeit = $domnodes->item(0)->textContent; + + $retval->data[] = $data; + } + + } + + return ErrorHandler::success($retval); + } + else + { + $this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; + return ErrorHandler::error(); + } + } + /** * Generiert eine eindeutige UUID * @return uuid diff --git a/soap/datenverbund_client.php b/soap/datenverbund_client.php index 028637948..91245f1a0 100644 --- a/soap/datenverbund_client.php +++ b/soap/datenverbund_client.php @@ -72,6 +72,7 @@ $person_id = filter_input(INPUT_POST, 'person_id'); Matrikelnummer nach Ersatzkennzeichen suchen +
  • Matrikelnummer nach Nachname suchen
  • Matrikelnummer Reservierungen anzeigen
  • Matrikelnummer Kontingent anfordern
  • Matrikelnummer Vergabe melden
  • @@ -121,6 +122,10 @@ $person_id = filter_input(INPUT_POST, 'person_id'); case 'getByErsatzkennzeichen': printrow('ersatzkennzeichen', 'Ersatzkennzeichen', $ersatzkennzeichen); break; + case 'getByNachname': + printrow('nachname', 'Nachname', $nachname); + printrow('geburtsdatum', 'Geburtsdatum', $geburtsdatum, ' (Format: YYYYMMDD)', 8); + break; case 'getReservations': case 'getKontingent': @@ -206,6 +211,26 @@ if (isset($_REQUEST['submit'])) echo '
    Matrikelnummer nicht vorhanden:'.$dvb->errormsg; break; + case 'getByNachname': + $data = $dvb->getMatrikelnrByNachname($_POST['nachname'], $_POST['geburtsdatum']); + + if(ErrorHandler::isSuccess($data) && ErrorHandler::hasData($data)) + { + if(isset($data->retval->data) && is_array($data->retval->data) && count($data->retval->data)>0) + { + echo '
    Daten gefunden: '; + var_dump($data->retval); + } + else + { + echo 'keine Einträge gefunden'; + } + } + else + { + echo '
    Matrikelnummer nicht vorhanden:'.$dvb->errormsg; + } + break; case 'getReservations': $result = $dvb->getReservations(DVB_BILDUNGSEINRICHTUNG_CODE, $_POST['studienjahr']); if(ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result)) diff --git a/vilesci/cronjobs/matrikelnummern.php b/vilesci/cronjobs/matrikelnummern.php index 66bec957c..049ddb6e6 100644 --- a/vilesci/cronjobs/matrikelnummern.php +++ b/vilesci/cronjobs/matrikelnummern.php @@ -33,6 +33,7 @@ if (!$db = new basis_db()) $limit = ''; $debug = false; +$softrun = false; // Wenn das Script nicht ueber Commandline gestartet wird, muss eine // Authentifizierung stattfinden @@ -55,6 +56,9 @@ if (php_sapi_name() != 'cli') if(isset($_GET['limit']) && is_numeric($_GET['limit'])) $limit = $_GET['limit']; + + if(isset($_GET['softrun'])) + $debug = ($_GET['softrun']=='true'?true:false); } else { @@ -63,13 +67,16 @@ else // zb php matrikelnummer.php --limit 100 --debug true $longopt = array( "limit:", - "debug:" + "debug:", + "softrun:" ); $commandlineparams = getopt('', $longopt); if (isset($commandlineparams['limit']) && is_numeric($commandlineparams['limit'])) $limit = $commandlineparams['limit']; if (isset($commandlineparams['debug'])) $debug = ($commandlineparams['debug']=='true'?true:false); + if (isset($commandlineparams['softrun'])) + $softrun = ($commandlineparams['softrun']=='true'?true:false); } $matrikelnummer_added = 0; @@ -77,7 +84,7 @@ $webservice = new dvb(DVB_USERNAME, DVB_PASSWORD, $debug); $qry = " SELECT - distinct person_id + distinct person_id, vorname, nachname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) @@ -97,7 +104,8 @@ if ($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) { - $data = $webservice->assignMatrikelnummer($row->person_id); + echo $nl."Pruefe $row->person_id $row->vorname $row->nachname"; + $data = $webservice->assignMatrikelnummer($row->person_id, $softrun); if(ErrorHandler::isSuccess($data)) echo $nl.$row->person_id.' OK'; else