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