Neue Spalte bpk zu Tabelle public.tbl_person hinzugefügt

Cronjob für automatische Abfrage von Matrikelnummern hinzugefügt
Script für import der Matriklenummer Clearing Daten hinzugefügt
This commit is contained in:
Andreas Österreicher
2018-06-28 18:55:55 +02:00
parent 01ca9d61ce
commit 9822e07ac8
5 changed files with 295 additions and 12 deletions
+8 -7
View File
@@ -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')
{
+19 -4
View File
@@ -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
+13 -1
View File
@@ -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 '<strong>public.tbl_person: '.$db->db_last_error().'</strong><br>';
else
echo '<br>public.tbl_person: Spalte bpk hinzugefuegt';
}
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -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"),
+152
View File
@@ -0,0 +1,152 @@
<?php
/* Copyright (C) 2018 fhcomplete.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>,
*/
/**
* 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 '<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Matrikelnummer Clearing Import</title>
</head>
<body>
<h1>Matrikelnummer Clearing Import</h1>
Ü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.<br><br>';
echo '<form method="POST" enctype="multipart/form-data">
<input type="file" name="datei">
<input type="submit" value="Importieren" />';
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 '<br>Daten von '.$personenkennzeichen.' importiert';
}
else
{
echo '<br>Fehler beim Import von '.$personenkennzeichen.':'.$person->errormsg;
}
}
else
{
echo '<br>Person mit PersonID '.$person_id.' konnte nicht geladen werden';
}
}
else
{
echo '<br>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 '<br>Failed to get Personenkennzeichen';
}
}
else
{
echo '<br>personID Tag no present -> wrong xml?';
}
}
echo '<br>Import abgeschlossen';
}
else
{
echo '<br>studierende Tag not present -> wrong xml?';
}
}
echo '</body>
</html>';
+103
View File
@@ -0,0 +1,103 @@
<?php
/* Copyright (C) 2018 fhcomplete.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
*/
/**
* 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<br>".$row->person_id.' OK';
else
echo "\n<br>".$row->person_id.' Failed:'.$webservice->errormsg;
}
}
if($debug)
echo $webservice->debug_output;