Datenverbund API

- Problem behoben wodurch die Vergabemeldung nicht funktioniert
     wenn ED10065 gleichzeitig mit ZD10076 als Antwort geliefert wird
   - Neue Suchfunktion hinzugefügt für Vorname, Nachname, Geburtsdatum
   - Neue Suchfunktion hinzugefügt zum Suchen nach Matrikelnummer
This commit is contained in:
Andreas Österreicher
2019-10-09 11:01:52 +02:00
parent 9b0fcbbfdd
commit 6484fcb822
2 changed files with 311 additions and 2 deletions
+261 -1
View File
@@ -37,6 +37,8 @@ class dvb extends basis_db
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_NAME = DVB_PORTAL.'/rws/0.2/simpleStudentByName.xml';
const DVB_URL_WEBSERVICE_MATRIKELNUMMER = DVB_PORTAL.'/rws/0.2/simpleStudentByMatrikelnummer.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';
@@ -964,8 +966,11 @@ class dvb extends basis_db
* Bei Fehlernummer ED10065 wurde die Matrikelnummer korrekt gesetzt.
* Das BPK wurde vom Datenverbund versucht zu ermitteln und wird in der Fehlermeldung
* zurückgeliefert. Dieses sollte dann gespeichert werden.
* Es muss eine erneute Vergabemeldung mit korrigierten Daten vorgenommen werden um die Daten im
* DVB zu aktualisieren
* Dies gilt nur, wenn ED10065 alleine geliefert wird und keine sonstigen Fehler auftreten
*/
if ($fehlernummer->length>0 && $fehlernummer->item(0)->textContent == 'ED10065')
if ($fehlernummer->length == 1 && $fehlernummer->item(0)->textContent == 'ED10065')
{
$this->debug('ED10065 Response');
$domnodes_feldinhalt = $row->getElementsByTagName('feldinhalt');
@@ -975,8 +980,13 @@ class dvb extends basis_db
$retval = new stdClass();
$retval->matrikelnummer = $person->matrikelnummer;
$retval->bpk = $bpk;
$this->errormsg .= 'ED10065 Response';
$this->errormsg .= 'Eine Personendatenprüfung ist erforderlich';
$this->errormsg .= 'Danach muss eine erneute Vergabemeldung mit dieser Matrikelnummer erfolgen.';
$this->debug('BPK:'.$bpk);
$this->debug('MatrNr:'.$person->matrikelnummer);
return ErrorHandler::success($retval);
}
}
@@ -1299,6 +1309,12 @@ class dvb extends basis_db
return ErrorHandler::success();
}
}
else
{
$this->debug('keine 100% Eindeutigkeit beim Namen gegeben:'.print_r($result->retval->data,true));
// Uebereinstimmung gefunden aber nicht 100% eindeutig
return ErrorHandler::success();
}
}
}
$this->debug('Keine Uebereinstimmung per Namenssuche');
@@ -1434,6 +1450,250 @@ class dvb extends basis_db
}
}
/**
* Get Matrikelnummer by Name
* @param string $nachname Surname of Person.
* @param string $vorname Firstname of Person.
* @param string $geburtsdatum Date of Birth
* @return Matrikelnummer or false on error.
*/
public function getMatrikelnrByName($nachname, $vorname, $geburtsdatum)
{
if ($this->tokenIsExpired())
{
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$this->debug('getMatrikelnrByName');
$curl = curl_init();
$geburtsdatum = str_replace("-", "", $geburtsdatum);
$url = self::DVB_URL_WEBSERVICE_NAME;
$url .= '?nachName='.curl_escape($curl, $nachname);
$url .= '&vorName='.curl_escape($curl, $vorname);
$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:
<uni:simpleStudentResponse xmlns:uni="http://www.brz.gv.at/datenverbund-unis">
<uni:student inStudienBeitragsPool="false" inGesamtPool="true" gesperrt="false">
<uni:matrikelNummer>12345678</uni:matrikelNummer>
<uni:vorName>Max</uni:vorName>
<uni:personenkennzeichen>sdfaASDAFasdfads+asasdffd=</uni:personenkennzeichen>
<uni:nachName>Mustermann</uni:nachName>
<uni:geschlecht>M</uni:geschlecht>
<uni:geburtsDatum>1999-02-19</uni:geburtsDatum>
<uni:staatsAngehoerigkeit>A</uni:staatsAngehoerigkeit>
</uni:student>
</uni:simpleStudentResponse>
*/
$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->matrikelnummer = $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
{
$errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
return ErrorHandler::error($errormsg);
}
}
/**
* Get Persondata by Matrikelnummer
* @param string $matrikelnr Matrikelnummer of Person.
* @return Matrikelnummer or false on error.
*/
public function getDataByMatrikelnr($matrikelnr)
{
if ($this->tokenIsExpired())
{
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$this->debug('getDataByMatrikelnr');
$curl = curl_init();
$url = self::DVB_URL_WEBSERVICE_MATRIKELNUMMER;
$url .= '?matrikelNummer='.curl_escape($curl, $matrikelnr);
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:
<uni:simpleStudentResponse xmlns:uni="http://www.brz.gv.at/datenverbund-unis">
<uni:student inStudienBeitragsPool="false" inGesamtPool="true" gesperrt="false">
<uni:matrikelNummer>12345678</uni:matrikelNummer>
<uni:vorName>Max</uni:vorName>
<uni:personenkennzeichen>sdfaASDAFasdfads+asasdffd=</uni:personenkennzeichen>
<uni:nachName>Mustermann</uni:nachName>
<uni:geschlecht>M</uni:geschlecht>
<uni:geburtsDatum>1999-02-19</uni:geburtsDatum>
<uni:staatsAngehoerigkeit>A</uni:staatsAngehoerigkeit>
</uni:student>
</uni:simpleStudentResponse>
*/
$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->matrikelnummer = $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
{
$errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
return ErrorHandler::error($errormsg);
}
}
/**
* Generiert eine eindeutige UUID
* @return uuid
+50 -1
View File
@@ -74,6 +74,8 @@ $strasse = filter_input(INPUT_POST, 'strasse');
</a>
</li>
<li><a href="datenverbund_client.php?action=getByNachname">Matrikelnummer nach Nachname suchen</a></li>
<li><a href="datenverbund_client.php?action=getByName">Matrikelnummer nach Nachname, Vorname, Geburtsdatum suchen</a></li>
<li><a href="datenverbund_client.php?action=getByMatrikelnummer">Personendaten anhand der Matrikelnummer suchen</a></li>
<li><a href="datenverbund_client.php?action=getReservations">Matrikelnummer Reservierungen anzeigen</a></li>
<li><a href="datenverbund_client.php?action=getKontingent">Matrikelnummer Kontingent anfordern</a></li>
<li><a href="datenverbund_client.php?action=setMatrikelnummer">Matrikelnummer Vergabe melden</a></li>
@@ -128,7 +130,14 @@ $strasse = filter_input(INPUT_POST, 'strasse');
printrow('nachname', 'Nachname', $nachname);
printrow('geburtsdatum', 'Geburtsdatum', $geburtsdatum, ' (Format: YYYYMMDD)', 8);
break;
case 'getByName':
printrow('nachname', 'Nachname', $nachname);
printrow('vorname', 'Vorname', $vorname);
printrow('geburtsdatum', 'Geburtsdatum', $geburtsdatum, ' (Format: YYYYMMDD)', 8);
break;
case 'getByMatrikelnummer':
printrow('matrikelnummer', 'Matrikelnummer', $matrikelnr);
break;
case 'getReservations':
case 'getKontingent':
printrow('studienjahr', 'Studienjahr', $studienjahr, 'zB 2016 (für WS2016 und SS2017)', 4);
@@ -226,6 +235,46 @@ if (isset($_REQUEST['submit']))
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 '<br><b>Daten gefunden:</b> ';
var_dump($data->retval);
}
else
{
echo 'keine Einträge gefunden';
}
}
else
{
echo '<br><b>Matrikelnummer nicht vorhanden:</b>'.$data->errormsg;
}
break;
case 'getByName':
$data = $dvb->getMatrikelnrByName($_POST['nachname'], $_POST['vorname'], $_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 '<br><b>Daten gefunden:</b> ';
var_dump($data->retval);
}
else
{
echo 'keine Einträge gefunden';
}
}
else
{
echo '<br><b>Matrikelnummer nicht vorhanden:</b>'.$data->errormsg;
}
break;
case 'getByMatrikelnummer':
$data = $dvb->getDataByMatrikelnr($_POST['matrikelnummer']);
if(ErrorHandler::isSuccess($data) && ErrorHandler::hasData($data))
{
if(isset($data->retval->data) && is_array($data->retval->data) && count($data->retval->data)>0)