Anpassung Datenverbund Schnittstelle

- BPKs werden bei der Vergabemeldung automatisch übernommen
- BPKs werden automatisch übernommen wenn dieses bei der Suche der
Matrikelnummer mitgeliefert wird
- Fehler behoben bei der Meldung mit falschen Datumsformat
- Neue Funktion zur Abfrage des BPK in Testclient hinzugefügt
- Testclient übernimmt die Zugangsdaten aus dem Config
- Automatisierte Datenabfrage erfolgt nur für Personen mit SVNR bzw
Ersatzkennzeichen
This commit is contained in:
Andreas Österreicher
2018-11-02 10:49:49 +01:00
parent d5906fdc38
commit ddc2f0a4af
4 changed files with 617 additions and 129 deletions
+454 -86
View File
@@ -29,6 +29,7 @@ require_once(dirname(__FILE__).'/studiensemester.class.php');
require_once(dirname(__FILE__).'/adresse.class.php');
require_once(dirname(__FILE__).'/webservicelog.class.php');
require_once(dirname(__FILE__).'/prestudent.class.php');
require_once(dirname(__FILE__).'/errorhandler.class.php');
class dvb extends basis_db
{
@@ -37,6 +38,7 @@ class dvb extends basis_db
const DVB_URL_WEBSERVICE_ERSATZKZ = DVB_PORTAL.'/rws/0.2/simpleStudentByErsatzKennzeichen.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';
public $authentication;
private $username;
@@ -70,33 +72,51 @@ class dvb extends basis_db
if (!$person->load($person_id))
{
$this->errormsg = $person->errormsg;
return false;
return ErrorHandler::error();
}
$matrikelnummer = false;
$bpk = false;
if ($person->svnr != '')
{
$matrikelnummer = $this->getMatrikelnrBySVNR($person->svnr);
$data = $this->getMatrikelnrBySVNR($person->svnr);
if ($matrikelnummer === false && $this->errormsg != '')
if(ErrorHandler::isSuccess($data))
{
if(ErrorHandler::hasData($data))
{
$matrikelnummer = $data->retval->matrikelnummer;
$bpk = $data->retval->bpk;
}
}
else
{
$this->logRequest($person, 'getMatrikelnrBySVNR', false);
return false;
return ErrorHandler::error();
}
}
elseif ($person->ersatzkennzeichen != '')
{
$matrikelnummer = $this->getMatrikelnrByErsatzkennzeichen($person->ersatzkennzeichen);
if ($matrikelnummer === false && $this->errormsg != '')
$data = $this->getMatrikelnrByErsatzkennzeichen($person->ersatzkennzeichen);
if(ErrorHandler::isSuccess($data))
{
if(ErrorHandler::hasData($data))
{
$matrikelnummer = $data->retval->matrikelnummer;
$bpk = $data->retval->bpk;
}
}
else
{
$this->logRequest($person, 'getMatrikelnrByErsatzkennzeichen', false);
return false;
return ErrorHandler::error();
}
}
else
{
$this->errormsg = 'Person braucht SVNR oder Ersatzkennzeichen';
return false;
return ErrorHandler::error();
}
if ($matrikelnummer !== false && $matrikelnummer != '')
@@ -104,10 +124,17 @@ class dvb extends basis_db
// Matrikelnummer wurde gefunden
// Bei Person speichern
$person->matr_nr = $matrikelnummer;
// Wenn ein bPK gefunden wurde dieses auch speichern
if ($bpk != '')
{
$person->bpk = $bpk;
}
if ($person->save())
{
$this->logRequest($person, 'assignExistingMatrikelnummer', true, $matrikelnummer);
return true;
return ErrorHandler::success();
}
}
else
@@ -147,14 +174,14 @@ class dvb extends basis_db
{
$this->logRequest($person, 'assignNewMatrikelnummer', false);
$this->errormsg = 'Fehler beim Ermitteln des Studienjahrs für diese Person';
return false;
return ErrorHandler::error();
}
}
else
{
$this->logRequest($person, 'assignNewMatrikelnummer', false);
$this->errormsg = 'Fehler beim Ermitteln des Studienjahrs für diese Person';
return false;
return ErrorHandler::error();
}
$studienjahr = substr($studiensemester_kurzbz, 4);
@@ -167,57 +194,69 @@ class dvb extends basis_db
$studienjahr = 2018;
// Neue Matrikelnummer aus Kontingent anfordern
$kontingent = $this->getKontingent(DVB_BILDUNGSEINRICHTUNG_CODE, $studienjahr);
$data = $this->getKontingent(DVB_BILDUNGSEINRICHTUNG_CODE, $studienjahr);
if ($kontingent !== false && isset($kontingent[0]))
if(ErrorHandler::isSuccess($data) && ErrorHandler::hasdata($data))
{
$person_meldung = new stdClass();
$person_meldung->matrikelnummer = $kontingent[0];
$person_meldung->vorname = $person->vorname;
$person_meldung->nachname = $person->nachname;
$person_meldung->geburtsdatum = $person->gebdatum;
$person_meldung->geschlecht = mb_strtoupper($person->geschlecht);
$person_meldung->staat = $person->staatsbuergerschaft;
if ($person->svnr != '')
$person_meldung->svnr = $person->svnr;
$kontingent = $data->retval->kontingent;
// PLZ der Meldeadresse laden
$adresse = new adresse();
if ($adresse->loadZustellAdresse($person->person_id))
$person_meldung->plz = $adresse->plz;
// ZGV Datum laden falls vorhanden
$prestudent = new prestudent();
if ($prestudent->load($prestudent_id) && $prestudent->zgvdatum != '')
if ($kontingent !== false && isset($kontingent[0]))
{
$datum_obj = new datum();
$person_meldung->matura = $datum_obj->formatDatum($prestudent->zgvdatum, 'Ymd');
}
$person_meldung = new stdClass();
$person_meldung->matrikelnummer = $kontingent[0];
$person_meldung->vorname = $person->vorname;
$person_meldung->nachname = $person->nachname;
$person_meldung->geburtsdatum = $person->gebdatum;
$person_meldung->geschlecht = mb_strtoupper($person->geschlecht);
$person_meldung->staat = $person->staatsbuergerschaft;
if ($person->svnr != '')
$person_meldung->svnr = $person->svnr;
// Meldung der Vergabe der Matrikelnummer
if ($this->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person_meldung))
{
// Matrikelnummer bei Person speichern
$person->matr_nr = $matrikelnummer;
if ($person->save())
// PLZ der Meldeadresse laden
$adresse = new adresse();
if ($adresse->loadZustellAdresse($person->person_id))
$person_meldung->plz = $adresse->plz;
// ZGV Datum laden falls vorhanden
$prestudent = new prestudent();
if ($prestudent->load($prestudent_id) && $prestudent->zgvdatum != '')
{
$this->logRequest($person, 'assignNewMatrikelnummer', true, $matrikelnummer);
return true;
$datum_obj = new datum();
$person_meldung->matura = $datum_obj->formatDatum($prestudent->zgvdatum, 'Ymd');
}
// Meldung der Vergabe der Matrikelnummer
$data = $this->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person_meldung);
if (ErrorHandler::isSuccess($data))
{
// Matrikelnummer bei Person speichern
$person->matr_nr = $data->retval->matrikelnummer;
// Wenn ein BPK bei der Meldung ermittelt wurde, dann dieses auch speichern
if(ErrorHandler::hasData($data) && isset($data->retval->bpk) && $data->retval->bpk!='')
{
$person->bpk = $data->retval->bpk;
}
if ($person->save())
{
$this->logRequest($person, 'assignNewMatrikelnummer', true, $matrikelnummer);
return ErrorHandler::success();
}
}
else
{
$this->logRequest($person, 'assignNewMatrikelnummer', false, $person_meldung);
$this->errormsg .= 'Vergabe fehlgeschlagen';
return ErrorHandler::error();
}
}
else
{
$this->logRequest($person, 'assignNewgMatrikelnummer', false, $person_meldung);
$this->errormsg .= 'Vergabe fehlgeschlagen';
return false;
$this->logRequest($person, 'assignNewMatrikelnummer', false, $studienjahr);
$this->errormsg .= 'Failed to get Kontingent';
return ErrorHandler::error();
}
}
else
{
$this->logRequest($person, 'assignNewgMatrikelnummer', false, $studienjahr);
$this->errormsg .= 'Failed to get Kontingent';
return false;
}
}
}
@@ -279,13 +318,13 @@ class dvb extends basis_db
$this->debug('Access_token:'.$this->authentication->access_token);
$this->debug('Scope:'.$this->authentication->scope);
return true;
return ErrorHandler::success();
}
else
{
$this->errormsg = 'Authentication failed with HTTP Code:'.$curl_info['http_code'];
$this->errormsg .= ' and Response:'.$json_response;
return false;
return ErrorHandler::error();
}
}
@@ -316,8 +355,9 @@ class dvb extends basis_db
{
if ($this->tokenIsExpired())
{
if (!$this->authenticate())
return false;
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$this->debug('getMatrikelnrBySVNR');
@@ -358,6 +398,7 @@ class dvb extends basis_db
<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>
@@ -369,6 +410,9 @@ class dvb extends basis_db
$dom->loadXML($response);
$namespace = 'http://www.brz.gv.at/datenverbund-unis';
$domnodes_student = $dom->getElementsByTagNameNS($namespace, 'student');
$matrikelnr = false;
$bpk = false;
foreach ($domnodes_student as $row_student)
{
// Wenn nicht gesperrt und fix vergeben
@@ -380,19 +424,38 @@ class dvb extends basis_db
$domnodes_matrikelnummer = $row_student->getElementsByTagNameNS($namespace, 'matrikelNummer');
foreach ($domnodes_matrikelnummer as $row)
{
// Found
return $row->textContent;
// MatrikelNr Found
$matrikelnr = $row->textContent;
break;
}
$domnodes_bpk = $row_student->getElementsByTagNameNS($namespace, 'personenkennzeichen');
foreach ($domnodes_bpk as $row)
{
// BPK Found
$bpk = $row->textContent;
break;
}
}
}
$this->errormsg = '';
return false;
if($matrikelnr !== false)
{
$retval = new stdClass();
$retval->matrikelnummer = $matrikelnr;
$retval->bpk = $bpk;
return ErrorHandler::success($retval);
}
else
{
$this->errormsg = '';
return ErrorHandler::success();
}
}
else
{
$this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
return false;
return ErrorHandler::error();
}
}
@@ -405,8 +468,9 @@ class dvb extends basis_db
{
if ($this->tokenIsExpired())
{
if (!$this->authenticate())
return false;
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$this->debug('getMatrikelnrByErsatzkennzeichen');
@@ -503,6 +567,10 @@ class dvb extends basis_db
$dom->loadXML($xml_response);
$namespace = 'http://www.brz.gv.at/datenverbund-unis';
$domnodes_student = $dom->getElementsByTagNameNS($namespace, 'student');
$matrikelnr = '';
$bpk = '';
foreach ($domnodes_student as $row_student)
{
// Wenn nicht gesperrt und fix vergeben
@@ -515,18 +583,36 @@ class dvb extends basis_db
foreach ($domnodes_matrikelnummer as $row)
{
// Found
return $row->textContent;
$matrikelnr = $row->textContent;
}
$domnodes_bpk = $row_student->getElementsByTagNameNS($namespace, 'personenkennzeichen');
foreach ($domnodes_bpk as $row)
{
// BPK Found
$bpk = $row->textContent;
break;
}
}
}
$this->errormsg = '';
return false;
if($matrikelnr != '')
{
$retval = new stdClass();
$retval->matrikelnummer = $matrikelnr;
$retval->bpk = $bpk;
return ErrorHandler::success($retval);
}
else
{
$this->errormsg = '';
return ErrorHandler::success();
}
}
else
{
$this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$xml_response;
return false;
return ErrorHandler::error();
}
}
@@ -543,8 +629,9 @@ class dvb extends basis_db
if ($this->tokenIsExpired())
{
if (!$this->authenticate())
return false;
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$curl = curl_init();
@@ -597,12 +684,14 @@ class dvb extends basis_db
{
$reservations[] = $row->textContent;
}
return $reservations;
$retval = new stdClass();
$retval->reservations = $reservations;
return ErrorHandler::success($retval);
}
else
{
$this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
return false;
return ErrorHandler::error();
}
}
@@ -620,8 +709,9 @@ class dvb extends basis_db
if ($this->tokenIsExpired())
{
if (!$this->authenticate())
return false;
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$data = '<?xml version="1.0" encoding="UTF-8"?>
@@ -674,12 +764,15 @@ class dvb extends basis_db
{
$kontingent[] = $row->textContent;
}
return $kontingent;
$retval = new stdClass();
$retval->kontingent = $kontingent;
return ErrorHandler::success($retval);
}
else
{
$this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
return false;
return ErrorHandler::error();
}
}
@@ -696,10 +789,11 @@ class dvb extends basis_db
if ($this->tokenIsExpired())
{
if (!$this->authenticate())
return false;
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$gebdat = str_replace("-", "", "$person->geburtsdatum");
$gebdat = str_replace("-", "", $person->geburtsdatum);
$data = '<?xml version="1.0" encoding="UTF-8"?>
<matrikelnummernmeldung>
@@ -792,6 +886,18 @@ class dvb extends basis_db
<massnahme>Korrektur der Matrikelnummer</massnahme>
<feldinhalt>12345678</feldinhalt>
</fehler>
<fehler>
<fehlernummer>ED10065</fehlernummer>
<kategorie>E</kategorie>
<datenfeld>bPK</datenfeld>
<fehlertext>fehlt oder anders als im Datenverbund ermittelt(Yl329U/jt7fjoo5p+z4lH37ZKrg=)</fehlertext>
<massnahme>
Zurückgemeldete bPK in den lokalen Datenbestand übernehmen. Fallsim Fehlertext keine bPK enthalten ist,
müssen die Personendaten geprüft und ggf. ergänzt werden (Abgleich von Name/Geburtsdatum/Adresse mit dem zentralen
Melderegister)
</massnahme>
<feldinhalt>Yl329keinEchtesbPK4lH37ZKrg=</feldinhalt>
</fehler>
</fehlerliste>
</matrikelnummernmeldungantwort>
*/
@@ -808,11 +914,13 @@ class dvb extends basis_db
$dom->loadXML($response);
$domnodes_fehlerliste = $dom->getElementsByTagName('fehlerliste');
$fehleranzahl = $domnodes_fehlerliste[0]->getAttribute('fehleranzahl');
$fehleranzahl = $domnodes_fehlerliste->item(0)->getAttribute('fehleranzahl');
if ($fehleranzahl === '0')
{
// Keine Fehler -> Meldung erfolgreich
return true;
$retval = new stdClass();
$retval->matrikelnummer = $person->matrikelnummer;
return ErrorHandler::success($retval);
}
else
{
@@ -820,18 +928,278 @@ class dvb extends basis_db
$domnodes_fehler = $dom->getElementsByTagName('fehler');
foreach ($domnodes_fehler as $row)
{
$datenfeld = $row->getElementsByTagName('datenfeld');
$fehlertext = $row->getElementsByTagName('fehlertext');
$this->errormsg .= ' Datenfeld:'.$datenfeld[0]->textContent;
$this->errormsg .= ' Fehlertext:'.$fehlertext[0]->textContent;
$fehlernummer = $row->getElementsByTagName('fehlernummer');
/**
* 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.
*/
if($fehlernummer->length>0 && $fehlernummer->item(0)->textContent == 'ED10065')
{
$this->debug('ED10065 Response');
$domnodes_feldinhalt = $row->getElementsByTagName('feldinhalt');
if($domnodes_feldinhalt->length > 0 && $domnodes_feldinhalt->item(0)->textContent!='')
{
$bpk = $domnodes_feldinhalt->item(0)->textContent;
$retval = new stdClass();
$retval->matrikelnummer = $person->matrikelnummer;
$retval->bpk = $bpk;
$this->errormsg .= 'ED10065 Response';
$this->debug('BPK:'.$bpk);
return ErrorHandler::success($retval);
}
}
else
{
$datenfeld = $row->getElementsByTagName('datenfeld');
$fehlertext = $row->getElementsByTagName('fehlertext');
$this->errormsg .= ' Datenfeld:'.$datenfeld->item(0)->textContent;
$this->errormsg .= ' Fehlertext:'.$fehlertext->item(0)->textContent;
}
}
return false;
return ErrorHandler::error();
}
}
else
{
$this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
return false;
return ErrorHandler::error();
}
}
/**
* Get BPK from Person
* @param string $person_id ID of the Person.
* @return BPK or false on error.
*/
public function getBPK($person_id)
{
$person = new person();
if ($person->load($person_id))
{
if ($person->bpk != '')
{
// BPK exisitert bereits
$retval = new stdClass();
$retval->bpk = $person->bpk;
return ErrorHandler::success($retval);
}
if ($person->gebdatum == '')
{
$this->errormsg = 'Geburtsdatum ist nicht gesetzt';
return ErrorHandler::error();
}
if ($person->vorname == '')
{
$this->errormsg = 'Vorname ist nicht gesetzt';
return ErrorHandler::error();
}
if ($person->nachname == '')
{
$this->errormsg = 'Nachname ist nicht gesetzt';
return ErrorHandler::error();
}
$geburtsdatum = str_replace("-", "", $person->gebdatum);
$vorname = $person->vorname;
$nachname = $person->nachname;
$geschlecht = mb_strtoupper($person->geschlecht);
$adresse = new adresse();
$adresse->loadZustellAdresse($person_id);
/**
* Wenn die Person beim Ersten mal nicht eindeutig gefunden wird,
* dann wird nochmal versucht mit Postleitzahl und ggf ein drittes
* mal mit der Strasse der Person
*/
$try = 1;
$plz = null;
$strasse = null;
while ($try <= 3)
{
if ($try == 2)
{
$plz = $adresse->plz;
}
elseif ($try == 3)
{
$plz = $adresse->plz;
$strasse = $adresse->strasse;
}
// Versuchen BPK zu ermitteln
$data = $this->pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz, $strasse);
if (ErrorHandler::isSuccess($data))
{
// gefunden
return ErrorHandler::success($data->retval);
}
elseif (!ErrorHandler::hasData($data))
{
// nicht gefunden
return ErrorHandler::error();
}
else
{
// mehrere gefunden
if (isset($data->retval->multiple) && $data->retval->multiple === true)
{
// ggf nochmal versuchen mit weiteren Parametern
}
else
{
return ErrorHandler::error();
}
}
$try++;
}
// nicht eindeutig auffindbar
return ErrorHandler::error();
}
else
{
$this->errormsg = $person->errormsg;
return ErrorHandler::error();
}
}
/**
* Get BPK from Person
* @param string $geburtsdatum Geburtsdatum der Person im format YYYYMMDD
* @param $vorname Vorname der Person.
* @param $nachname Nachname der Person.
* @param $geschlecht Geschlecht der Person M | W
* @param $plz Postleitzahl der Person (optional).
* @param $strasse Strasse der Person (optional).
* @return BPK or false on error.
*/
private function pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz = null, $strasse = null)
{
if ($this->tokenIsExpired())
{
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$this->debug('getBPK');
$curl = curl_init();
$url = self::DVB_URL_WEBSERVICE_BPK;
$url .= '?geburtsDatum='.curl_escape($curl, $geburtsdatum);
$url .= '&vorname='.curl_escape($curl, $vorname);
$url .= '&nachname='.curl_escape($curl, $nachname);
$url .= '&geschlecht='.curl_escape($curl, $geschlecht);
if(!is_null($plz))
$url .= '&plz='.curl_escape($curl, $plz);
if(!is_null($strasse))
$url .= '&strasse='.curl_escape($curl, $strasse);
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:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<simpleBpkResponse xmlns="http://www.brz.gv.at/datenverbund-unis">
<personenkennzeichen>1234567890ABCDEFGH=</personenkennzeichen>
<personInfo>
<person>
<vorname>Max</vorname>
<nachname>Mustermann</nachname>
<geschlecht>M</geschlecht>
<gebdat>19901231</gebdat>
</person>
<adresse>
<ort></ort>
</adresse>
</personInfo>
</simpleBpkResponse>
Example Error:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<simpleBpkResponse xmlns="http://www.brz.gv.at/datenverbund-unis">
<fehlerAntwort>
<fehlerliste>
<fehler>
<fehlernummer>ED10065</fehlernummer>
<kategorie>E</kategorie>
<datenfeld>bPK</datenfeld>
<fehlertext>fehlt oder anders als im Datenverbund ermittelt (keine bPK gefunden)</fehlertext>
<massnahme>
Zurückgemeldete bPK in den lokalen Datenbestand übernehmen.
Falls im Fehlertext keine bPK enthalten ist, müssen die Personendaten geprüft und
ggf. ergänzt werden (Abgleich von Name/Geburtsdatum/Adresse
mit dem zentralen Melderegister)
</massnahme>
<feldinhalt>keine bPK gefunden</feldinhalt>
</fehler>
</fehlerliste>
</fehlerAntwort>
</simpleBpkResponse>
*/
$dom = new DOMDocument();
$dom->loadXML($response);
$namespace = 'http://www.brz.gv.at/datenverbund-unis';
$domnodes_bpk = $dom->getElementsByTagNameNS($namespace, 'personenkennzeichen');
if($domnodes_bpk->length > 0)
{
$retval = new stdClass();
$retval->bpk = $domnodes_bpk->item(0)->textContent;
return ErrorHandler::success($retval);
}
else
{
$retval = new stdClass();
$domnodes_personen = $dom->getElementsByTagNameNS($namespace, 'personInfo');
if($domnodes_personen->length > 1)
{
$retval = new stdClass();
$retval->multiple = true;
return ErrorHandler::error($retval);
}
}
return ErrorHandler::error();
}
else
{
$this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
return ErrorHandler::error();
}
}
@@ -856,7 +1224,7 @@ class dvb extends basis_db
private function debug($msg)
{
if ($this->debug)
$this->debug_output .= "\n<br>".date('Y-m-d H:i:s').': '.htmlentities($msg);
$this->debug_output .= "\n".date('Y-m-d H:i:s').': '.$msg;
}
/**
+91
View File
@@ -0,0 +1,91 @@
<?php
/* Copyright (C) 2018 fhcomplete.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>,
*/
/**
* This class provides static functions for handling Result values
*/
class ErrorHandler
{
/**
* Returns a Success Object
* @param $retval object
* @return result object
*/
public static function success($retval = '')
{
$data = new stdClass();
$data->error = false;
$data->retval = $retval;
return $data;
}
/**
* Returns an Error Object
* @param $retval object (optional)
* @return result object
*/
public static function error($retval = '')
{
$data = new stdClass();
$data->error = true;
$data->retval = $retval;
return $data;
}
/**
* Checks if the Result object is Successfull
* @param result object
* @return boolean
*/
public static function isSuccess($result)
{
if (is_object($result) && isset($result->error) && $result->error === false)
{
return true;
}
return false;
}
/**
* Checks if the Result object is an error
* @param result object
* @return boolean
*/
public static function isError($result)
{
return !ErrorHandler::isSuccess($result);
}
/*
* Checks if the Result object contains additional data
* @param result object
* @return boolean
*/
public static function hasData($result)
{
if (is_object($result) && isset($result->retval) && $result->retval!='')
{
return true;
}
return false;
}
}
+63 -39
View File
@@ -25,6 +25,7 @@ require_once('../include/functions.inc.php');
require_once('../include/basis_db.class.php');
require_once('../include/benutzerberechtigung.class.php');
require_once('../include/dvb.class.php');
require_once('../include/errorhandler.class.php');
$uid = get_uid();
$rechte = new benutzerberechtigung();
@@ -39,9 +40,9 @@ if (isset($_GET['action']))
else
$action = 'getBySvnr';
$username = filter_input(INPUT_POST, 'username');
$password = filter_input(INPUT_POST, 'password');
$bildungseinrichtung = filter_input(INPUT_POST, 'bildungseinrichtung');
$username = DVB_USERNAME;
$password = DVB_PASSWORD;
$studienjahr = filter_input(INPUT_POST, 'studienjahr');
$matrikelnr = filter_input(INPUT_POST, 'matrikelnummer');
$nachname = filter_input(INPUT_POST, 'nachname');
@@ -75,7 +76,12 @@ $person_id = filter_input(INPUT_POST, 'person_id');
<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>
<li><a href="datenverbund_client.php?action=assignMatrikelnummer">Gesamtprozess (Abfrage, ggf Vergabemeldung, Speichern bei Person)</a></li>
<li><a href="datenverbund_client.php?action=getBPK">BPK ermitteln</a></li>
</ul>
<?php
echo "<br>Portal: ".DVB_PORTAL;
echo "<br>Bildungseinrichtung: ".DVB_BILDUNGSEINRICHTUNG_CODE;
?>
<br><br>
<form action="<?php echo $_SERVER['PHP_SELF'].'?action='.$action; ?>" method="post">
<table border="0" cellpadding="5" cellspacing="0" bgcolor="#E0E0E0">
@@ -103,9 +109,6 @@ $person_id = filter_input(INPUT_POST, 'person_id');
</tr>';
}
printrow('username', 'Username', $username, '', 100);
printrow('password', 'Passwort', $password, '', 100, 'password');
switch($action)
{
case 'getOAuth':
@@ -121,22 +124,10 @@ $person_id = filter_input(INPUT_POST, 'person_id');
case 'getReservations':
case 'getKontingent':
printrow(
'bildungseinrichtung',
'Bildungseinrichtung',
$bildungseinrichtung,
'Kurzzeichen der Bildungseinrichtung'
);
printrow('studienjahr', 'Studienjahr', $studienjahr, 'zB 2016 (für WS2016 und SS2017)', 4);
break;
case 'setMatrikelnummer':
printrow(
'bildungseinrichtung',
'Bildungseinrichtung',
$bildungseinrichtung,
'Kurzzeichen der Bildungseinrichtung'
);
printrow('matrikelnummer', 'Matrikelnummer', $matrikelnr);
printrow('nachname', 'Nachname', $nachname, '', 255);
printrow('vorname', 'Vorname', $vorname, '', 30);
@@ -152,6 +143,10 @@ $person_id = filter_input(INPUT_POST, 'person_id');
printrow('person_id', 'PersonID', $person_id);
break;
case 'getBPK':
printrow('person_id', 'PersonID', $person_id);
break;
default:
echo "Unknown action";
break;
@@ -180,44 +175,60 @@ if (isset($_REQUEST['submit']))
switch ($action)
{
case 'getOAuth':
if ($dvb->authenticate())
$result = $dvb->authenticate();
if (ErrorHandler::isSuccess($result))
echo '<br><b>OAuth Bearer Token:</b> '.$dvb->authentication->access_token;
else
echo '<br><b>Failed:</b> '.$dvb->errormsg;
break;
case 'getBySvnr':
$matrikelnr = $dvb->getMatrikelnrBySVNR($_POST['svnr']);
if ($matrikelnr !== false)
echo '<br><b>Matrikelnummer vorhanden:</b>'.$matrikelnr;
$data = $dvb->getMatrikelnrBySVNR($_POST['svnr']);
if(ErrorHandler::isSuccess($data))
{
echo '<br><b>Matrikelnummer vorhanden:</b> '.$data->retval->matrikelnummer;
if(isset($data->retval->bpk) && $data->retval->bpk!='')
echo '<br><b>BPK vorhanden:</b> '.$data->retval->bpk;
}
else
echo '<br><b>Matrikelnummer nicht vorhanden:</b>'.$dvb->errormsg;
{
echo '<br><b>Matrikelnummer nicht vorhanden:</b>'.$dvb->errormsg;
}
break;
case 'getByErsatzkennzeichen':
$matrikelnr = $dvb->getMatrikelnrByErsatzkennzeichen($_POST['ersatzkennzeichen']);
if ($matrikelnr !== false)
echo '<br><b>Matrikelnummer vorhanden:</b>'.$matrikelnr;
$data = $dvb->getMatrikelnrByErsatzkennzeichen($_POST['ersatzkennzeichen']);
if (ErrorHandler::isSuccess($data))
echo '<br><b>Matrikelnummer vorhanden:</b>'.$data->retval->matrikelnummer;
else
echo '<br><b>Matrikelnummer nicht vorhanden:</b>'.$dvb->errormsg;
break;
case 'getReservations':
$reservierteNummern = $dvb->getReservations($_POST['bildungseinrichtung'], $_POST['studienjahr']);
if ($reservierteNummern !== false)
echo '<br><b>Reservierte Nummern:</b>'.print_r($reservierteNummern, true);
else
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
$result = $dvb->getReservations(DVB_BILDUNGSEINRICHTUNG_CODE, $_POST['studienjahr']);
if(ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result))
{
$reservierteNummern = $result->retval->reservations;
if ($reservierteNummern !== false)
echo '<br><b>Reservierte Nummern:</b>'.print_r($reservierteNummern, true);
else
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
}
break;
case 'getKontingent':
$kontingent = $dvb->getKontingent($_POST['bildungseinrichtung'], $_POST['studienjahr']);
$result = $dvb->getKontingent(DVB_BILDUNGSEINRICHTUNG_CODE, $_POST['studienjahr']);
if ($kontingent !== false)
echo '<br><b>Kontingent:</b>'.print_r($kontingent, true);
else
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
if(ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result))
{
$kontingent = $result->retval->kontingent;
if ($kontingent !== false)
echo '<br><b>Kontingent:</b>'.print_r($kontingent, true);
else
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
}
break;
case 'setMatrikelnummer':
@@ -232,14 +243,17 @@ if (isset($_REQUEST['submit']))
$person->matura = $matura; // Optional
$person->svnr = $svnr; // Optional
if ($dvb->setMatrikelnummer($_POST['bildungseinrichtung'], $person))
$result = $dvb->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person);
if (ErrorHandler::isSuccess($result))
echo '<br><b>Erfolgreich gemeldet</b>';
else
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
break;
case 'assignMatrikelnummer':
if($dvb->assignMatrikelnummer($person_id))
$result = $dvb->assignMatrikelnummer($person_id);
if(ErrorHandler::isSuccess($result))
{
echo '<br><b>OK</b>';
}
@@ -247,6 +261,16 @@ if (isset($_REQUEST['submit']))
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
break;
case 'getBPK':
$data = $dvb->getBPK($person_id);
if(ErrorHandler::isSuccess($data))
{
echo '<br><b>OK BPK:</b> '.$data->retval->bpk;
}
else
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
break;
default:
echo "Unknown action";
break;
+9 -4
View File
@@ -26,6 +26,7 @@ require_once(dirname(__FILE__).'/../../include/basis_db.class.php');
require_once(dirname(__FILE__).'/../../include/dvb.class.php');
require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php');
require_once(dirname(__FILE__).'/../../include/datum.class.php');
require_once(dirname(__FILE__).'/../../include/errorhandler.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
@@ -37,6 +38,7 @@ $debug = false;
// Authentifizierung stattfinden
if (php_sapi_name() != 'cli')
{
$nl = '<br>';
// Benutzerdefinierte Variablen laden
$user = get_uid();
loadVariables($user);
@@ -56,6 +58,7 @@ if (php_sapi_name() != 'cli')
}
else
{
$nl = "\n";
// Commandline Paramter parsen bei Aufruf ueber Cronjob
// zb php matrikelnummer.php --limit 100 --debug true
$longopt = array(
@@ -83,7 +86,8 @@ $qry = "
public.tbl_benutzer.aktiv = true
AND tbl_person.matr_nr is null
AND studiengang_kz<10000
AND EXISTS(SELECT 1 FROM public.tbl_prestudent WHERE person_id=tbl_person.person_id AND bismelden=true)";
AND EXISTS(SELECT 1 FROM public.tbl_prestudent WHERE person_id=tbl_person.person_id AND bismelden=true)
AND (svnr is not null OR ersatzkennzeichen is not null)";
if ($limit != '')
$qry.=" LIMIT ".$limit;
@@ -93,10 +97,11 @@ if ($result = $db->db_query($qry))
{
while($row = $db->db_fetch_object($result))
{
if($webservice->assignMatrikelnummer($row->person_id))
echo "\n<br>".$row->person_id.' OK';
$data = $webservice->assignMatrikelnummer($row->person_id);
if(ErrorHandler::isSuccess($data))
echo $nl.$row->person_id.' OK';
else
echo "\n<br>".$row->person_id.' Failed:'.$webservice->errormsg;
echo $nl.$row->person_id.' Failed:'.$webservice->errormsg;
}
}
if($debug)