diff --git a/include/dvb.class.php b/include/dvb.class.php index 8595ed2f3..994896bc6 100644 --- a/include/dvb.class.php +++ b/include/dvb.class.php @@ -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 12345678 Max + sdfaASDAFasdfads+asasdffd= Mustermann M 1999-02-19 @@ -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 = ' @@ -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 = ' @@ -792,6 +886,18 @@ class dvb extends basis_db Korrektur der Matrikelnummer 12345678 + + ED10065 + E + bPK + fehlt oder anders als im Datenverbund ermittelt(Yl329U/jt7fjoo5p+z4lH37ZKrg=) + + 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) + + Yl329keinEchtesbPK4lH37ZKrg= + */ @@ -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: + + + 1234567890ABCDEFGH= + + + Max + Mustermann + M + 19901231 + + + + + + + + Example Error: + + + + + + ED10065 + E + bPK + fehlt oder anders als im Datenverbund ermittelt (keine bPK gefunden) + + 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) + + keine bPK gefunden + + + + + */ + + $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
".date('Y-m-d H:i:s').': '.htmlentities($msg); + $this->debug_output .= "\n".date('Y-m-d H:i:s').': '.$msg; } /** diff --git a/include/errorhandler.class.php b/include/errorhandler.class.php new file mode 100644 index 000000000..5ba74041b --- /dev/null +++ b/include/errorhandler.class.php @@ -0,0 +1,91 @@ +, + */ + /** + * 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; + } +} diff --git a/soap/datenverbund_client.php b/soap/datenverbund_client.php index 1fbf172f5..384712bce 100644 --- a/soap/datenverbund_client.php +++ b/soap/datenverbund_client.php @@ -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');
  • Matrikelnummer Kontingent anfordern
  • Matrikelnummer Vergabe melden
  • Gesamtprozess (Abfrage, ggf Vergabemeldung, Speichern bei Person)
  • +
  • BPK ermitteln
  • + Portal: ".DVB_PORTAL; + echo "
    Bildungseinrichtung: ".DVB_BILDUNGSEINRICHTUNG_CODE; + ?>

    @@ -103,9 +109,6 @@ $person_id = filter_input(INPUT_POST, 'person_id'); '; } - 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 '
    OAuth Bearer Token: '.$dvb->authentication->access_token; else echo '
    Failed: '.$dvb->errormsg; break; case 'getBySvnr': - $matrikelnr = $dvb->getMatrikelnrBySVNR($_POST['svnr']); - if ($matrikelnr !== false) - echo '
    Matrikelnummer vorhanden:'.$matrikelnr; + $data = $dvb->getMatrikelnrBySVNR($_POST['svnr']); + + if(ErrorHandler::isSuccess($data)) + { + echo '
    Matrikelnummer vorhanden: '.$data->retval->matrikelnummer; + if(isset($data->retval->bpk) && $data->retval->bpk!='') + echo '
    BPK vorhanden: '.$data->retval->bpk; + } else - echo '
    Matrikelnummer nicht vorhanden:'.$dvb->errormsg; + { + echo '
    Matrikelnummer nicht vorhanden:'.$dvb->errormsg; + } break; case 'getByErsatzkennzeichen': - $matrikelnr = $dvb->getMatrikelnrByErsatzkennzeichen($_POST['ersatzkennzeichen']); - if ($matrikelnr !== false) - echo '
    Matrikelnummer vorhanden:'.$matrikelnr; + $data = $dvb->getMatrikelnrByErsatzkennzeichen($_POST['ersatzkennzeichen']); + + if (ErrorHandler::isSuccess($data)) + echo '
    Matrikelnummer vorhanden:'.$data->retval->matrikelnummer; else echo '
    Matrikelnummer nicht vorhanden:'.$dvb->errormsg; break; case 'getReservations': - $reservierteNummern = $dvb->getReservations($_POST['bildungseinrichtung'], $_POST['studienjahr']); - - if ($reservierteNummern !== false) - echo '
    Reservierte Nummern:'.print_r($reservierteNummern, true); - else - echo '
    Fehlgeschlagen:'.$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 '
    Reservierte Nummern:'.print_r($reservierteNummern, true); + else + echo '
    Fehlgeschlagen:'.$dvb->errormsg; + } break; case 'getKontingent': - $kontingent = $dvb->getKontingent($_POST['bildungseinrichtung'], $_POST['studienjahr']); + $result = $dvb->getKontingent(DVB_BILDUNGSEINRICHTUNG_CODE, $_POST['studienjahr']); - if ($kontingent !== false) - echo '
    Kontingent:'.print_r($kontingent, true); - else - echo '
    Fehlgeschlagen:'.$dvb->errormsg; + if(ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result)) + { + $kontingent = $result->retval->kontingent; + if ($kontingent !== false) + echo '
    Kontingent:'.print_r($kontingent, true); + else + echo '
    Fehlgeschlagen:'.$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 '
    Erfolgreich gemeldet'; else echo '
    Fehlgeschlagen:'.$dvb->errormsg; break; case 'assignMatrikelnummer': - if($dvb->assignMatrikelnummer($person_id)) + $result = $dvb->assignMatrikelnummer($person_id); + if(ErrorHandler::isSuccess($result)) { echo '
    OK'; } @@ -247,6 +261,16 @@ if (isset($_REQUEST['submit'])) echo '
    Fehlgeschlagen:'.$dvb->errormsg; break; + case 'getBPK': + $data = $dvb->getBPK($person_id); + if(ErrorHandler::isSuccess($data)) + { + echo '
    OK BPK: '.$data->retval->bpk; + } + else + echo '
    Fehlgeschlagen:'.$dvb->errormsg; + break; + default: echo "Unknown action"; break; diff --git a/vilesci/cronjobs/matrikelnummern.php b/vilesci/cronjobs/matrikelnummern.php index 669dfb74f..66bec957c 100644 --- a/vilesci/cronjobs/matrikelnummern.php +++ b/vilesci/cronjobs/matrikelnummern.php @@ -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 = '
    '; // 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
    ".$row->person_id.' OK'; + $data = $webservice->assignMatrikelnummer($row->person_id); + if(ErrorHandler::isSuccess($data)) + echo $nl.$row->person_id.' OK'; else - echo "\n
    ".$row->person_id.' Failed:'.$webservice->errormsg; + echo $nl.$row->person_id.' Failed:'.$webservice->errormsg; } } if($debug)