mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-20 16:32:20 +00:00
Datenverbund Schnittstelle aktualisiert
- neue Option für Softrun hinzugefügt um bestehende Matrikelnummern zu importieren ohne eine Vergabemeldung durchzuführen. - Matrikelnummernabfrage nach Nachname und Geburtsdatum hinzugefügt - Zusätzliche Prüfung hinzugefügt wenn die Person nicht nach SVNR/Ersatzkennzeichen gefunden wird, wird alternativ nach Name und Geburtsdatum gesucht. Wenn hier ein Eintrag gefunden wird, erfolgt keine Vergabemeldung da hier manuell geprüft werden muss ob es sich um die selbe Person handelt
This commit is contained in:
+173
-1
@@ -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:
|
||||
<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->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
|
||||
|
||||
@@ -72,6 +72,7 @@ $person_id = filter_input(INPUT_POST, 'person_id');
|
||||
Matrikelnummer nach Ersatzkennzeichen suchen
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="datenverbund_client.php?action=getByNachname">Matrikelnummer nach Nachname 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>
|
||||
@@ -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 '<br><b>Matrikelnummer nicht vorhanden:</b>'.$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 '<br><b>Daten gefunden:</b> ';
|
||||
var_dump($data->retval);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'keine Einträge gefunden';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<br><b>Matrikelnummer nicht vorhanden:</b>'.$dvb->errormsg;
|
||||
}
|
||||
break;
|
||||
case 'getReservations':
|
||||
$result = $dvb->getReservations(DVB_BILDUNGSEINRICHTUNG_CODE, $_POST['studienjahr']);
|
||||
if(ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result))
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user