Source: https://zivgitlab.uni-muenster.de/secdoc/secdoc/-/commit/2e3cbd92abc7b0af3ae63d8cabdde749fcaadabe
Timestamp: 2020-08-06 20:00:03
Document Index: 235021694

Matched Legal Cases: ['Art. 6', 'Art. 6', 'Art. 6', 'Art. 6', 'Art. 6', 'Art. 6']

Update auf SecDoc v1.2 (2e3cbd92) · Commits · Thorsten Küfer / SecDoc · GitLab
2e3cbd92
Commit 2e3cbd92
authored May 29, 2019 by Dustin Gawron
Update auf SecDoc v1.2
* Berechtigungsverwaltung
* TOM-Liste
* Einfacher Docker-Support
parent 133e7331
with 1482 additions and 313 deletions
+1482 -313
assets/ajax/DBCon.class.php assets/ajax/DBCon.class.php +414 -153
assets/ajax/Utils.class.php assets/ajax/Utils.class.php +16 -8
assets/ajax/config.inc.php assets/ajax/config.inc.php +7 -7
assets/ajax/verwaltung.php assets/ajax/verwaltung.php +97 -18
assets/css/custom.css assets/css/custom.css +12 -4
assets/demo.db assets/demo.db +0 -0
assets/html/wizard.inc.html assets/html/wizard.inc.html +133 -47
assets/js/main.js assets/js/main.js +5 -1
assets/js/wizard.js assets/js/wizard.js +199 -53
assets/php/Default_Suggestions.sql assets/php/Default_Suggestions.sql +41 -0
assets/php/ENISA_TOM_List.sql assets/php/ENISA_TOM_List.sql +120 -0
assets/php/ENISA_TOM_List.txt assets/php/ENISA_TOM_List.txt +117 -0
assets/php/db-update.php assets/php/db-update.php +243 -0
assets/php/tom-update.php assets/php/tom-update.php +36 -0
index.html index.html +8 -7
View file @ 2e3cbd92
.htsslaccess
.htssoaccess
RUN chmod -R 755 /var/www/html/
RUN chown -R www-data /var/www/html/
# SecDoc - WWU Verzeichnis von Verarbeitungstätigkeiten (VVT)
Webinterface zur Dokumentation von (IT-)Verfahren an der WWU im Rahmen der EU-Datenschutzgrundverordnung (DSGVO).
Webinterface zur Erfassung von Verarbeitungstätigkeiten und IT-Verfahren an der WWU im Rahmen der EU-Datenschutzgrundverordnung (DSGVO).
* Produktivsystem: https://www.uni-muenster.de/ZIV.CERT/secdoc
* Entwicklungssystem: https://www.uni-muenster.de/ZIVtest/secdoc
... ... @@ -10,14 +10,15 @@ Webinterface zur Dokumentation von (IT-)Verfahren an der WWU im Rahmen der EU-Da
- Basiert auf Vorlage für das Verzeichnis von Verarbeitungstätigkeiten (VTT) von ZENDAS (https://www.zendas.de)
- Bietet integrierte Ausfüllhinweise
- Bietet integrierte Datenvorschläge aus Nutzerdatenbank (WWUben), Netzdatenbank (LANbase), sowie CPE-Verzeichnis des NIST
- Bietet automatische Speicherung und Verwaltung Ihrer Verfahren
- Verwendet Bootstrap Wizard für HTML-Formular
- Bietet Datenvorschläge aus vorhandenen Datenbanken (z.B. Nutzerdatenbank (WWUben), Netzdatenbank (LANbase), sowie CPE-Verzeichnis des NIST)
- Automatische Speicherung und einfache Verwaltung von Verarbeitungstätigkeiten
- Spätere Fortsetzung oder Bearbeitung möglich
- Erstellt abschließend eine PDF-Version des Verfahrens
- Speichert Daten in SQLite-Datenbank und als JSON zur externen Weiterverarbeitung
- Erstellt abschließend eine PDF-Version der Verarbeitungstätigkeit
- Speichert Daten in SQLite-Datenbank und als JSON zur späteren evtl. externen Weiterverarbeitung
- Eingetragene Informationen können einfach ergänzend zur Datenschutzerklärung auf Webseiten eingebunden werden
- Bietet eine Übersicht aller gemeldeten Verfahren für Datenschutzbeauftragte (Einsicht, Kommentare und Bearbeitung möglich)
- Bietet eine Übersicht aller gemeldeten Verarbeitungstätigkeiten für Datenschutzbeauftragte (Einsicht, Kommentare und Bearbeitung möglich)
- Erzeugt das Verzeichnis von Verarbeitungstätigkeiten
... ... @@ -38,7 +39,13 @@ Webinterface zur Dokumentation von (IT-)Verfahren an der WWU im Rahmen der EU-Da
- [MPDF 7](https://github.com/mpdf/mpdf) (Für die PDF-Erstellung genutzt)
## Verwendung - Docker
Eine Demo-Version kann einfach mittels Docker gestartet werden über die Konfigurationsdatei [Dockerfile](Dockerfile). Hierfür kann mit `docker build -t secdoc . ` ein Image gebaut werden und mit `sudo docker run -d --name secdoc-app secdoc` der Container gestartet werden. Hierfür wird eine Demo-Datenbank geladen.
**Hinweis:** Aktuell unterstützt diese Methode nicht die PDF-Funktion, dies wird aber mit dem nächsten Update behoben.
## Verwendung - Normale Installation
### Voraussetzungen
... ... @@ -53,7 +60,7 @@ Beim ersten Aufruf der Anwendung wird automatisch eine neue Datenbank mit den no
**Achtung:** Das System bietet keinen allgemeinen Zugriffsschutz (z.B. durch Registrierung und Login-Mechanismus), sondern hat nur die Möglichkeit, die Anzeige von Verfahren zu unterbinden, wenn eine Nutzerkennung oder Nutzergruppen bereitsgestellt wurden, die überprüft werden können. Dies geschieht in unserem System mittels SSO-Mechanismus (Single Sign On) und einem externen Funktionsaufruf zum Erlangen der Nutzergruppen, die im PHP-Skript überprüft werden. Der allgemeine Zugriffsschutz wird über `.htaccess`-Dateien mit Nutzergruppeneinschränkungen realisiert.
... ... @@ -64,7 +71,7 @@ Um das System in der eigenen Umgebung zu nutzen, sind einige Anpassungen bzw. Da
1. **Aussehen und allgemeine Verfahrensangaben**
Die Logos, Links und das Hintergrundbild auf der Hauptseite sollten an die eigene Hochschule angepasst werden (siehe [index.html](index.html)).
Darüber hinaus werden dort auch die allgemeinen Informationen für Verfahren, wie z.B. Anschrift der Hochschule, Angaben zum Datenschutzbeauftragten, etc., festgelegt. Diese müssen auch angepasst werden und sind hier zu finden [index.html#L168-188](index.html#L168-188).
Darüber hinaus werden dort auch die allgemeinen Informationen für Verarbeitungstätigkeiten, wie z.B. Anschrift der Hochschule, Angaben zum Datenschutzbeauftragten, etc., festgelegt. Diese müssen auch angepasst werden und sind hier zu finden [index.html#L168-188](index.html#L168-188).
Die Logos in der PDF sollten ebenfalls angepasst werden. Dafür können zwei Logos (`logo1.png` und `logo2.png`) in [/assets/img](/assets/img) hinterlegt werden, die genutzt werden.
Alternativ können die Pfade angepasst werden in der Funktion `generatePDF()` in [/assets/ajax/verwaltung.php](/assets/ajax/verwaltung.php). Zu Beginn dieser Funktion können auch die PDF-Metadaten angepasst werden.
... ... @@ -79,14 +86,14 @@ Um das System in der eigenen Umgebung zu nutzen, sind einige Anpassungen bzw. Da
Das Backend benötigt einige Funktionen, die spezifisch zu unserem System sind und müssen angepasst werden. Diese sind in der Datei [Utils.class.php](/assets/ajax/Utils.class.php) zu finden.
- `searchipdns($term)` Durchsucht die Netzdatenbank nach Servern (für Eingabehilfe im Formular der Systeme)
- `imapSendMimeMail($to, $cc, $bcc, $subject, $body, $attachments)` Verschickt eine signierte E-Mail mit Anhängen (für den Abschluss des Verfahrens)
- `getUserGroups($userId)` Fragt die aktuellen Nutzergruppen zu einer Kennung ab (zur Überprüfung von Berechtigungen beim Zugriff auf Verfahren)
- `getCurrentUserId()` Fragt die Nutzerkennung des aktuell eingeloggten Nutzers ab (zur Überprüfung von Berechtigungen beim Zugriff auf Verfahren und Logging von Bearbeitungen)
- `imapSendMimeMail($to, $cc, $bcc, $subject, $body, $attachments)` Verschickt eine signierte E-Mail mit Anhängen (für den Abschluss der Verarbeitungstätigkeit)
- `getUserGroups($userId)` Fragt die aktuellen Nutzergruppen zu einer Kennung ab (zur Überprüfung von Berechtigungen beim Zugriff auf eine Verarbeitungstätigkeit)
- `getCurrentUserId()` Fragt die Nutzerkennung des aktuell eingeloggten Nutzers ab (zur Überprüfung von Berechtigungen beim Zugriff auf eine Verarbeitungstätigkeit und Logging von Bearbeitungen)
- `getUserAnrede($userId)` Fragt die Anrede zu einer Nutzerkennung ab (für den E-Mail-Versand genutzt)
- `getUserAlias($userId)` Fragt den primären Alias-Namen des Nutzers ab (für den E-Mail-Versand genutzt)
3. **Datenimport**
Für einige Eingafelder stellt das Tool Vorschläge für den Nutzer zur Verfügung. Diese werden, bis auf die aktuellen Nutzergruppen und Systeme, alle aus der SQLite Datenbank ausgelesen.
Zu diesen Daten zählen Personen, Organisationseinheiten, IVVen und CPE-Einträge. Die benötigten Tabellen werden beim ersten Start der Anwendung angelegt und müssen nur befüllt werden.
Die Tabellendefinitionen können in [DBCon.class.php](/assets/ajax/DBCon.class.php) gefunden werden. Diese können dafür genutzt werden, um die Tabelle z.B. mittels einer SQL-Importdatei über das CLI von SQLite zu befüllen und regelmäßig aktuell zu halten.
assets/ajax/Utils.class.php
... ... @@ -101,10 +101,11 @@
* @return string Aufstellungsort oder ein Platzhalter, falls kein Ort bekannt
public static function getAufstellungsort($ip) {
return "Mein Büro";
} elseif ($ip == '::1') {
return "ZIV, Raum 111, Einsteinstr. 60";
$netzDb = array('127.0.0.1' => "Mein Büro",
'::1' => "ZIV, Raum 111, Einsteinstr. 60"
if ($ort = $netzDb['$ip']) {
return "Kein Aufstellungsort in Netzdatenbank eingetragen.";
... ... @@ -127,8 +128,11 @@
* @return array Liste der Nutzergruppen
public static function getUserGroups($userId) {
$userGroups = array('demogroup');
$userGroups = array('demouser' => array('demogroup', 'demogroup2', 'demogroup3'),
'demouser2' => array('demogroup', 'demogroup2'),
'demouser3' => array('demogroup')
return $userGroups[$userId];
... ... @@ -140,7 +144,11 @@
public static function getGroupName($groupId) {
#return get_name_from_group($groupId);
return 'Gruppe für SecDoc Demosystem';
$groupNames = array('demogroup' => 'Gruppe für SecDoc Demosystem',
'demogroup2' => 'Zweite Gruppe für SecDoc Demosystem',
'demogroup3' => 'Dritte Gruppe für SecDoc Demosystem'
return $groupNames[$groupId];
... ... @@ -176,7 +184,7 @@
public static function readUserPassword($userId) {
#return user_read_pass($userId);
return 'demopass';
* config.inc.php - Zentrale Konfigurations-Einstellungen für SecDoc
* @author Thorsten Küfer <thorsten.kuefer@uni-muenster.de>
* @copyright (c) 2018 Westfälische Wilhelms-Universität Münster
* @copyright (c) 2019 Westfälische Wilhelms-Universität Münster
* @license AGPL-3.0-or-later <https://www.gnu.org/licenses/agpl.html>
$prog_version = "1.1 (2019.02.27)";
$prog_version = "1.2 (2019.05.29)";
$debug = isset($_REQUEST['debug']) ? filter_var($_REQUEST['debug'], FILTER_VALIDATE_BOOLEAN) : FALSE; # Für Live-System ausschalten, im Testsystem ist Debug-Modus standardmäßig an
$debugGroups = ['demogroup']; # Nutzergruppen, die Zugriff auf die Debug-Ausgaben haben
$GLOBALS['DEBUG'] = $debug;
# Basispfad
$base_dir = dirname($_SERVER['DOCUMENT_ROOT']); # => "/www/data/ZIV.CERT"
$base_dir = $base_dir ? $base_dir : "/www/data/ZIVtest";
$ckusrgrp = "/www/bin/ckusrgrp -n";
#$ckusrgrp = "/www/bin/ckusrgrp -n";
$temp_dir = "$base_dir/temp"; # Hier landen temporäre Dateien
$sess_dir = "$base_dir/sessions"; # Hier landen die PHP sessions und Tickets von ticket.class.php
$secret_dir = "$base_dir/secret"; # Hier liegen Passwörter und Zertifikate
$font_dir = "$base_dir/fonts"; # Fonts für JpGraph (http://jpgraph.net/)
$db_dir = "$base_dir/secdoc"; # Hier liegt die SecDoc SQlite Datenbank
#$sess_dir = "$base_dir/sessions"; # Hier landen die PHP sessions und Tickets von ticket.class.php
#$secret_dir = "$base_dir/secret"; # Hier liegen Passwörter und Zertifikate
#$font_dir = "$base_dir/fonts"; # Fonts für JpGraph (http://jpgraph.net/)
$db_dir = ".."; # Hier liegt die SecDoc SQlite Datenbank
$includes_dir = "$temp_dir/htdocs/sys/secdoc"; # Hier liegen die HTML Include-Bausteine
$pdf_dir = "$temp_dir/secdoc/PDF"; # Hier liegen die PDF-Dateien (temporär für E-Mail-Versand)
... ... @@ -305,6 +305,23 @@ EOH;
# Liest alle Verfahren aus, auf die $userId Zugriff hat
$list = $dbcon->listVerfahrenOwn($userId, $userGroups);
$list = array_merge($list, $dbcon->listVerfahrenShared($userId, $userGroups));
# Prüft, welche PDFs bereits existieren
$currPDFs = scandir($pdf_dir);
for($c = 0; $c < $count; $c++) {
$list[$c]['PDF'] = array_search($list[$c]['ID'] . '.pdf', $currPDFs) ? TRUE : FALSE;
$output['count'] = $count;
$output['data'] = $list;
# Listet alle Verfahren auf, die einsehbar, aber nicht bearbeitbar sind
case 'listshared': {
$list = $dbcon->listVerfahrenShared($userId, $userGroups);
... ... @@ -338,7 +355,7 @@ EOH;
# Durchsucht die für den aktuellen Nutzer einsehbaren Verfahren
# Durchsucht die für den aktuellen Nutzer einsehbaren Verfahren (nur IT-Verfahren)
case 'searchverfahren': {
if($userIsDSB) {
$list = $dbcon->listVerfahrenDSB($search);
... ... @@ -350,7 +367,7 @@ EOH;
array_push($result, array('value' => $entry['ID'], 'label' => $entry['Bezeichnung'] . " [" . $entry['Fachabteilung'] . "]"));
if(intval($entry['Typ']) === 2) array_push($result, array('value' => $entry['ID'], 'label' => $entry['Bezeichnung'] . " [" . $entry['Fachabteilung'] . "]"));
... ... @@ -392,6 +409,7 @@ EOH;
// Benötigte Parameter in $data überprüfen
$reqVars = array(
'allgemein_typ',
'allgemein_bezeichnung',
'allgemein_beschreibung',
'allgemein_abteilung',
... ... @@ -408,7 +426,35 @@ EOH;
# HTML Symbole ersetzen
$data = Utils::encodeHTMLArray($data);
$id = $dbcon->addVerfahren($userId, $newId, $data['allgemein_bezeichnung'], $data['allgemein_datum'], $data['allgemein_beschreibung'], $data['allgemein_abteilung'], $data['allgemein_ivv'], $data['allgemein_fachlich_kennung'], $data['allgemein_technisch_kennung'], $data['meta_bearbeiter_gruppe'], json_encode($data));
# Verfahren erstellen
$id = $dbcon->addVerfahren($userId, $newId, intval($data['allgemein_typ']), $data['allgemein_bezeichnung'], $data['allgemein_datum'], $data['allgemein_beschreibung'], intval($data['massnahmen_risiko']), $data['allgemein_abteilung'], $data['allgemein_ivv'], $data['allgemein_fachlich_kennung'], $data['allgemein_technisch_kennung'], json_encode($data));
# Berechtigungen eintragen (falls schon gegeben)
$newPermissions = [];
if(isset($data['meta_nutzer_kennung'])) {
for($c = 0; $c < count($data['meta_nutzer_kennung']); $c++) {
array_push($newPermissions, [
'id' => empty($data['meta_nutzer_kennung'][$c]) ? $data['meta_nutzer_name'][$c] : $data['meta_nutzer_kennung'][$c],
'isgroup' => FALSE,
'canedit' => intval($data['meta_nutzer_schreiben'][$c]) === 1 ? TRUE : FALSE
if(isset($data['meta_gruppen_kennung'])) {
for($c = 0; $c < count($data['meta_gruppen_kennung']); $c++) {
'id' => empty($data['meta_gruppen_kennung'][$c]) ? $data['meta_gruppen_name'][$c] : $data['meta_gruppen_kennung'][$c],
'isgroup' => TRUE,
'canedit' => intval($data['meta_gruppen_schreiben'][$c]) === 1 ? TRUE : FALSE
$setPermission = $dbcon->updatePermissions($id, $userId, $userGroups, $newPermissions);
if(!$setPermission) error_log("[SecDoc] verwaltung.php -> Konnte neue Berechtigungen für Verfahren #$id nicht setzen!");
$output['data'] = ['ID' => $id, 'Date' => date("Y-m-d H:i:s")];
... ... @@ -426,6 +472,7 @@ EOH;
... ... @@ -433,7 +480,7 @@ EOH;
'allgemein_fachlich_kennung',
'allgemein_technisch_kennung',
'meta_lastupdate',
'meta_bearbeiter_gruppe'
'massnahmen_risiko'
foreach($reqVars as $reqVar) {
if(!isset($data[$reqVar])) {
... ... @@ -452,7 +499,36 @@ EOH;
$success = $dbcon->updateVerfahren($verfahrensId, $userId, $userGroups, $data['allgemein_bezeichnung'], $data['allgemein_datum'], $data['allgemein_beschreibung'], $data['allgemein_abteilung'], $data['allgemein_ivv'], $data['allgemein_fachlich_kennung'], $data['allgemein_technisch_kennung'], isset($data['meta_sichtbarkeit']) ? $data['meta_sichtbarkeit'] : 0, $data['meta_bearbeiter_gruppe'], json_encode($data), $userIsDSB);
# Verfahren aktualisieren
$success = $dbcon->updateVerfahren($verfahrensId, $userId, $userGroups, intval($data['allgemein_typ']), $data['allgemein_bezeichnung'], $data['allgemein_datum'], $data['allgemein_beschreibung'], intval($data['massnahmen_risiko']), $data['allgemein_abteilung'], $data['allgemein_ivv'], $data['allgemein_fachlich_kennung'], $data['allgemein_technisch_kennung'], isset($data['meta_sichtbarkeit']) ? $data['meta_sichtbarkeit'] : 0, json_encode($data), $userIsDSB);
# Berechtigungen aktualisieren
$setPermission = $dbcon->updatePermissions($verfahrensId, $userId, $userGroups, $newPermissions);
if(!$setPermission) error_log("[SecDoc] verwaltung.php -> Konnte neue Berechtigungen für Verfahren #$verfahrensId nicht setzen!");
if($success && $dbcon->getStatus($verfahrensId, $userId, $userGroups, $userIsDSB) === 2) {
... ... @@ -462,7 +538,7 @@ EOH;
* gestellt wurde.
$output['gentxt'] = generateTXT($dbcon, $userId, $userGroups, $userIsDSB, $verfahrensId);
# Status zurücksetzen auf "In Bearbeitung", falls es zuvor als "In Betrieb" gekennzeichnet war
$dbcon->updateStatus($verfahrensId, $userId, $userGroups, 0, $userIsDSB);
... ... @@ -609,16 +685,6 @@ EOH;
# Gibt die Rechtsgrundlagen zurück
case 'getlaws': {
$result = $dbcon->getRechtsgrundlagen();
$output['count'] = count($result);
# Personensuche nach Name und Kennung
case 'searchperson': {
... ... @@ -628,7 +694,7 @@ EOH;
$result = $dbcon->searchPerson($search);
$resultMod = [];
array_push($resultMod, ['value' => $val['Kennung'], 'label' => $val['Name'], 'name' => $val['Name']]);
... ... @@ -732,6 +798,7 @@ EOH;
# Gibt einige Statistiken aus
case 'getstats': {
if(!$userIsDSB) {
returnError('Sie haben keine Berechtigung diese Funktion aufzurufen!');
... ... @@ -742,9 +809,21 @@ EOH;
case 'gettoms': {
$output['data'] = $dbcon->getTOMs();
$output['count'] = count($output['data']);
case 'getsuggestions': {
$output['data'] = $dbcon->getSuggestions();
# Falls keine bekannte Aktion angegeben wurde
$output['error'] = 'Es wurde kein oder kein unterstützter Modus (list, listdsb, get, create, update, delete, finish, updatecomment, history, laws, searchperson, serachabteilung, searchivv, getusergroups, searchapp, searchos, searchipdns, getaufstellungsort, getstats) angegeben!';
$output['error'] = 'Es wurde kein oder kein unterstützter Modus (list, listdsb, get, create, update, delete, finish, updatecomment, history, searchperson, serachabteilung, searchivv, getusergroups, searchapp, searchos, searchipdns, getaufstellungsort, getstats, gettoms, getsuggestions) angegeben!';
* custom.css - WWU-Anpassungen sind hier zu finden
* Autor: Thorsten Küfer <thorsten.kuefer@uni-muenster.de>
* Copyright (c) 2018 Westfälische Wilhelms-Universität Münster
/* Border Radius aus Paper Bootstrap Wizard auch auf Buttons in button-group-sm anwenden. */
... ... @@ -94,7 +94,7 @@ i[data-toggle="tooltip"] {
.dropdown-menu .inner .text {
/* Fix: Selectpicker Dropdown wird vom Footer überdeckt */
... ... @@ -113,7 +113,15 @@ i[data-toggle="tooltip"] {
/* Fix: Plus/Minus nicht mittig in DT-Tabellen mit ausklappbaren Kontrollelementen */
table.dataTable.dtr-column > tbody > tr > td.control::before,
table.dataTable.dtr-column > tbody > tr > th.control::before {
.wizard-card .tab-content .tab-content {
assets/demo.db
assets/html/wizard.inc.html
... ... @@ -24,30 +24,35 @@ console.time('Gesamte Vorbereitungszeit');
var debug = (GetURLParameter('debug') === 'true' || GetURLParameter('debug') == 1) ? true : false;
* Aktuelle Versions-Nummer
* Angabe der Ziel-Unterseite
var page = ['dsbview'].includes(GetURLParameter('page')) ? GetURLParameter('page') : 'wizard';
* Gibt an, ob der Nutzer ein Datenschutzbeauftragter ist
var userIsDSB = false;
* Relativer Pfad zur verwaltung.php
var backendPath = 'assets/ajax/verwaltung.php';
* JQuery Object des Modal-Elements
... ... @@ -55,7 +60,6 @@ var backendPath = 'assets/ajax/verwaltung.php';
var modal = $('#modalWindow'); // Modal-Fenster für Meldungen/Fehler
* Mapping für die Stati von Verfahren
assets/php/Default_Suggestions.sql
DELETE FROM suggestions;
INSERT INTO suggestions (Field, Entry) VALUES ("daten_grundlagen_bezeichnung", "Art. 6 (1) a) - Einwilligung");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_grundlagen_bezeichnung", "Art. 6 (1) b) - Vertragserfüllung");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_grundlagen_bezeichnung", "Art. 6 (1) c) - Rechtliche Verpflichtung");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_grundlagen_bezeichnung", "Art. 6 (1) d) - Lebenswichtige Interessen");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_grundlagen_bezeichnung", "Art. 6 (1) e) - Öffentliches Interesse");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_grundlagen_bezeichnung", "Art. 6 (1) f) - Berechtigte Interessen");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_kategorien_beschreibung", "Name");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_kategorien_beschreibung", "E-Mail");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_kategorien_beschreibung", "Kennung");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_kategorien_beschreibung", "Anschrift");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Rektorat");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Hochschulrat");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Dekane");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Professoren");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Juniorprofessoren");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Wissenschaftliche Mitarbeiter");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Künstlerische Mitarbeiter");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Mitarbeiter");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Nebenberufliche Professoren");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Entpflichtete Professoren");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Privatdozenten");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Studierende");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Wissenschaftliche Hilfskräfte");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Ehrenbürger");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Ehrensenatoren");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Zweithörer");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Gasthörer");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Alumni");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Studienbewerber");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Bewerber um eine Beschäftigung");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Ausgeschiedene Mitglieder");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Ausgeschiedene Angehörige");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Förderer, Fördergesellschaften");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Kooperationen");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Sonstige");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Ausgründungen");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "An-Institute,");
INSERT INTO suggestions (Field, Entry) VALUES ("daten_personen_betroffene", "Geschäftspartner, Kunden, Lieferanten");
assets/php/ENISA_TOM_List.sql
assets/php/ENISA_TOM_List.txt
assets/php/db-update.php
* db-update.php - SQLite-DB (secdoc.db) mit Personen- und Organisationseinheitdaten zur schnelleren AJAX-Abfrage befüllen
* TK, 18.07.2018 - Erste Version
require_once('../ajax/config.inc.php');
require_once('../ajax/func.inc.php');
# Skript-Einstellungen
# Verbindungen mit WBDB herstellen
$oci_handle = ocidb_connect();
# SQL-Statements für SQLite-DB erzeugen
print "DELETE FROM PERSONEN;\n";
print "DELETE FROM ORGANISATIONSEINHEITEN;\n";
print "DELETE FROM IVVEN;\n";
print "BEGIN TRANSACTION;\n";
sql_personen_table();
sql_organisationseinheiten_table();
sql_ivven_table();
print "END TRANSACTION;\n";
* Personen-Tabelle mit Mitarbeitern und Stud. Hilfskräften füllen.
function sql_personen_table()
sql_mitarbeiter_table();
sql_studhilfskraefte_table();
* Liste der Mitarbeiter sowie Adresse, Tel. und E-Mail holen.
function sql_mitarbeiter_table()
$nids = array_unique(array_merge(get_nids_from_group('u0mitarb'), get_nids_from_group('e0mitwwu')));
# Anzeigename für Einträge in Kennungs-Liste holen
if (count($nids)>0)
foreach ($nids as $nid)
$info = get_info_from_nid($nid);
$label = "$info[0], $info[1]";
# Werte 2-4 sind optional
if ($info[2])
$label .= ", $info[2]";
if ($info[3])
$label .= ", $info[3]";
if ($info[4])
$label .= ", Tel.: $info[4]";
if ($info[7])
$label .= ", E-Mail: $info[7]";
print "INSERT INTO PERSONEN VALUES('$nid', '$info[0]', '$label', '$info[8]');\n";
* Liste der Stud. Mitarbeiter mit Name holen.
function sql_studhilfskraefte_table()
$nids = array_unique(get_nids_from_group('u0shk'));
$name = get_name_from_nid($nid);
print "INSERT INTO PERSONEN VALUES('$nid', '$name', NULL, NULL);\n";
* Liste der IVVen holen (Tabelle V_NETZ).
* @global type $oci_handle Globaler Datenbank-Handle
function sql_ivven_table()
global $oci_handle;
# Suche über Feld IVV
$sql = "SELECT DISTINCT Trim(ivv) as ivv FROM wb_cert.v_netz ORDER BY ivv";
{ print '<p class="debug"><b>Notice</b>: oci_execute(): ' . htmlspecialchars($sql) . '</p>'; }
$stmt = oci_parse($oci_handle, $sql);
if ($e = oci_error($stmt))
{ err($e['code'] . ": " . htmlspecialchars($e['message'])); }
$num = oci_fetch_all($stmt, $rows);
foreach ($rows['IVV'] as $ivv)
if ($ivv !== '-- LEER --')
print "INSERT INTO IVVEN VALUES('$ivv');\n";
* Liste der Organisationseinheiten mit Adresse holen (Tabelle WWUBEN.INSTITUTS_ADRESSEN).
* @global type $oci_handle Gloabler Datenbank-Handle
function sql_organisationseinheiten_table()
$sql = "SELECT Trim(Institut) as Id, Name || ', ' || Str || ', ' || Ort as Name FROM wwuben.instituts_adressen WHERE Status='A' ORDER BY institut";
$num = oci_fetch_all($stmt, $rows, 0, -1, OCI_FETCHSTATEMENT_BY_ROW);
if (preg_match('/^\w/', $row['ID']) && preg_match('/^\w/', $row['NAME']))
print "INSERT INTO ORGANISATIONSEINHEITEN VALUES('$row[ID]', '$row[NAME]');\n";
* Liste der Organisationseinheiten mit Adresse holen (Tabelle ALT_INSTITUTE/PROJEKTE).
function sql_organisationseinheiten_table2()
# Suche über Feld INSTITUT
$sql = "SELECT Name || ', ' || Str || ', ' || Ort as Institut FROM wb_cert.alt_institute WHERE Institut in (SELECT Institut from wb_cert.projekte where Status='A') ORDER BY institut";
foreach ($rows['INSTITUT'] as $org)
print "INSERT INTO ORGANISATIONSEINHEITEN VALUES('$org');\n";
* Liste der Organisationseinheiten holen (Tabelle V_NETZ).
function sql_organisationseinheiten_table3()