diff --git a/include/dvb.class.php b/include/dvb.class.php index c2b94802e..6d570a740 100644 --- a/include/dvb.class.php +++ b/include/dvb.class.php @@ -28,12 +28,13 @@ 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'); +require_once(dirname(__FILE__).'/prestudent.class.php'); 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'; - const DVB_URL_WEBSERVICE_ERSATZKZ = 'https://stubei-q.portal.at/rws/0.1/simpleStudentByErsatzKennzeichen.xml'; + const DVB_URL_WEBSERVICE_SVNR = 'https://stubei-q.portal.at/rws/0.2/simpleStudentBySozialVersicherungsnummer.xml'; + const DVB_URL_WEBSERVICE_ERSATZKZ = 'https://stubei-q.portal.at/rws/0.2/simpleStudentByErsatzKennzeichen.xml'; const DVB_URL_WEBSERVICE_RESERVIERUNG = 'https://stubei-q.portal.at/dvb/matrikelnummern/1.0/reservierung.xml'; const DVB_URL_WEBSERVICE_MELDUNG = 'https://stubei-q.portal.at/dvb/matrikelnummern/1.0/meldung.xml'; @@ -175,7 +176,7 @@ class dvb extends basis_db $person_meldung->vorname = $person->vorname; $person_meldung->nachname = $person->nachname; $person_meldung->geburtsdatum = $person->gebdatum; - $person_meldung->geschlecht = UPPER($person->geschlecht); + $person_meldung->geschlecht = mb_strtoupper($person->geschlecht); $person_meldung->staat = $person->staatsbuergerschaft; if ($person->svnr != '') $person_meldung->svnr = $person->svnr; @@ -183,18 +184,18 @@ class dvb extends basis_db // PLZ der Meldeadresse laden $adresse = new adresse(); if ($adresse->loadZustellAdresse($person->person_id)) - $person_meldung->plz = $row->plz; + $person_meldung->plz = $adresse->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'); + $person_meldung->matura = $datum_obj->formatDatum($prestudent->zgvdatum, 'Ymd'); } // Meldung der Vergabe der Matrikelnummer - if ($this->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person)) + if ($this->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person_meldung)) { // Matrikelnummer bei Person speichern $person->matr_nr = $matrikelnummer; @@ -434,7 +435,7 @@ class dvb extends basis_db $curl_info = curl_getinfo($curl); curl_close($curl); $this->debug('ResponseCode: '.$curl_info['http_code']); - $this->debug('ResponseData: '.print_r($response, true)); + $this->debug('ResponseData: '.print_r($xml_response, true)); if ($curl_info['http_code'] == '200') { diff --git a/include/person.class.php b/include/person.class.php index 9d6c48ec5..78642431d 100644 --- a/include/person.class.php +++ b/include/person.class.php @@ -63,6 +63,7 @@ class person extends basis_db public $zugangscode = null; // varchar(32) public $foto_sperre = false; // boolean public $matr_nr; //varchar(32) + public $bpk; //varchar(255) /** * Konstruktor - Uebergibt die Connection und laedt optional eine Person @@ -89,7 +90,8 @@ class person extends basis_db $qry = "SELECT person_id, sprache, anrede, titelpost, titelpre, nachname, vorname, vornamen, gebdatum, gebort, gebzeit, foto, anmerkung, homepage, svnr, ersatzkennzeichen, familienstand, anzahlkinder, aktiv, insertamum, insertvon, updateamum, updatevon, ext_id, - geschlecht, staatsbuergerschaft, geburtsnation, kurzbeschreibung, zugangscode, foto_sperre, matr_nr + geschlecht, staatsbuergerschaft, geburtsnation, kurzbeschreibung, zugangscode, foto_sperre, + matr_nr, bpk FROM public.tbl_person WHERE person_id = " . $this->db_add_param($personId, FHC_INTEGER); @@ -132,6 +134,7 @@ class person extends basis_db $this->zugangscode = $row->zugangscode; $this->foto_sperre = $this->db_parse_bool($row->foto_sperre); $this->matr_nr = $row->matr_nr; + $this->bpk = $row->bpk; } else { @@ -278,6 +281,12 @@ class person extends basis_db $this->errormsg = 'SVNR ist ungueltig'; return false; } + + if (mb_strlen($this->bpk) > 255) + { + $this->errormsg = 'BPK darf nicht laenger als 255 Zeichen sein'; + return false; + } } if ($this->svnr != '') @@ -425,7 +434,8 @@ class person extends basis_db $qry = 'INSERT INTO public.tbl_person (sprache, anrede, titelpost, titelpre, nachname, vorname, vornamen, gebdatum, gebort, gebzeit, foto, anmerkung, homepage, svnr, ersatzkennzeichen, familienstand, anzahlkinder, aktiv, insertamum, insertvon, updateamum, updatevon, - geschlecht, geburtsnation, staatsbuergerschaft, kurzbeschreibung, zugangscode, foto_sperre, matr_nr) + geschlecht, geburtsnation, staatsbuergerschaft, kurzbeschreibung, zugangscode, + foto_sperre, matr_nr, bpk) VALUES('.$this->db_add_param($this->sprache).','. $this->db_add_param($this->anrede).','. $this->db_add_param($this->titelpost).','. @@ -454,7 +464,8 @@ class person extends basis_db $this->db_add_param($this->kurzbeschreibung).','. $this->db_add_param($this->zugangscode).','. $this->db_add_param($this->foto_sperre, FHC_BOOLEAN).','. - $this->db_add_param($this->matr_nr).');'; + $this->db_add_param($this->matr_nr).','. + $this->db_add_param($this->bpk).');'; } else { @@ -492,7 +503,8 @@ class person extends basis_db ' kurzbeschreibung='.$this->db_add_param($this->kurzbeschreibung).','. ' foto_sperre='.$this->db_add_param($this->foto_sperre, FHC_BOOLEAN).','. ' zugangscode='.$this->db_add_param($this->zugangscode).','. - ' matr_nr ='.$this->db_add_param($this->matr_nr). + ' matr_nr ='.$this->db_add_param($this->matr_nr).','. + ' bpk = '.$this->db_add_param($this->bpk). ' WHERE person_id='.$this->person_id.';'; } @@ -592,6 +604,7 @@ class person extends basis_db $l->kurzbeschreibung = $row->kurzbeschreibung; $l->foto_sperre = $this->db_parse_bool($row->foto_sperre); $l->matr_nr = $row->matr_nr; + $l->bpk = $row->bpk; $this->personen[] = $l; } } @@ -848,6 +861,7 @@ class person extends basis_db $this->zugangscode = $row->zugangscode; $this->foto_sperre = $this->db_parse_bool($row->foto_sperre); $this->matr_nr = $row->matr_nr; + $this->bpk = $row->bpk; } else { @@ -965,6 +979,7 @@ class person extends basis_db $this->updateaktivvon = $row->updateaktivvon; $this->updateaktivam = $row->updateaktivam; $this->aktivierungscode = $row->aktivierungscode; + $this->bpk = $row->bpk; return true; } else diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index a3b93cbb6..254b0be47 100755 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -2235,6 +2235,18 @@ if ($result = $db->db_query("SELECT * FROM system.tbl_webservicetyp WHERE webser } } +//Spalte bpk in public.tbl_person +if(!$result = @$db->db_query("SELECT bpk FROM public.tbl_person LIMIT 1")) +{ + $qry = "ALTER TABLE public.tbl_person ADD COLUMN bpk varchar(255); + COMMENT ON COLUMN public.tbl_person.bpk IS 'Bereichsspezifisches Personenkennzeichen';"; + + if(!$db->db_query($qry)) + echo 'public.tbl_person: '.$db->db_last_error().'
'; + else + echo '
public.tbl_person: Spalte bpk hinzugefuegt'; +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -2428,7 +2440,7 @@ $tabellen=array( "public.tbl_ortraumtyp" => array("ort_kurzbz","hierarchie","raumtyp_kurzbz"), "public.tbl_organisationseinheit" => array("oe_kurzbz", "oe_parent_kurzbz", "bezeichnung","organisationseinheittyp_kurzbz", "aktiv","mailverteiler","freigabegrenze","kurzzeichen","lehre","standort","warn_semesterstunden_frei","warn_semesterstunden_fix","standort_id"), "public.tbl_organisationseinheittyp" => array("organisationseinheittyp_kurzbz", "bezeichnung", "beschreibung"), - "public.tbl_person" => array("person_id","staatsbuergerschaft","geburtsnation","sprache","anrede","titelpost","titelpre","nachname","vorname","vornamen","gebdatum","gebort","gebzeit","foto","anmerkung","homepage","svnr","ersatzkennzeichen","familienstand","geschlecht","anzahlkinder","aktiv","insertamum","insertvon","updateamum","updatevon","ext_id","bundesland_code","kompetenzen","kurzbeschreibung","zugangscode", "foto_sperre","matr_nr","zugangscode_timestamp","udf_values"), + "public.tbl_person" => array("person_id","staatsbuergerschaft","geburtsnation","sprache","anrede","titelpost","titelpre","nachname","vorname","vornamen","gebdatum","gebort","gebzeit","foto","anmerkung","homepage","svnr","ersatzkennzeichen","familienstand","geschlecht","anzahlkinder","aktiv","insertamum","insertvon","updateamum","updatevon","ext_id","bundesland_code","kompetenzen","kurzbeschreibung","zugangscode", "foto_sperre","matr_nr","zugangscode_timestamp","udf_values","bpk"), "public.tbl_person_fotostatus" => array("person_fotostatus_id","person_id","fotostatus_kurzbz","datum","insertamum","insertvon","updateamum","updatevon"), "public.tbl_personfunktionstandort" => array("personfunktionstandort_id","funktion_kurzbz","person_id","standort_id","position","anrede"), "public.tbl_preincoming" => array("preincoming_id","person_id","mobilitaetsprogramm_code","zweck_code","firma_id","universitaet","aktiv","bachelorthesis","masterthesis","von","bis","uebernommen","insertamum","insertvon","updateamum","updatevon","anmerkung","zgv","zgv_ort","zgv_datum","zgv_name","zgvmaster","zgvmaster_datum","zgvmaster_ort","zgvmaster_name","program_name","bachelor","master","jahre","person_id_emergency","person_id_coordinator_dep","person_id_coordinator_int","code","deutschkurs1","deutschkurs2","research_area","deutschkurs3","ext_id"), diff --git a/system/matrikelnummer_clearing_import.php b/system/matrikelnummer_clearing_import.php new file mode 100644 index 000000000..4ab9d6dea --- /dev/null +++ b/system/matrikelnummer_clearing_import.php @@ -0,0 +1,152 @@ +, + */ +/** + * Clearing Import + * Importiert Daten aus dem Matrikelnummer Clearing + */ +require_once('../config/vilesci.config.inc.php'); +require_once('../include/functions.inc.php'); +require_once('../include/benutzerberechtigung.class.php'); +require_once('../include/person.class.php'); + +$uid = get_uid(); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); +if(!$rechte->isBerechtigt('admin', null, 'suid')) + die($rechte->errormsg); + +echo ' + + + + Matrikelnummer Clearing Import + + +

