Verified Commit 778d6a6b authored by Thorsten Küfer's avatar Thorsten Küfer

Verschiedene Textanpassungen

parents 2ea883d1 2b105d04
......@@ -250,10 +250,12 @@
PRIMARY KEY (Identifier)
);",
"CREATE TABLE documents ( -- Zuweisung von Dokumenten zu Dokumentationen
DocID INTEGER PRIMARY KEY AUTOINCREMENT, -- ID des Dokuments
DocID INTEGER PRIMARY KEY AUTOINCREMENT, -- ID des Dokuments
ProcessID INT NOT NULL, -- ID der Dokumentation
Description TEXT NOT NULL DEFAULT '', -- Beschreibung
FileRef TEXT NOT NULL, -- Verweis auf Datei
FileSize INT NOT NULL DEFAULT 0, -- Dateigröße
Attach INT NOT NULL DEFAULT 0, -- Dokument an Abschluss-PDF anhängen?
Date DATE NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime')), -- Letztes Änderungsdatum
FOREIGN KEY (ProcessID) REFERENCES verfahren(ID) ON UPDATE CASCADE ON DELETE CASCADE
);"
......@@ -393,10 +395,12 @@
);",
# 17
"CREATE TABLE documents ( -- Zuweisung von Dokumenten zu Dokumentationen
DocID INTEGER PRIMARY KEY AUTOINCREMENT, -- ID des Dokuments
DocID INTEGER PRIMARY KEY AUTOINCREMENT, -- ID des Dokuments
ProcessID INT NOT NULL, -- ID der Dokumentation
Description TEXT NOT NULL DEFAULT '', -- Beschreibung
FileRef TEXT NOT NULL, -- Verweis auf Datei
FileSize INT NOT NULL DEFAULT 0, -- Dateigröße
Attach INT NOT NULL DEFAULT 0, -- Dokument an Abschluss-PDF anhängen?
Date DATE NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime')), -- Letztes Änderungsdatum
FOREIGN KEY (ProcessID) REFERENCES verfahren(ID) ON UPDATE CASCADE ON DELETE CASCADE
);"
......@@ -606,7 +610,7 @@
$this->pdo->beginTransaction();
# Neue Tabelle für angehängte Dokumente
$this->pdo->exec(self::TABLES[17]);
# Alte TOMs auf 'unbearbeitet' setzen, wenn nicht umgesetzt und kein Kommentar hinterlegt
$sth1 = $this->pdo->prepare('SELECT ID, JSON FROM verfahren WHERE NOT Status = 3;');
$sth2 = $this->pdo->prepare('UPDATE verfahren SET JSON = ? WHERE ID = ?;');
......@@ -1903,7 +1907,7 @@
* Gibt alle Dokumente zurück, die an eine Dokumentation angehangen sind.
*
* @param int $verfahrensId ID einer Dokumentation
* @return mixed[] Array mit den Einträgen in der Form [['DocID' => 1, 'ProcessID' => 2, 'Description' => 'Test', 'FileRef' => 'test.pdf', 'Date' => '2020-09-08 12:06:18']]
* @return mixed[] Array mit den Einträgen in der Form [['DocID' => 1, 'ProcessID' => 2, 'Description' => 'Test', 'FileRef' => 'test.pdf', 'FileSize' => 1200, 'Attach' => 0, 'Date' => '2020-09-08 12:06:18']]
* @throws PDOException
* @throws Exception
*/
......@@ -1930,7 +1934,7 @@
* Gibt die Detals zu einem Dokument zurück.
*
* @param int $docID ID eines Dokuments
* @return mixed[] Array mit den Einträgen in der Form ['DocID' => 1, 'ProcessID' => 2, 'Description' => 'Test', 'FileRef' => 'test.pdf', 'Date' => '2020-09-08 12:06:18']
* @return mixed[] Array mit den Einträgen in der Form ['DocID' => 1, 'ProcessID' => 2, 'Description' => 'Test', 'FileRef' => 'test.pdf', 'FileSize' => 1200, 'Attach' => 0, 'Date' => '2020-09-08 12:06:18']
* @throws PDOException
* @throws Exception
*/
......@@ -1963,20 +1967,22 @@
* @param int $verfahrensId ID einer Dokumentation
* @param string $description Beschreibung des Dokuments
* @param string $fileRef Dateireferenz
* @param bool $attach Gibt an, ob die Datei an die Abschluss-PDF angehängt werden soll
* @param int $fileSize Dateigröße in Bytes
* @return int ID des neuen Dokuments; -1 bei fehlenden Berechtigungen
* @throws PDOException
* @throws Exception
*/
public function addDocument($verfahrensId, $description, $fileRef) {
public function addDocument($verfahrensId, $description, $fileRef, $fileSize, $attach) {
if(!$this->isConnected()) {
throw new Exception("DBCon.class.php -> Keine aktive Datenbank-Verbindung!");
}
$sql = 'INSERT INTO documents (ProcessID, Description, FileRef) VALUES (?, ?, ?);';
$sql = 'INSERT INTO documents (ProcessID, Description, FileRef, FileSize, Attach) VALUES (?, ?, ?, ?, ?);';
$sth = $this->pdo->prepare($sql);
$sth->execute([$verfahrensId, $description, $fileRef]);
$sth->execute([$verfahrensId, $description, $fileRef, $fileSize, ($attach ? 1 : 0)]);
ob_start();
$sth->debugDumpParams();
......@@ -2016,16 +2022,16 @@
* @throws PDOException
* @throws Exception
*/
public function updateDocument($docID, $description, $fileRef) {
public function updateDocument($docID, $description, $fileRef, $fileSize, $attach) {
if(!$this->isConnected()) {
throw new Exception("DBCon.class.php -> Keine aktive Datenbank-Verbindung!");
}
$sql = 'UPDATE documents SET Description = ?, FileRef = ?, Date = (datetime(CURRENT_TIMESTAMP, \'localtime\')) WHERE DocID = ?;';
$sql = 'UPDATE documents SET Description = ?, FileRef = ?, FileSize = ?, Attach = ?, Date = (datetime(CURRENT_TIMESTAMP, \'localtime\')) WHERE DocID = ?;';
$sth = $this->pdo->prepare($sql);
$sth->execute([$description, $fileRef, $docID]);
$sth->execute([$description, $fileRef, $fileSize, ($attach ? 1 : 0), $docID]);
ob_start();
$sth->debugDumpParams();
......
......@@ -77,6 +77,10 @@
# Zeitmessung starten
$timer = array(array('Skript-Start', microtime(TRUE)));
# Wartungsmodus
$maintenanceMode = FALSE;
$maintenanceMessage = 'Aktuell wird eine Wartung durchgeführt. Bitte probieren Sie es später nochmal.';
# ----------------------------------------
# E-Mail-Konfiguration
# ----------------------------------------
......@@ -169,8 +173,9 @@
# ----------------------------------------
# Konfiguration der Dokumentenverwaltung
# ----------------------------------------
$docmgmt_method = 'local'; # Aktuell nur local unterstützt
$docmgmt_class = $docmgmt_method . 'DocMGMT';
$docmgmt_method = 'local'; # Aktuell nur local unterstützt
$docmgmt_maxAttachSize = 12 * 1024 * 1024; # Anhangsgröße in Bytes, ab wann eine Warnung angezeigt wird (Default: 12MB)
$docmgmt_class = $docmgmt_method . 'DocMGMT';
# ----------------------------------------
# Lokale Konfiguration laden
......
......@@ -17,6 +17,10 @@
$prog_name = "SecDoc Demosystem";
$prog_url = 'http://localhost/';
# Wartungsmodus
$maintenanceMode = FALSE;
$maintenanceMessage = 'Aktuell wird eine Wartung durchgeführt. Bitte probieren Sie es später nochmal.';
# ----------------------------------------
# E-Mail-Konfiguration
# ----------------------------------------
......
......@@ -249,7 +249,7 @@
require_once '../vendor/autoload.php';
global $dbcon, $userId, $pdf_dir, $prog_name, $prog_version, $prog_url, $docmgmtClass, $temp_dir;
global $dbcon, $userId, $pdf_dir, $prog_name, $prog_version, $prog_url, $docmgmtClass, $docmgmt_maxAttachSize, $temp_dir;
$res = Utils::searchUsers($userId, TRUE);
$author = !empty($res) ? $res[0]['name'] : '';
......@@ -323,10 +323,16 @@ EOH;
if(!$isDraft) {
# Angehängte PDF-Dokumente einbetten
$attachedDocs = $dbcon->listDocuments($verfahrensId);
$attachedDocs = array_filter($attachedDocs, function($doc) { return ($doc['Attach'] > 0 ? TRUE : FALSE); });
$attachedSize = 0;
if(count($attachedDocs) > 0) {
$mpdf->Bookmark("Angehängte Dokumente", 0);
}
foreach($attachedDocs as $doc) {
# Prüfen, ob Anhanggröße überschritten wird
$attachedSize += $doc['FileSize'];
if($attachedSize > $docmgmt_maxAttachSize) break;
$file = $docmgmtClass->getDocument($verfahrensId, $doc['FileRef']);
$tmpFile = $temp_dir . DIRECTORY_SEPARATOR . "{$verfahrensId}_{$doc['DocID']}.pdf";
if(file_put_contents($tmpFile, base64_decode($file['fileContent'])) === FALSE) {
......@@ -937,6 +943,11 @@ EOH;
returnError('Es konnte keine DB-Verbindung hergestellt werden! Versuchen Sie es später erneut.');
}
# Im Wartungs Fehler bei schreibenden Funktionen ausgeben
if($maintenanceMode && in_array($action, ['create', 'update', 'finish', 'delete', 'updatecomment', 'gendraftpdf', 'adddocument', 'updatedocument', 'deletedocument'])) {
returnError('Funktion steht im Wartungsmodus nicht zur Verfügung!');
}
# Gewünschte Aktion ausführen
switch($action) {
# Liest alle Verfahren aus, auf die $userId Zugriff hat
......@@ -1094,6 +1105,10 @@ EOH;
returnError('Kein Verfahren mit der angebenen ID konnte gefunden werden oder Sie haben keinen Zugriff darauf!');
}
if($maintenanceMode) {
$proc[0]['Editierbar'] = FALSE;
}
$output['count'] = 1;
$output['data'] = $proc;
$output['success'] = TRUE;
......@@ -1782,7 +1797,7 @@ EOH;
if(empty($newFileRef)) returnError('Konnte Dokument nicht abspeichern!');
$newDocID = $dbcon->addDocument($verfahrensId, !empty($data['description']) ? $data['description'] : '', $newFileRef);
$newDocID = $dbcon->addDocument($verfahrensId, (!empty($data['description']) ? $data['description'] : ''), $newFileRef, strlen(base64_decode($data['filecontent'])), (!empty($data['attach']) ? intval($data['attach']) : 0));
if($newDocID === -1) returnError('Konnte Document nicht in Datenbank anlegen!');
......@@ -1814,15 +1829,17 @@ EOH;
global $docmgmtClass;
$newFileRef = $docmgmtClass->updateDocument($docDetails['ProcessID'], $docDetails['FileRef'], $data['filename'], $data['filecontent']);
$newFileRef = $docmgmtClass->updateDocument($docDetails['ProcessID'], $docDetails['FileRef'], $data['filename'], $data['filecontent']);
$newFileSize = strlen(base64_decode($data['filecontent']));
if(empty($newFileRef)) returnError('Konnte Dokument nicht abspeichern!');
}
else {
$newFileRef = $docDetails['FileRef'];
$newFileRef = $docDetails['FileRef'];
$newFileSize = $docDetails['FileSize'];
}
if(!$dbcon->updateDocument($docDetails['DocID'], !empty($data['description']) ? $data['description'] : '', $newFileRef)) returnError('Konnte Document nicht in Datenbank aktualisieren!');
if(!$dbcon->updateDocument($docDetails['DocID'], !empty($data['description']) ? $data['description'] : '', $newFileRef, $newFileSize, (array_key_exists('attach', $data) && $data['attach'] ? 1 : 0))) returnError('Konnte Document nicht in Datenbank aktualisieren!');
$output['success'] = TRUE;
break;
......@@ -1892,9 +1909,16 @@ EOH;
$documents = $dbcon->listDocuments($verfahrensId);
$output['success'] = TRUE;
$output['data'] = $documents;
$output['count'] = count($documents);
$combinedSize = 0;
foreach($documents as $doc) {
if($doc['Attach'] > 0) $combinedSize += $doc['FileSize'];
}
$output['success'] = TRUE;
$output['data'] = $documents;
$output['sizewarn'] = $combinedSize > $docmgmt_maxAttachSize ? TRUE : FALSE;
$output['maxsize'] = $docmgmt_maxAttachSize;
$output['count'] = count($documents);
break;
}
......@@ -1910,6 +1934,8 @@ EOH;
case 'loggedin': {
$output['success'] = TRUE;
$output['maintenance'] = $maintenanceMode;
if($maintenanceMode) $output['maintenanceMessage'] = $maintenanceMessage;
break;
}
......
......@@ -168,6 +168,11 @@ input.customError {
margin-left: 5px !important;
}
.mx-10 {
margin-left: 10px !important;
margin-right: 10px !important;
}
.pointer {
cursor: pointer !important;
}
......
<h4 id="title" class="text-center">
<i class="fa fa-home"></i> Startseite
</h4>
<h4 class="text-center">
<small>Das SecDoc Dokumentationstool unterstützt Sie bei der Erstellung von Dokumentationen zur Erfüllung der Anforderungen aus Datenschutz und Informationssicherheit.</small>
</h4>
<div class="mx-auto">
<p class="text-center" style="padding:20px">Um eine personenbezogene Verarbeitung vollständig zu erfassen, hat es sich bewährt, drei verschiedene Ebenen der Darstellung wesentlicher Bestandteile zu unterscheiden: <em>Verarbeitungstätigkeit</em>, <em>Fachapplikation</em> und <em>IT-Verfahren</em>. Wesentlich ist das Verständnis, dass eine Verarbeitungstätigkeit bspw. nicht deckungsgleich mit der Verwendung einer bestimmten Technik oder eines bestimmten Fachprogramms ist. Dieser Ansatz folgt dem <a href="https://www.datenschutzkonferenz-online.de/media/ah/SDM-Methode_V20b.pdf" target="_blank"><em>Standard-Datenschutzmodell V2 (SDM-V2)</em></a> <i data-toggle="tooltip" title="Mit dem Standard-Datenschutzmodell (SDM) wird das Ziel verfolgt, Verarbeitungstätigkeiten rechtskonform auszugestalten. Dazu ist es erforderlich, die von der Datenschutz-Grundverordnung (DS-GVO) vorgegebenen datenschutzrechtlichen Anforderungen praktisch umzusetzen und somit sowohl die Risiken für die Rechte und Freiheiten natürlicher Personen zu mindern als auch die Sicherheit der Informationsverarbeitung zu gewährleisten. Das übergeordnete Ziel kann nur erreicht werden, wenn bezogen auf die Daten, Systeme und Dienste sowie Prozesse einer Verarbeitungstätigkeit mehrere Anforderungen – teils alternativ, teils kumulativ – durch technische und organisatorische Maßnahmen erfüllt werden. Aus den Vorgaben der DS-GVO ergeben sich unmittelbar die Komponenten Daten, Systeme und Dienste. Bei der konkreten Modellierung von Verarbeitungstätigkeiten mit Personenbezug ist es jedoch notwendig, die folgenden drei Komponenten zu betrachten:
<p class="text-center" style="padding:20px">Um eine personenbezogene Verarbeitung vollständig zu erfassen, hat es sich bewährt, drei verschiedene Ebenen der Darstellung wesentlicher Bestandteile zu unterscheiden: <em>Verarbeitungstätigkeit</em>, <em>Fachapplikation</em> und <em>IT-Verfahren</em>. Wesentlich ist das Verständnis, dass eine Verarbeitungstätigkeit bspw. nicht deckungsgleich mit der Verwendung einer bestimmten Technik oder eines bestimmten Fachprogramms ist. Dieser Ansatz basiert auf dem <a href="https://www.datenschutzkonferenz-online.de/media/ah/SDM-Methode_V20b.pdf" target="_blank"><i class="fa fa-external-link"></i> <em>Standard-Datenschutzmodell V2 (SDM-V2)</em></a> <i data-toggle="tooltip" title="Mit dem Standard-Datenschutzmodell (SDM) wird das Ziel verfolgt, Verarbeitungstätigkeiten rechtskonform auszugestalten. Dazu ist es erforderlich, die von der Datenschutz-Grundverordnung (DS-GVO) vorgegebenen datenschutzrechtlichen Anforderungen praktisch umzusetzen und somit sowohl die Risiken für die Rechte und Freiheiten natürlicher Personen zu mindern als auch die Sicherheit der Informationsverarbeitung zu gewährleisten. Das übergeordnete Ziel kann nur erreicht werden, wenn bezogen auf die Daten, Systeme und Dienste sowie Prozesse einer Verarbeitungstätigkeit mehrere Anforderungen – teils alternativ, teils kumulativ – durch technische und organisatorische Maßnahmen erfüllt werden. Aus den Vorgaben der DS-GVO ergeben sich unmittelbar die Komponenten Daten, Systeme und Dienste. Bei der konkreten Modellierung von Verarbeitungstätigkeiten mit Personenbezug ist es jedoch notwendig, die folgenden drei Komponenten zu betrachten:
<ol>
<li>die personenbezogenen Daten,</li>
<li>die beteiligten technischen Systeme und Dienste (Hardware, Software und Infrastruktur),</li>
<li>die technischen, organisatorischen und personellen Prozesse der Verarbeitung von Daten.</li>
</ol>
Der Ausdruck „Prozess“ ist in der DS-GVO nicht ausdrücklich enthalten. Jede Verarbeitungstätigkeit kann jedoch als Geschäftsprozess bzw. Fachverfahren modelliert werden. Das SDM steht in einer engen Beziehung zur Grundschutzmethodik des Bundesamtes für Sicherheit in der Informationstechnik (BSI). Um die Anwendung des SDM zu erleichtern, nutzt die SDM-Methodik vergleichbare Modellierungsmechanismen wie die Grundschutzmethodik. BSI-Grundschutz und SDM ergänzen sich somit in idealer Weise und liefern gemeinsam die Informationen, die erforderlich sind, um die Einhaltung der Grundsätze für die Verarbeitung personenbezogener Daten nachweisen zu können." class="fa fa-question-circle-o"></i> und wurde von der <abbr title="Konferenz der Datenschutzbehörden des Bundes und der Länder">DSK</abbr> auf ihrer Sitzung am 17.04.2020 verabschiedet.
Der Ausdruck „Prozess“ ist in der DS-GVO nicht ausdrücklich enthalten. Jede Verarbeitungstätigkeit kann jedoch als Geschäftsprozess bzw. Fachverfahren modelliert werden. Das SDM steht in einer engen Beziehung zur Grundschutzmethodik des Bundesamtes für Sicherheit in der Informationstechnik (BSI). Um die Anwendung des SDM zu erleichtern, nutzt die SDM-Methodik vergleichbare Modellierungsmechanismen wie die Grundschutzmethodik. BSI-Grundschutz und SDM ergänzen sich somit in idealer Weise und liefern gemeinsam die Informationen, die erforderlich sind, um die Einhaltung der Grundsätze für die Verarbeitung personenbezogener Daten nachweisen zu können." class="fa fa-question-circle-o"></i>, das von der <abbr title="Konferenz der Datenschutzbehörden des Bundes und der Länder">DSK</abbr> verabschiedet wurde.
Auf jeder Ebene besteht die Möglichkeit, eine Liste von Sicherheitsanforderungen für die Beschreibung der technischen und organisatorischen Maßnahmen auf Basis des <a href="https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKompendium/itgrundschutzKompendium_node.html" target="_blank"><i class="fa fa-external-link"></i> <em>IT-Grundschutz-Kompendiums</em></a> <i data-toggle="tooltip" title="Das IT-Grundschutz-Kompendium enthält für unterschiedliche Vorgehensweisen, Komponenten und IT-Systeme Erläuterungen zur Gefährdungslage, Sicherheitsanforderungen und weiterführende Informationen, die jeweils in einem Baustein zusammengefasst sind. Es ist aufgrund der Baustein-Struktur modular aufgebaut und legt einen Fokus auf die Darstellung der wesentlichen Sicherheitsanforderungen in den Bausteinen. Seine grundlegende Struktur unterteilt die Bausteine in prozess- und systemorientierte Bausteine, zudem sind sie nach Themen in ein Schichtenmodell einsortiert." class="fa fa-question-circle-o"></i> des <abbr title="Bundesamt für Sicherheit in der Informationstechnik">BSI</abbr> zu erstellen.
</p>
<hr>
<h5 class="text-center">Bitte wählen Sie eine Ebene aus</h5>
<p class="text-center">
......
This diff is collapsed.
This diff is collapsed.
......@@ -125,7 +125,7 @@
<h5 class="info-text text-ul">Technische und organisatorische Maßnahmen <i data-toggle="tooltip" data-html="true" title="Vergleiche
Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundliche Voreinstellungen, Art. 32 DSGVO Sicherheit der Verarbeitung" class="fa fa-question-circle-o fa-lg"></i></h5>
<h6 class="info-text text-ul-dot printHide">1. Bausteine auswählen</h6>
<p class="printHide">Das <a href="https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKompendium/itgrundschutzKompendium_node.html" target="_blank"><em>IT-Grundschutz-Kompendium</em></a> des <abbr title="Bundesamt für Sicherheit in der Informationstechnik">BSI</abbr> enthält für unterschiedliche Vorgehensweisen, Komponenten und IT-Systeme Erläuterungen zur Gefährdungslage, Sicherheitsanforderungen und weiterführende Informationen, die jeweils in einem Baustein zusammengefasst sind. Es ist aufgrund der Baustein-Struktur modular aufgebaut und legt einen Fokus auf die Darstellung der wesentlichen Sicherheitsanforderungen in den Bausteinen. Seine grundlegende Struktur unterteilt die Bausteine in prozess- und systemorientierte Bausteine, zudem sind sie nach Themen in ein Schichtenmodell einsortiert. Wählen Sie in der folgenden Liste die für Ihr IT-Verfahren relevanten Bausteine aus.</p>
<p class="printHide">Wählen Sie in der folgenden Liste die für Ihr IT-Verfahren relevanten Bausteine aus.</p>
</div>
<div class="col-sm-offset-1 col-sm-10 printHide" id="toggletoms">
<ul class="nav nav-tabs printHide" role="tablist">
......@@ -205,11 +205,14 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<div class="col-sm-offset-1 col-sm-10 printHide">
<h6 class="info-text text-ul-dot">Angehängte Dokumente</h6>
<p>Hier können Sie bereits vorhandene Dokumente wie z.B. Betriebskonzept, Risikoanalyse, Netzplan etc. im PDF-Format zur Dokumentation in SecDoc hinterlegen.</p>
<div class="alert alert-warning hidden" id="attached_documents_warning"></div>
<table id="attached_documents" class="table table-hover btn-table">
<thead>
<tr>
<th>Dateiname</th>
<th>Dateigröße</th>
<th>Beschreibung</th>
<th>Anhängen <i data-toggle="tooltip" title="Dokument bei Abschluss in Gesamtdokumentation aufnehmen?" class="fa fa-question-circle-o fa-lg"></i></th>
<th>Letzte Aktualisierung</th>
<th></th>
</tr>
......@@ -230,7 +233,7 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
</ul>
<div class="tab-content" style="min-height: auto;">
<div role="tabpanel" class="tab-pane active" id="groupaccess">
<p style="padding-top:10px; padding-left:10px">Zugriff für Personen in vorhandenen Nutzergruppen (aus IDM) erlauben. Zusätzliche Nutzergruppen können über die WWU IT (siehe <a href="https://www.uni-muenster.de/IT/services/benutzerverwaltung/nutzergruppen.html" target="_blank">Nutzergruppen</a>) beantragt und verwaltet werden.</p>
<p style="padding-top:10px; padding-left:10px">Zugriff für Personen in vorhandenen Nutzergruppen (aus IDM) erlauben. Zusätzliche Nutzergruppen können über die WWU IT (siehe <a href="https://www.uni-muenster.de/IT/services/benutzerverwaltung/nutzergruppen.html" target="_blank"><i class="fa fa-external-link"></i> Nutzergruppen</a>) beantragt und verwaltet werden.</p>
<table data-tool="endlessTable" id="meta_gruppen" class="table table-hover btn-table printHide">
<thead>
<tr>
......
This diff is collapsed.
......@@ -185,6 +185,25 @@ function htmlDecode(input) {
return doc.documentElement.textContent;
}
/**
* Wandelt Dateigrößen in Bytes in eine lesbare Größenanzeige um
* @see {@link https://stackoverflow.com/a/18650828}
* @param {Number} bytes Dateigröße in Bytes
* @param {Number} decimals (optional) Nachkommanstellen
* @return {String} Dateigröße (human-readable)
*/
function formatBytes(bytes, decimals = 2) {
if (bytes === 0) return '0 Bytes';
const k = 1024;
const dm = decimals < 0 ? 0 : decimals;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}
/**
* Generiert eine Debug-Ausgabe, falls der globale debug-Parameter 'true' ist
* @param {Object} msg Ausgabenachricht (kann null sein) (wird mittels console.log(msg) ausgegeben)
......@@ -454,6 +473,10 @@ $('#logoutLabel').click(() => {
*/
$.getJSON(backendPath + '?action=loggedin' + (debug ? '&debug=true' : '')).done((data) => {
if(data.length !== 0 && data['success']) {
if(data['maintenance']) {
$('#maintenanceAlert').removeClass('hidden');
if(data['maintenanceMessage'] !== '') $('#maintenanceMessage').text(data['maintenanceMessage']);
}
loadSubpage();
}
else {
......
This diff is collapsed.
......@@ -84,6 +84,11 @@
<!-- Wizard container -->
<div class="wizard-container">
<div class="card wizard-card" data-color="blue" id="wizard">
<div class="alert alert-danger text-center mx-10 hidden" id="maintenanceAlert">
<h4>Wartungsmodus</h4>
<p>Diese SecDoc-Instanz befindet sich im Wartungsmodus und es sind nur lesende Zugriffe auf gespeicherte Dokumentationen möglich. Es können keine neuen Dokumentationen angelegt oder bestehende Dokumentationen editiert werden.</p>
<p id="maintenanceMessage"></p>
</div>
<form action="/" method="post">
<!-- You can switch " data-color="green" " with one of the next bright colors: "blue", "azure", "orange", "red" -->
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment