mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-23 09:52:22 +00:00
Konfiguration für Datenverbund Services hinzugefügt
Testclient für Datenverbund erweitert für manuelle Abfrage und Meldung einzelner Personen und Logging von Datenverbund Requests
This commit is contained in:
@@ -40,7 +40,7 @@ define('XML_ROOT', 'http://www.fhcomlete.org/build/rdf/');
|
||||
// Pfad zu Document Root
|
||||
define('DOC_ROOT', '/var/www/html/build/');
|
||||
// URL zu CIS
|
||||
define('CIS_ROOT', 'http://www.fhcomlete.org/build/cis/');
|
||||
define('CIS_ROOT', 'http://www.fhcomlete.org/build/');
|
||||
|
||||
// Externe Funktionen - Unterordner im Include-Verzeichnis
|
||||
define('EXT_FKT_PATH', 'tw');
|
||||
@@ -185,4 +185,14 @@ define('SIGNATUR_USER', 'username');
|
||||
define('SIGNATUR_PASSWORD', 'password');
|
||||
// Signaturprofil das verwendet werden soll
|
||||
define('SIGNATUR_DEFAULT_PROFILE', 'FHC_AMT_GROSS_DE');
|
||||
|
||||
/**
|
||||
* Datenverbund Anbindung
|
||||
*/
|
||||
// Code der Bildungseinrichtung
|
||||
define('DVB_BILDUNGSEINRICHTUNG_CODE','XX');
|
||||
// Username
|
||||
define('DVB_USERNAME','username');
|
||||
// Passwort
|
||||
define('DVB_PASSWORD','passwort');
|
||||
?>
|
||||
|
||||
+248
-21
@@ -23,8 +23,13 @@
|
||||
* Abfrage und Vergabe von Matrikelnummern
|
||||
*/
|
||||
require_once(dirname(__FILE__).'/basis_db.class.php');
|
||||
require_once(dirname(__FILE__).'/person.class.php');
|
||||
require_once(dirname(__FILE__).'/student.class.php');
|
||||
require_once(dirname(__FILE__).'/studiensemester.class.php');
|
||||
require_once(dirname(__FILE__).'/adresse.class.php');
|
||||
require_once(dirname(__FILE__).'/webservicelog.class.php');
|
||||
|
||||
class dvb
|
||||
class dvb extends basis_db
|
||||
{
|
||||
const DVB_URL_WEBSERVICE_OAUTH = 'https://stubei-q.portal.at/dvb/oauth/token';
|
||||
const DVB_URL_WEBSERVICE_SVNR = 'https://stubei-q.portal.at/rws/0.1/simpleStudentBySozialVersicherungsnummer.xml';
|
||||
@@ -35,7 +40,7 @@ class dvb
|
||||
public $authentication;
|
||||
private $username;
|
||||
private $password;
|
||||
private $debug;
|
||||
protected $debug;
|
||||
public $debug_output = '';
|
||||
|
||||
/**
|
||||
@@ -51,6 +56,170 @@ class dvb
|
||||
$this->debug = $debug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Versucht die Matrikelnummer für eine Person zu ermitteln.
|
||||
* Wenn die Person noch keine Matrikelnummer besitzt, wird eine neue Matrikelnummer
|
||||
* angefordert und der Person zugeordnet
|
||||
* @param int $person_id ID der Person.
|
||||
* @return boolean true wenn Erfolgreich, false im Fehlerfall
|
||||
*/
|
||||
public function assignMatrikelnummer($person_id)
|
||||
{
|
||||
$person = new person();
|
||||
if (!$person->load($person_id))
|
||||
{
|
||||
$this->errormsg = $person->errormsg;
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($person->svnr != '')
|
||||
{
|
||||
$matrikelnummer = $this->getMatrikelnrBySVNR($person->svnr);
|
||||
|
||||
if ($matrikelnummer === false && $this->errormsg != '')
|
||||
{
|
||||
$this->logRequest($person, 'getMatrikelnrBySVNR', false);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
elseif ($person->ersatzkennzeichen != '')
|
||||
{
|
||||
$matrikelnummer = $this->getMatrikelnrByErsatzkennzeichen($person->ersatzkennzeichen);
|
||||
|
||||
if ($matrikelnummer === false && $this->errormsg != '')
|
||||
{
|
||||
$this->logRequest($person, 'getMatrikelnrByErsatzkennzeichen', false);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Person braucht SVNR oder Ersatzkennzeichen';
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($matrikelnummer !== false && $matrikelnummer != '')
|
||||
{
|
||||
// Matrikelnummer wurde gefunden
|
||||
// Bei Person speichern
|
||||
$person->matr_nr = $matrikelnummer;
|
||||
if ($person->save())
|
||||
{
|
||||
$this->logRequest($person, 'assignExistingMatrikelnummer', true, $matrikelnummer);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Es wurde noch keine Matrikelnummer zu dieser Person zugeordnet
|
||||
// Es wird eine neue Matrikelnummer aus dem Kontingent angefordert
|
||||
// und an die Person vergeben
|
||||
|
||||
// Studienjahr ermitteln
|
||||
$qry = "
|
||||
SELECT
|
||||
studiensemester_kurzbz, prestudent_id
|
||||
FROM
|
||||
public.tbl_student
|
||||
JOIN public.tbl_prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus USING(prestudent_id)
|
||||
JOIN public.tbl_benutzer ON(tbl_student.student_uid = tbl_benutzer.uid)
|
||||
WHERE
|
||||
tbl_prestudent.person_id=".$this->db_add_param($person->person_id)."
|
||||
AND tbl_benutzer.aktiv
|
||||
AND tbl_prestudentstatus.status_kurzbz='Student'
|
||||
AND tbl_prestudent.bismelden
|
||||
ORDER BY tbl_prestudentstatus.datum desc LIMIT 1
|
||||
";
|
||||
|
||||
$prestudent_id = '';
|
||||
$studiensemester_kurzbz = '';
|
||||
|
||||
if ($result = $this->db_query($qry))
|
||||
{
|
||||
if ($row = $this->db_fetch_object($result))
|
||||
{
|
||||
$studiensemester_kurzbz = $row->studiensemester_kurzbz;
|
||||
$prestudent_id = $row->prestudent_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->logRequest($person, 'assignNewMatrikelnummer', false);
|
||||
$this->errormsg = 'Fehler beim Ermitteln des Studienjahrs für diese Person';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->logRequest($person, 'assignNewMatrikelnummer', false);
|
||||
$this->errormsg = 'Fehler beim Ermitteln des Studienjahrs für diese Person';
|
||||
return false;
|
||||
}
|
||||
|
||||
$studienjahr = substr($studiensemester_kurzbz, 4);
|
||||
$art = substr($studiensemester_kurzbz, 0, 2);
|
||||
if ($art == 'SS')
|
||||
$studienjahr = $studienjahr - 1;
|
||||
|
||||
// Erstaustattung im Jahr 2018. Alle davor bekommen 18er Nummern
|
||||
if ($studienjahr < 2018)
|
||||
$studienjahr = 2018;
|
||||
|
||||
// Neue Matrikelnummer aus Kontingent anfordern
|
||||
$kontingent = $this->getKontingent(DVB_BILDUNGSEINRICHTUNG_CODE, $studienjahr);
|
||||
|
||||
if ($kontingent !== false && isset($kontingent[0]))
|
||||
{
|
||||
$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 = UPPER($person->geschlecht);
|
||||
$person_meldung->staat = $person->staatsbuergerschaft;
|
||||
if ($person->svnr != '')
|
||||
$person_meldung->svnr = $person->svnr;
|
||||
|
||||
// PLZ der Meldeadresse laden
|
||||
$adresse = new adresse();
|
||||
if ($adresse->loadZustellAdresse($person->person_id))
|
||||
$person_meldung->plz = $row->plz;
|
||||
|
||||
// ZGV Datum laden falls vorhanden
|
||||
$prestudent = new prestudent();
|
||||
if ($prestudent->load($prestudent_id) && $prestudent->zgvdatum != '')
|
||||
{
|
||||
$datum_obj = new datum();
|
||||
$person->matura = $datum_obj->formatDatum($matura, 'Ymd');
|
||||
}
|
||||
|
||||
// Meldung der Vergabe der Matrikelnummer
|
||||
if ($this->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person))
|
||||
{
|
||||
// Matrikelnummer bei Person speichern
|
||||
$person->matr_nr = $matrikelnummer;
|
||||
if ($person->save())
|
||||
{
|
||||
$this->logRequest($person, 'assignNewMatrikelnummer', true, $matrikelnummer);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->logRequest($person, 'assignNewgMatrikelnummer', false, $person_meldung);
|
||||
$this->errormsg .= 'Vergabe fehlgeschlagen';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->logRequest($person, 'assignNewgMatrikelnummer', false, $studienjahr);
|
||||
$this->errormsg .= 'Failed to get Kontingent';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a OAuth2 Authentication and returns the OAuth Bearer Token
|
||||
* @return boolean true wenn erfolgreich, false im Fehlerfall
|
||||
@@ -113,7 +282,8 @@ class dvb
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$json_response;
|
||||
$this->errormsg = 'Authentication failed with HTTP Code:'.$curl_info['http_code'];
|
||||
$this->errormsg .= ' and Response:'.$json_response;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -145,10 +315,11 @@ class dvb
|
||||
{
|
||||
if ($this->tokenIsExpired())
|
||||
{
|
||||
$this->authenticate();
|
||||
if (!$this->authenticate())
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->debug('getMatirkelnrBySVNR');
|
||||
$this->debug('getMatrikelnrBySVNR');
|
||||
|
||||
$curl = curl_init();
|
||||
|
||||
@@ -176,7 +347,9 @@ class dvb
|
||||
$curl_info = curl_getinfo($curl);
|
||||
curl_close($curl);
|
||||
|
||||
$this->debug('Response '.$curl_info['http_code']);
|
||||
$this->debug('ResponseCode: '.$curl_info['http_code']);
|
||||
$this->debug('ResponseData: '.print_r($response, true));
|
||||
|
||||
if ($curl_info['http_code'] == '200')
|
||||
{
|
||||
/* Example Response:
|
||||
@@ -194,11 +367,22 @@ class dvb
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response);
|
||||
$namespace = 'http://www.brz.gv.at/datenverbund-unis';
|
||||
$domnodes_matrikelnummer = $dom->getElementsByTagNameNS($namespace, 'matrikelNummer');
|
||||
foreach ($domnodes_matrikelnummer as $row)
|
||||
$domnodes_student = $dom->getElementsByTagNameNS($namespace, 'student');
|
||||
foreach ($domnodes_student as $row_student)
|
||||
{
|
||||
// Found
|
||||
return $row->textContent;
|
||||
// Wenn nicht gesperrt und fix vergeben
|
||||
$ingesamtpool = $row_student->getAttribute('inGesamtPool');
|
||||
$gesperrt = $row_student->getAttribute('gesperrt');
|
||||
|
||||
if ($ingesamtpool == 'true' && $gesperrt == 'false')
|
||||
{
|
||||
$domnodes_matrikelnummer = $row_student->getElementsByTagNameNS($namespace, 'matrikelNummer');
|
||||
foreach ($domnodes_matrikelnummer as $row)
|
||||
{
|
||||
// Found
|
||||
return $row->textContent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->errormsg = '';
|
||||
@@ -220,7 +404,8 @@ class dvb
|
||||
{
|
||||
if ($this->tokenIsExpired())
|
||||
{
|
||||
$this->authenticate();
|
||||
if (!$this->authenticate())
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->debug('getMatrikelnrByErsatzkennzeichen');
|
||||
@@ -248,7 +433,8 @@ class dvb
|
||||
$xml_response = curl_exec($curl);
|
||||
$curl_info = curl_getinfo($curl);
|
||||
curl_close($curl);
|
||||
$this->debug('Response: '.$curl_info['http_code']);
|
||||
$this->debug('ResponseCode: '.$curl_info['http_code']);
|
||||
$this->debug('ResponseData: '.print_r($response, true));
|
||||
|
||||
if ($curl_info['http_code'] == '200')
|
||||
{
|
||||
@@ -315,12 +501,26 @@ class dvb
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($xml_response);
|
||||
$namespace = 'http://www.brz.gv.at/datenverbund-unis';
|
||||
$domnodes_matrikelnummer = $dom->getElementsByTagNameNS($namespace, 'matrikelNummer');
|
||||
foreach ($domnodes_matrikelnummer as $row)
|
||||
$domnodes_student = $dom->getElementsByTagNameNS($namespace, 'student');
|
||||
foreach ($domnodes_student as $row_student)
|
||||
{
|
||||
// Found
|
||||
return $row->textContent;
|
||||
// Wenn nicht gesperrt und fix vergeben
|
||||
$ingesamtpool = $row_student->getAttribute('inGesamtPool');
|
||||
$gesperrt = $row_student->getAttribute('gesperrt');
|
||||
|
||||
if ($ingesamtpool == 'true' && $gesperrt == 'false')
|
||||
{
|
||||
$domnodes_matrikelnummer = $row_student->getElementsByTagNameNS($namespace, 'matrikelNummer');
|
||||
foreach ($domnodes_matrikelnummer as $row)
|
||||
{
|
||||
// Found
|
||||
return $row->textContent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->errormsg = '';
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -342,7 +542,8 @@ class dvb
|
||||
|
||||
if ($this->tokenIsExpired())
|
||||
{
|
||||
$this->authenticate();
|
||||
if (!$this->authenticate())
|
||||
return false;
|
||||
}
|
||||
|
||||
$curl = curl_init();
|
||||
@@ -371,7 +572,8 @@ class dvb
|
||||
$curl_info = curl_getinfo($curl);
|
||||
curl_close($curl);
|
||||
|
||||
$this->debug('Response: '.$curl_info['http_code']);
|
||||
$this->debug('ResponseCode: '.$curl_info['http_code']);
|
||||
$this->debug('ResponseData: '.print_r($response, true));
|
||||
|
||||
/* 200 ok
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
@@ -417,7 +619,8 @@ class dvb
|
||||
|
||||
if ($this->tokenIsExpired())
|
||||
{
|
||||
$this->authenticate();
|
||||
if (!$this->authenticate())
|
||||
return false;
|
||||
}
|
||||
|
||||
$data = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
@@ -457,7 +660,8 @@ class dvb
|
||||
$curl_info = curl_getinfo($curl);
|
||||
curl_close($curl);
|
||||
|
||||
$this->debug('Response: '.$curl_info['http_code']);
|
||||
$this->debug('ResponseCode: '.$curl_info['http_code']);
|
||||
$this->debug('ResponseData: '.print_r($response, true));
|
||||
|
||||
if ($curl_info['http_code'] == '200')
|
||||
{
|
||||
@@ -491,7 +695,8 @@ class dvb
|
||||
|
||||
if ($this->tokenIsExpired())
|
||||
{
|
||||
$this->authenticate();
|
||||
if (!$this->authenticate())
|
||||
return false;
|
||||
}
|
||||
|
||||
$data = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
@@ -651,4 +856,26 @@ class dvb
|
||||
if ($this->debug)
|
||||
$this->debug_output .= "\n<br>".date('Y-m-d H:i:s').': '.htmlentities($msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erstellt einen Logeintrag
|
||||
* @param object $person Personen objekt.
|
||||
* @param string $typ Art des Requests.
|
||||
* @param bool $result True wen Erfolgreich, false wenn Fehlerhaft.
|
||||
* @param object $data Zusatzdaten die Übermittelt wurden und geloggt werden sollen.
|
||||
* @return void
|
||||
*/
|
||||
public function logRequest($person, $typ, $result, $data = null)
|
||||
{
|
||||
$webservicelog = new webservicelog();
|
||||
|
||||
$webservicelog->webservicetyp_kurzbz = 'dvb';
|
||||
$webservicelog->request_id = $person->person_id;
|
||||
$webservicelog->beschreibung = $typ;
|
||||
$webservicelog->request_data = ($result?'SUCCESS':'FAILED').' '.$this->errormsg;
|
||||
if (!is_null($data))
|
||||
$webservicelog->request_data .= ' '.print_r($data, true);
|
||||
|
||||
$webservicelog->save();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ $staat = filter_input(INPUT_POST, 'staat');
|
||||
$matura = filter_input(INPUT_POST, 'matura');
|
||||
$svnr = filter_input(INPUT_POST, 'svnr');
|
||||
$ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen');
|
||||
$person_id = filter_input(INPUT_POST, 'person_id');
|
||||
|
||||
?><!DOCTYPE html>
|
||||
<html>
|
||||
@@ -73,6 +74,7 @@ $ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen');
|
||||
<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>
|
||||
<li><a href="datenverbund_client.php?action=assignMatrikelnummer">Gesamtprozess (Abfrage, ggf Vergabemeldung, Speichern bei Person)</a></li>
|
||||
</ul>
|
||||
<br><br>
|
||||
<form action="<?php echo $_SERVER['PHP_SELF'].'?action='.$action; ?>" method="post">
|
||||
@@ -87,7 +89,7 @@ $ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen');
|
||||
* @param int $maxlength Maximallaenge des Eingabefeldes.
|
||||
* @return void
|
||||
*/
|
||||
function printrow($name, $title, $value, $hint = '', $maxlength = 15)
|
||||
function printrow($name, $title, $value, $hint = '', $maxlength = 15, $type = 'text')
|
||||
{
|
||||
global $db;
|
||||
|
||||
@@ -95,14 +97,14 @@ $ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen');
|
||||
<tr>
|
||||
<td align="right">'.$title.':</td>
|
||||
<td>
|
||||
<input name="'.$name.'" type="text" size="30" maxlength="'.$maxlength.'"
|
||||
<input name="'.$name.'" type="'.$type.'" size="30" maxlength="'.$maxlength.'"
|
||||
value="'.$db->convert_html_chars($value).'"> '.$hint.'
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
printrow('username', 'Username', $username, '', 100);
|
||||
printrow('password', 'Passwort', $password, '', 100);
|
||||
printrow('password', 'Passwort', $password, '', 100, 'password');
|
||||
|
||||
switch($action)
|
||||
{
|
||||
@@ -146,6 +148,10 @@ $ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen');
|
||||
printrow('matura', 'Maturadatum', $matura, 'Format: YYYYMMDD (optional)', 10);
|
||||
break;
|
||||
|
||||
case 'assignMatrikelnummer':
|
||||
printrow('person_id', 'PersonID', $person_id);
|
||||
break;
|
||||
|
||||
default:
|
||||
echo "Unknown action";
|
||||
break;
|
||||
@@ -232,6 +238,15 @@ if (isset($_REQUEST['submit']))
|
||||
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
|
||||
break;
|
||||
|
||||
case 'assignMatrikelnummer':
|
||||
if($dvb->assignMatrikelnummer($person_id))
|
||||
{
|
||||
echo '<br><b>OK</b>';
|
||||
}
|
||||
else
|
||||
echo '<br><b>Fehlgeschlagen:</b>'.$dvb->errormsg;
|
||||
break;
|
||||
|
||||
default:
|
||||
echo "Unknown action";
|
||||
break;
|
||||
|
||||
@@ -2221,6 +2221,20 @@ if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname =
|
||||
}
|
||||
}
|
||||
|
||||
// Webservicetyp dvb
|
||||
if ($result = $db->db_query("SELECT * FROM system.tbl_webservicetyp WHERE webservicetyp_kurzbz='dvb'"))
|
||||
{
|
||||
if ($db->db_num_rows($result) == 0)
|
||||
{
|
||||
$qry = "INSERT INTO system.tbl_webservicetyp(webservicetyp_kurzbz, beschreibung) VALUES('dvb','Datenverbund');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>WebserviceLog: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo 'Webservicelog Typ für Datenverbund hinzugefügt';
|
||||
}
|
||||
}
|
||||
|
||||
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
|
||||
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user