Matrikelnummer Clearing Import

+Über diese Seite kann das Ergebnis des Matrikelnummer Clearings importiert werden. +Wähle dazu das Antwort-XML des Matrikelnummer clearings aus, das importiert werden soll. +Matrikelnummer und BPK wird aus dem XML importiert.

'; +echo '
+ +'; + +if(isset($_FILES['datei'])) +{ + $db = new basis_db(); + $dom = new DOMDocument(); + $dom->load($_FILES['datei']['tmp_name']); + $studierende = $dom->getElementsByTagName('studierende'); + if(isset($studierende[0])) + { + $domnodes_personen = $studierende[0]->getElementsByTagName('personen'); + foreach($domnodes_personen as $row_person) + { + $personid_node = $row_person->getElementsByTagName('personId'); + if(isset($personid_node[0])) + { + $node_bpk = $personid_node[0]->getElementsByTagName('bpk'); + $node_personenkennzeichen = $personid_node[0]->getElementsByTagName('personenkennzeichen'); + $node_matrikelnr = $personid_node[0]->getElementsByTagName('matrikelnummer'); + + $bpk = ''; + $personenkennzeichen = ''; + $matrikelnr = ''; + + if (isset($node_bpk[0])) + $bpk = $node_bpk[0]->textContent; + if (isset($node_personenkennzeichen[0])) + $personenkennzeichen = $node_personenkennzeichen[0]->textContent; + if (isset($node_matrikelnr[0])) + $matrikelnr = $node_matrikelnr[0]->textContent; + + if($personenkennzeichen != '') + { + $qry = " + SELECT + person_id + FROM + campus.vw_student + WHERE + matrikelnr=".$db->db_add_param($personenkennzeichen); + + if($result = $db->db_query($qry)) + { + if($db->db_num_rows($result) == 1) + { + if($row = $db->db_fetch_object($result)) + { + $person_id = $row->person_id; + $person = new person(); + if($person->load($person_id)) + { + $person->matr_nr = $matrikelnr; + + if($bpk != '' && $bpk != '****************************') + $person->bpk = $bpk; + + if($person->save()) + { + echo '
Daten von '.$personenkennzeichen.' importiert'; + } + else + { + echo '
Fehler beim Import von '.$personenkennzeichen.':'.$person->errormsg; + } + } + else + { + echo '
Person mit PersonID '.$person_id.' konnte nicht geladen werden'; + } + } + else + { + echo '
Failed to get Results'; + } + } + else + { + echo 'Person mit Perskz: '.$personenkennzeichen.' konnte nicht eindeutig gefunden werden'; + } + } + else + { + echo 'Fehler beim Laden der Person mit Perskz: '.$personenkennzeichen.''; + } + } + else + { + echo '
Failed to get Personenkennzeichen'; + } + } + else + { + echo '
personID Tag no present -> wrong xml?'; + } + } + echo '
Import abgeschlossen'; + } + else + { + echo '
studierende Tag not present -> wrong xml?'; + } +} + +echo ' +'; diff --git a/vilesci/cronjobs/matrikelnummern.php b/vilesci/cronjobs/matrikelnummern.php new file mode 100644 index 000000000..669dfb74f --- /dev/null +++ b/vilesci/cronjobs/matrikelnummern.php @@ -0,0 +1,103 @@ + + */ +/** + * Erfragt die Matrikelnummern von Personen beim Datenverbund + * Wenn keine bestehende Matrikelnummer gefunden wird, wird eine neue Matrikelnummer angefordert + */ +require_once(dirname(__FILE__).'/../../config/vilesci.config.inc.php'); +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'); + +if (!$db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + +$limit = ''; +$debug = false; + +// Wenn das Script nicht ueber Commandline gestartet wird, muss eine +// Authentifizierung stattfinden +if (php_sapi_name() != 'cli') +{ + // Benutzerdefinierte Variablen laden + $user = get_uid(); + loadVariables($user); + + // Berechtigungen pruefen + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); + + if (!$rechte->isBerechtigt('admin', null, 'suid')) + die('Sie haben keine Berechtigung für diese Seite'); + + if(isset($_GET['debug'])) + $debug = ($_GET['debug']=='true'?true:false); + + if(isset($_GET['limit']) && is_numeric($_GET['limit'])) + $limit = $_GET['limit']; +} +else +{ + // Commandline Paramter parsen bei Aufruf ueber Cronjob + // zb php matrikelnummer.php --limit 100 --debug true + $longopt = array( + "limit:", + "debug:" + ); + $commandlineparams = getopt('', $longopt); + if (isset($commandlineparams['limit']) && is_numeric($commandlineparams['limit'])) + $limit = $commandlineparams['limit']; + if (isset($commandlineparams['debug'])) + $debug = ($commandlineparams['debug']=='true'?true:false); +} + +$matrikelnummer_added = 0; +$webservice = new dvb(DVB_USERNAME, DVB_PASSWORD, $debug); + +$qry = " + SELECT + distinct person_id + FROM + public.tbl_person + JOIN public.tbl_benutzer USING(person_id) + JOIN public.tbl_student ON(tbl_student.student_uid=tbl_benutzer.uid) + WHERE + 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)"; + +if ($limit != '') + $qry.=" LIMIT ".$limit; + +$db = new basis_db(); +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'; + else + echo "\n
".$row->person_id.' Failed:'.$webservice->errormsg; + } +} +if($debug) + echo $webservice->debug_output;