Verified Commit c1cf9850 authored by Dustin Gawron's avatar Dustin Gawron

Merge remote-tracking branch 'origin/kosmetik' into master

parents a79e2a8f 6e347005
......@@ -255,7 +255,7 @@
const TABLES = [
"CREATE TABLE verfahren (
ID INTEGER PRIMARY KEY, -- Eindeutige ID für ein Verfahren (kann automatisch inkrementiert werden oder manuell gesetzt werden)
Typ INT NOT NULL DEFAULT 1, -- Typ des Eintrags (1 = Verarbeitungstätigkeit, 2 = IT-Verfahren)
Typ INT NOT NULL DEFAULT 1, -- Typ des Eintrags (1 = Verarbeitungstätigkeit, 2 = IT-Verfahren, 3 = Fachapplikation, 4 = übergreifende Maßnahme)
Erstelldatum DATE DEFAULT '', -- Einführungsdatum des Verfahrens
Bezeichnung VARCHAR(100) NOT NULL DEFAULT '', -- Bezeichnung des Verfahren
Beschreibung TEXT NOT NULL DEFAULT '', -- Ausführlichere Beschreibung des Verfahrens
......@@ -361,7 +361,7 @@
);",
# 14
"CREATE TABLE ebene_rollen ( -- Zuweisung von Rollen zu Ebenen
EbeneID INT NOT NULL DEFAULT 0, -- ID der Ebene (1 - Verarbeitungstätigkeit, 2 - Fachapplikation, 3 - IT-Verfahren)
EbeneID INT NOT NULL DEFAULT 0, -- ID der Ebene (1 - Verarbeitungstätigkeit, 2 - Fachapplikation, 3 - IT-Verfahren, 4 - übergreifende Maßnahmen)
RoleID INT NOT NULL DEFAULT 0, -- ID der Rolle (siehe Tabelle rollen)
PRIMARY KEY (EbeneID, RoleID),
FOREIGN KEY (RoleID) REFERENCES rollen(RoleID) ON UPDATE CASCADE ON DELETE CASCADE
......@@ -829,13 +829,16 @@
* @throws PDOException
* @throws Exception
*/
public function listVerfahrenDSB($search = '') {
public function listVerfahrenDSB($search = '', $typ = NULL) {
if($this->isConnected()) {
$result = array();
$sth = $this->pdo->prepare('SELECT ID, Typ, Bezeichnung, Beschreibung, Erstelldatum, Fachabteilung, IFNULL(person1.Anzeigename, verfahren.FachKontakt) AS FachKontakt, IFNULL(person2.Anzeigename, verfahren.TechKontakt) AS TechKontakt, Status, Sichtbarkeit, DSBKommentar, IFNULL(person3.Name, verfahren_historie.Kennung) AS LetzterBearbeiter, IFNULL(person3.Anzeigename, "") AS BearbeiterDetails, MAX(Datum) AS Aktualisierung '
. 'FROM verfahren LEFT JOIN verfahren_historie ON verfahren.ID = verfahren_historie.Verfahrens_Id LEFT JOIN personen AS person1 ON verfahren.FachKontakt = person1.Kennung LEFT JOIN personen AS person2 ON verfahren.TechKontakt = person2.Kennung LEFT JOIN personen AS person3 ON verfahren_historie.Kennung = person3.Kennung '
. 'WHERE NOT Status = 3' . (!empty($search) ? ' AND Bezeichnung LIKE ?' : '') . ' GROUP BY ID ORDER BY Bezeichnung COLLATE NOCASE;');
$sth->execute(!empty($search) ? ['%' . $search . '%'] : []);
. 'WHERE NOT Status = 3' . (!empty($search) ? ' AND Bezeichnung LIKE ?' : '') . (!empty($typ) ? ' AND Typ = ?' : '') . ' GROUP BY ID ORDER BY Bezeichnung COLLATE NOCASE;');
$params = array();
if (!empty($search)) array_push($params, "%$search%");
if (!empty($typ)) array_push($params, $typ);
$sth->execute($params);
ob_start();
$sth->debugDumpParams();
......
......@@ -48,10 +48,10 @@
$output['error'] = "Ein interner Fehler ist aufgetreten! Bitte versuchen Sie es später erneut oder wenden Sie sich an einen Administrator.";
# Meldung als HTML ausgeben
echo '<br><b>Fatal error</b>: Exception \'' . get_class($exception) . '\' with message ';
echo $exception->getMessage() . '<br>';
echo '<br /><b>Fatal error</b>: Exception \'' . get_class($exception) . '\' with message ';
echo $exception->getMessage() . '<br />';
echo 'Stack trace:<pre>' . $exception->getTraceAsString() . '</pre>';
echo 'thrown in <b>' . $exception->getFile() . '</b> on line <b>' . $exception->getLine() . '</b><br>';
echo 'thrown in <b>' . $exception->getFile() . '</b> on line <b>' . $exception->getLine() . '</b><br />';
# Meldung zusätzlich in Log schreiben
error_log("[SecDoc] Exception " . get_class($exception) . ' with message ' . $exception->getMessage() . ' thrown in ' . $exception->getFile() . ' on line ' . $exception->getLine());
......@@ -359,7 +359,7 @@ EOH;
}
/**
* Generiert eine kombinierte PDF mit allen PDFs von abgeschlossenen Verfahren.
* Generiert eine kombinierte PDF-Datei mit allen PDFs von abgeschlossenen Verarbeitungstätigkeiten (VVT).
*
* @param array $processes Array von Verfahren (wie von DBCon->listVerfahrenDSB() zurückgegeben)
* @return bool TRUE bei Erfolg (PDF wurde in $pdf_dir abgespeichert), FALSE sonst
......@@ -375,7 +375,7 @@ EOH;
# MPDF initialisieren
$mpdf = new \Mpdf\Mpdf(['debug' => false, 'CSSselectMedia' => 'screen', 'mode' => 'utf-8', 'format' => 'A4']);
$mpdf->SetTitle('Verzeichnis abgeschlossener Dokumentationen');
$mpdf->SetTitle('Verzeichnis von Verarbeitungstätigkeiten');
$mpdf->SetAuthor($author);
$mpdf->SetCreator($prog_name . ' v' . $prog_version);
......@@ -410,7 +410,8 @@ EOH;
$procCount = count($processes);
# Nach ID sortieren? Oder eher nach Name, Erstelldatum oder Aktualisierungsdatum?
usort($processes, function($a, $b) { return (intval($a['ID']) - intval($b['ID'])); });
# Am besten alphabetisch nach Name
usort($processes, function($a, $b) { return strcmp(strval($a['Bezeichnung']), strval($b['Bezeichnung'])); });
for($p = 0; $p < $procCount; $p++) {
$filePath = $pdf_dir . DIRECTORY_SEPARATOR . $processes[$p]['ID'] . '.pdf';
......@@ -434,7 +435,7 @@ EOH;
$mpdf->TOC_Entry(htmlspecialchars("#{$processes[$p]['ID']} - {$processes[$p]['Bezeichnung']}"));
$mpdf->Bookmark(htmlspecialchars("#{$processes[$p]['ID']} - {$processes[$p]['Bezeichnung']}", ENT_QUOTES), 0);
$mpdf->WriteHTML("<h2>PDF für Dokumentation #{$processes[$p]['ID']} - '" . htmlspecialchars("{$processes[$p]['Bezeichnung']}") . "' fehlt</h2><p>Die Dokumentation #{$processes[$p]['ID']} ist als abgeschlossen markiert, aber es ist keine PDF vorhanden!</p><p>Bitte schließen Sie die Dokumentation neu ab, um eine korrekte PDF-Version zu erzeugen.</p><pagebreak />");
$mpdf->WriteHTML("<h2>Die PDF-Datei für die Dokumentation #{$processes[$p]['ID']} - '" . htmlspecialchars("{$processes[$p]['Bezeichnung']}") . "' fehlt</h2><p>Die Dokumentation #{$processes[$p]['ID']} ist als abgeschlossen markiert, aber es ist keine PDF-Datei vorhanden!</p><p>Bitte schließen Sie die Dokumentation erneut ab, um eine vollständige PDF-Version zu erzeugen.</p><pagebreak />");
}
}
......@@ -587,7 +588,7 @@ EOH;
$mpdf->TOC_Entry(htmlspecialchars("#{$deps[$doc]['id']} - {$deps[$doc]['name']}"), 1);
$mpdf->Bookmark(htmlspecialchars("#{$deps[$doc]['id']} - {$deps[$doc]['name']}", ENT_QUOTES), 1);
$mpdf->WriteHTML("<h2>PDF für Dokumentation #{$deps[$doc]['id']} - '" . htmlspecialchars("{$deps[$doc]['name']}") . "' fehlt</h2><p>Die Dokumentation #{$deps[$doc]['id']} ist als abgeschlossen markiert, aber es ist keine PDF vorhanden!</p><p>Bitte schließen Sie die Dokumentation neu ab, um eine korrekte PDF-Version zu erzeugen.</p><p><a href=\"$prog_url?id={$deps[$doc]['id']}\">Dokumentation online einsehen</a></p><pagebreak />");
$mpdf->WriteHTML("<h2>Die PDF-Datei für die Dokumentation #{$deps[$doc]['id']} - '" . htmlspecialchars("{$deps[$doc]['name']}") . "' fehlt</h2><p>Die Dokumentation #{$deps[$doc]['id']} ist als abgeschlossen markiert, aber es ist keine PDF-Datei vorhanden!</p><p>Bitte schließen Sie die Dokumentation erneut ab, um eine vollständige PDF-Version zu erzeugen.</p><p><a href=\"$prog_url?id={$deps[$doc]['id']}\">Dokumentation online einsehen</a></p><pagebreak />");
}
# Fehlende PDF, da noch nicht abgeschlossen
elseif(intval($deps[$doc]['status']) === 0) {
......@@ -595,7 +596,7 @@ EOH;
$mpdf->TOC_Entry(htmlspecialchars("#{$deps[$doc]['id']} - {$deps[$doc]['name']}"), 1);
$mpdf->Bookmark(htmlspecialchars("#{$deps[$doc]['id']} - {$deps[$doc]['name']}", ENT_QUOTES), 1);
$mpdf->WriteHTML("<h2>PDF für Dokumentation #{$deps[$doc]['id']} - '" . htmlspecialchars("{$deps[$doc]['name']}") . "' fehlt</h2><p>Die Dokumentation #{$deps[$doc]['id']} ist noch nicht abgeschlossen worden, sodass bisher keine PDF existiert.</p><p>Bitte schließen Sie die Dokumentation ab, um eine korrekte PDF-Version zu erzeugen.</p><p><a href=\"$prog_url?id={$deps[$doc]['id']}\">Dokumentation online einsehen</a></p><pagebreak />");
$mpdf->WriteHTML("<h2>Die PDF-Datei für die Dokumentation #{$deps[$doc]['id']} - '" . htmlspecialchars("{$deps[$doc]['name']}") . "' fehlt</h2><p>Die Dokumentation #{$deps[$doc]['id']} wurde noch nicht abgeschlossen, so dass bisher keine PDF-Datei existiert.</p><p>Bitte schließen Sie die Dokumentation ab, um eine vollständige PDF-Version zu erzeugen.</p><p><a href=\"$prog_url?id={$deps[$doc]['id']}\">Dokumentation online einsehen</a></p><pagebreak />");
}
}
}
......@@ -1606,7 +1607,7 @@ EOH;
$output['success'] = TRUE;
}
else {
$output['error'] = 'PDF konnte nicht erzeugt werden. Bitte versuchen Sie es später erneut!';
$output['error'] = 'Die PDF-Datei konnte nicht erzeugt werden. Bitte versuchen Sie es später erneut!';
}
break;
}
......@@ -1616,8 +1617,8 @@ EOH;
returnError('Sie haben keine Berechtigung diese Funktion aufzurufen!');
}
if(!generateCombinedPDF($dbcon->listVerfahrenDSB())) {
returnError('Interner Fehler beim Erstellen der kombinierten PDF!');
if(!generateCombinedPDF($dbcon->listVerfahrenDSB('', 1))) {
returnError('Interner Fehler beim Erstellen der kombinierten PDF-Datei!');
}
$filename = $pdf_dir . DIRECTORY_SEPARATOR . 'combined.pdf';
......@@ -1633,10 +1634,10 @@ EOH;
else {
trigger_error('[SecDoc] verwaltung.php -> Kann PDF-Datei nicht öffnen');
error_log('[SecDoc] verwaltung.php -> Kann PDF-Datei nicht öffnen');
returnError('Die PDF zum Verzeichnis von Verarbeitungstätigkeiten existiert nicht.');
returnError('Die PDF-Datei zum Verzeichnis von Verarbeitungstätigkeiten existiert nicht.');
}
if(!unlink($filename)) error_log("[SecDoc] verwaltung.php -> Konnte kombinierte PDF '$filename' nicht löschen!");
if(!unlink($filename)) error_log("[SecDoc] verwaltung.php -> Konnte kombinierte PDF-Datei '$filename' nicht löschen!");
break;
}
......
<div class="tab-content" style="padding-top: 0px !important;">
<div class="row">
<div class="col-sm-12">
<h4 class="info-text">Übersicht aller Dokumentationen</h4>
<h4 class="info-text">
<i class="fa fa-list"></i> Übersicht aller Dokumentationen
</h4>
</div>
<div class="col-sm-12 text-center" style="padding-top: 20px !important;">
<button id="getCombinedPDF" class="btn btn-fill btn-success" type="button"><i class="fa fa-file-pdf-o"></i> PDF aller abgeschlossenen Dokumentationen (VVT)</button>
<button id="getCombinedPDF" class="btn btn-fill btn-success" type="button"><i class="fa fa-book"></i> Verzeichnis von Verarbeitungstätigkeiten (VVT)</button>
</div>
<div class="col-sm-12">
<h5 class="info-text text-ul">Auswahl der Ebene</h5>
......
<h4 id="title" class="text-center"><i class="fa fa-home"></i> Startseite</h4>
<h4 id="title" class="text-center">
<i class="fa fa-home"></i> Startseite
</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:
<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 fa-lg"></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.</p>
<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 fa-lg"></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.
</p>
<hr>
<h5 class="text-center">Bitte wählen Sie eine Ebene aus</h5>
<p class="text-center">
......
<h4 id="title" class="text-center"><i class="fa fa-sign-in"></i> Anmeldeseite</h4>
<h4 id="title" class="text-center">
<i class="fa fa-sign-in"></i> Anmeldeseite
</h4>
<div class="row mx-auto">
<p class="text-center">Bitte melden Sie sich mit Ihren Zugangsdaten an.</p>
<div class="form-horizontal">
......
......@@ -28,19 +28,19 @@
<div class="col-sm-12">
<h4 style="padding-top:100px; text-align:center;">Angaben zum Verantwortlichen</h4>
<p>Platzhalter,
<br>Platzhalter
<br>Platzhalter
<br>Platzhalter
<br>Platzhalter
<br />Platzhalter
<br />Platzhalter
<br />Platzhalter
<br />Platzhalter
</p>
</div>
<div class="col-sm-12">
<h4 style="padding-top:100px; text-align:center;">Angaben zur Person des Datenschutzbeauftragten</h4>
<p>Platzhalter
<br>Platzhalter
<br>Platzhalter
<br>Platzhalter
<br />Platzhalter
<br />Platzhalter
<br />Platzhalter
</p>
</div>
</div>
This diff is collapsed.
This diff is collapsed.
......@@ -63,7 +63,7 @@
</div>
<div class="col-sm-10 col-sm-offset-1">
<div class="form-group">
<label>Beschreibung <i data-toggle="tooltip" title="Ausführliche Beschreibung der Massnahmen" class="fa fa-question-circle-o fa-lg"></i></label><br>
<label>Beschreibung <i data-toggle="tooltip" title="Ausführliche Beschreibung der Massnahmen" class="fa fa-question-circle-o fa-lg"></i></label><br />
<textarea class="form-control" name="allgemein_beschreibung" placeholder="Bsp.: Übergreifene Massnahmen für die Absicherung von Server-Räumen" rows="5"></textarea>
</div>
</div>
......@@ -72,18 +72,18 @@
</div>
<div class="col-sm-10 col-sm-offset-1">
<div class="form-group">
<label>Verantwortliche Organisationseinheit</label><br>
<label>Verantwortliche Organisationseinheit</label><br />
<input data-tool="typeahead" data-action="searchabteilung" data-minlength="0" type="text" class="form-control" name="allgemein_abteilung" placeholder="Bsp.: Zentrum für Informationsverarbeitung" required>
</div>
<div class="form-group">
<label>Betreuende IVV</label><br>
<label>Betreuende IVV</label><br />
<input data-tool="typeahead" data-action="searchivv" data-minlength="0" type="text" class="form-control" name="allgemein_ivv" placeholder="Bsp.: IVV 09 Zentrale Universitätsverwaltung">
</div>
</div>
<div class="col-sm-6 col-sm-offset-3">
<h6 class="info-text">Ansprechpartner <i data-toggle="tooltip" title="Ansprechpartner für technische Fragen zu den Massnahmen <br /><br /> Es kann ein Mitarbeiter aus der Liste gewählt oder eine Funktionsbezeichnung (z.B. Leiter Abt. 3) eingetragen werden. Der automatische Zugriff bzw. die E-Mail-Benachrichtigungen funktionieren nur bei Auswahl eines Mitarbeiters aus der Liste!" class="fa fa-question-circle-o fa-lg"></i></h6>
<div class="form-group">
<label>Name</label><br>
<label>Name</label><br />
<input data-tool="typeahead" data-action="searchmitarbeiter" data-minlength="0" data-dynamic="true" data-cache="false" data-hiddenfield="allgemein_fachlich_kennung" type="text" class="form-control" name="allgemein_fachlich_name" placeholder="Geben Sie eine Kennung oder einen Namen (min. 4 Zeichen) ein...">
<input type="hidden" name="allgemein_fachlich_kennung">
</div>
......@@ -94,19 +94,19 @@
<!-- Wizard tab content #2 -->
<div class="tab-pane" id="massnahmen">
<div class="row">
<div class="col-sm-offset-1 col-sm-10 hidden">
<h5 class="info-text text-ul">Ergebnis der Risikoanalyse <i data-toggle="tooltip" data-html="true" title="Ergebnis der Risikoanalyse <i data-toggle="tooltip" data-html="true" title="Als <em>Risikoanalyse</em> wird der komplette Prozess bezeichnet, um Risiken zu beurteilen (identifizieren, einschätzen und bewerten) sowie zu behandeln. Risikoanalyse bezeichnet nach den einschlägigen ISO-Normen ISO 31000 und ISO 27005 nur einen Schritt im Rahmen der Risikobeurteilung, die aus den folgenden Schritten besteht:<ul><li>Identifikation von Risiken (Risk Identification)</li><li>Analyse von Risiken (Risk Analysis)</li><li>Evaluation oder Bewertung von Risiken (Risk Evaluation)</li></ul> Die Durchführung einer Risikoanalyse gehört nicht zum Umfang dieses Tools und muss extern erfolgen, vgl. ENISA Guidelines for SMEs on the security of personal data processing, ENISA Handbook on Security of Personal Data Processing oder BSI-Standard 200-3: Risikomanagement, ISO/IEC 27005:2018 Information security risk management." class="fa fa-question-circle-o fa-lg"></i></h5>
<div class="col-sm-offset-1 col-sm-10">
<h5 class="info-text text-ul">Schutzbedarf</h5>
</div>
<div class="col-sm-12 text-center hidden">
<div class="col-sm-offset-1 col-sm-10 text-center">
<div class="btn-group">
<label class="btn btn-success">
<input type="radio" name="massnahmen_risiko" value="1" disabled /> Niedrig
<input type="radio" name="massnahmen_risiko" value="1" /> Normal
</label>
<label class="btn btn-warning">
<input type="radio" name="massnahmen_risiko" value="2" disabled /> Standard
<input type="radio" name="massnahmen_risiko" value="2" checked /> Hoch
</label>
<label class="btn btn-danger">
<input type="radio" name="massnahmen_risiko" value="3" checked disabled /> Hoch
<input type="radio" name="massnahmen_risiko" value="3" /> Sehr hoch
</label>
</div>
<p class="mt" id="riskText"></p>
......
This diff is collapsed.
......@@ -29,7 +29,7 @@ function getCombinedPDF() {
$.post(backendPath, JSON.stringify({'action':'gencombinedpdf', 'debug': debug})).done((data) => {
if(!data['success']) {
showError('Laden der PDF', data['error']);
showError('Laden der PDF-Datei', data['error']);
return;
}
......@@ -57,7 +57,7 @@ function getCombinedPDF() {
download.remove();
}
}).fail((jqXHR, error, errorThrown) => {
showError('Laden der PDF', false, {'jqXHR': jqXHR, 'error': error, 'errorThrown': errorThrown});
showError('Laden der PDF-Datei', false, {'jqXHR': jqXHR, 'error': error, 'errorThrown': errorThrown});
}).always(() => {
setOverlay(false);
});
......
......@@ -289,7 +289,7 @@ function getPDFFromServer(id, draft = false) {
if(!draft && data['data']['status'] === 0) {
modal.find('.modal-title').text('Hinweis');
modal.find('.modal-body').html('<div class="alert alert-warning"><p>Da sich das Verfahren wieder im Zustand "In Bearbeitung" befindet, stimmen die Angaben in der PDF unter Umständen nicht mehr mit der aktualisierten Version überein! Die PDF wird nur bei einem erneuten Abschluss des Verfahrens aktualisiert.</p></div>');
modal.find('.modal-body').html('<div class="alert alert-warning"><p>Da sich das Verfahren wieder im Zustand "In Bearbeitung" befindet, stimmen die Angaben in der PDF-Datei unter Umständen nicht mehr mit der aktualisierten Version überein! Die PDF-Datei wird nur bei einem erneuten Abschluss des Verfahrens aktualisiert.</p></div>');
modal.find('.modal-body').append('<p><button type="button" class="center-block btn btn-primary" data-dismiss="modal" aria-label="Close">Schließen</button></p>');
modal.modal();
}
......@@ -321,7 +321,7 @@ function getPDFFromServer(id, draft = false) {
download.remove();
}
}).fail((jqXHR, error, errorThrown) => {
showError('Laden der PDF', false, {'jqXHR': jqXHR, 'error': error, 'errorThrown': errorThrown});
showError('Laden der PDF-Datei', false, {'jqXHR': jqXHR, 'error': error, 'errorThrown': errorThrown});
}).always(() => {
setOverlay(false);
});
......
This diff is collapsed.
......@@ -97,11 +97,11 @@
<span id="successLabel" class="pull-right label label-success hidden ml" title="Klicken zum Speichern"><i class="fa fa-save"></i> Gespeichert am <span id="saveTime" class="text-success"></span> <i class="fa fa-check"></i></span>
<span id="savingLabel" class="pull-right label label-warning hidden ml" title="Klicken zum Speichern"><i class="fa fa-save"></i> Speichert... <i class="fa fa-spinner fa-pulse fa-fw"></i></span>
<span id="failedLabel" class="pull-right label label-danger hidden ml" title="Klicken zum Speichern"><i class="fa fa-save"></i> Nicht gespeichert <i class="fa fa-close"></i></span>
<span id="refreshedLabel" class="pull-right label label-success hidden ml">Aktualisiert am <span id="loadTime" class="text-success"></span></span>
<span id="refreshedLabel" class="pull-right label label-success hidden ml"><i class="fa fa-clock-o"></i> Aktualisiert am <span id="loadTime" class="text-success"></span></span>
<span id="autosaveLabel" class="pull-right label label-warning hidden pointer" title="Klicken um automatisches Speichern ein- oder auszuschalten">Automatisches Speichern</span>
</div>
<div class="text-center">
<h3><i class="fa fa-book"></i> SecDoc Dokumentationstool</h3>
<h3>SecDoc Dokumentationstool</h3>
</div>
<div id="content">
</div>
......
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