Verified Commit 9d36ad02 authored by Thorsten Küfer's avatar Thorsten Küfer

Merge master

parents 8a0dca40 a79e2a8f
......@@ -1414,6 +1414,8 @@ EOH;
$output['count'] = $filesize;
$output['data']['status'] = intval($details[0]['Status']);
$output['data']['lastupdate'] = $details[0]['Aktualisierung'];
$output['data']['title'] = $details[0]['Bezeichnung'];
$output['data']['type'] = intval($details[0]['Typ']);
$output['data']['pdf'] = base64_encode($pdfContent);
$output['success'] = TRUE;
}
......@@ -1713,6 +1715,8 @@ EOH;
$pdfContent = file_get_contents($filename);
$output['count'] = $filesize;
$output['data']['pdf'] = base64_encode($pdfContent);
$output['data']['title'] = $mainDoc['Bezeichnung'];
$output['data']['type'] = $mainDoc['Typ'];
$output['success'] = TRUE;
}
else {
......
......@@ -302,7 +302,7 @@
<div class="col-sm-offset-1 col-sm-10">
<h5 class="info-text text-ul">Ergebnis der Schutzbedarfsfeststellung <i data-toggle="tooltip" data-html="true" title="Ziel der <em>Schutzbedarfsfeststellung</em> ist es, für die Fachapplikation zu entscheiden, welchen Schutzbedarf sie bezüglich der Grundwerte Vertraulichkeit, Integrität und Verfügbarkeit besitzt. Dieser Schutzbedarf orientiert sich an den möglichen Schäden, die mit einer Beeinträchtigung der betroffenen Anwendungen und damit der jeweiligen Geschäftsprozesse verbunden sind." class="fa fa-question-circle-o fa-lg"></i></h5>
</div>
<div class="col-sm-12 text-center">
<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" /> Normal
......@@ -378,7 +378,8 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
</td>
<td class="text-center">
<button type="button" class="itverfahren_abhaengigkeit_del btn btn-danger" title="Abhängigkeit aus Liste entfernen"><i class="fa fa-minus"></i> Entfernen</button><br />
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a>
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a><br />
<button type="button" style="margin-top: 2px;" class="quick_add_dependency btn btn-success" title="Abhängigkeit anlegen" data-type="2"><i class="fa fa-plus"></i> Anlegen</button>
</td>
</tr>
</tbody>
......@@ -419,7 +420,8 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
</td>
<td class="text-center">
<button type="button" class="abschluss_abhaengigkeit_del btn btn-danger" title="Abhängigkeit aus Liste entfernen"><i class="fa fa-minus"></i> Entfernen</button><br />
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a>
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a><br />
<button type="button" style="margin-top: 2px;" class="quick_add_dependency btn btn-success" title="Abhängigkeit anlegen" data-type="3"><i class="fa fa-plus"></i> Anlegen</button>
</td>
</tr>
</tbody>
......@@ -427,10 +429,10 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<button type="button" id="abschluss_abhaengigkeit_add" class="btn btn-wd btn-success"><i class="fa fa-plus"></i> Hinzufügen</button>
</div>
<div class="col-sm-12 dsbOnly">
<div class="col-sm-12 dsbOnly printHide">
<h6 class="info-text text-ul-dot">Abhängige Verarbeitungstätigkeiten und Fachapplikationen</h6>
</div>
<div class="col-sm-offset-1 col-sm-10 dsbOnly">
<div class="col-sm-offset-1 col-sm-10 dsbOnly printHide">
<p>Von dieser Fachapplikation hängen die folgenden Verarbeitungstätigkeiten und Fachapplikationen ab:</p>
<table id="abschluss_vonabhaengig" class="table table-hover btn-table table-striped">
<thead>
......@@ -609,4 +611,4 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<script src="assets/js/datatables.min.js" type="text/javascript"></script>
<!-- Custom WWU JS Files -->
<script src="assets/js/wizard.js?20200805" type="text/javascript"></script>
<script src="assets/js/wizard.js?20200813" type="text/javascript"></script>
......@@ -291,7 +291,7 @@
<div class="col-sm-offset-1 col-sm-10">
<h5 class="info-text text-ul">Ergebnis der Schutzbedarfsfeststellung <i data-toggle="tooltip" data-html="true" title="Ziel der <em>Schutzbedarfsfeststellung</em> ist es, für das IT-Verfahren zu entscheiden, welchen Schutzbedarf es bezüglich der Grundwerte Vertraulichkeit, Integrität und Verfügbarkeit besitzt. Dieser Schutzbedarf orientiert sich an den möglichen Schäden, die mit einer Beeinträchtigung der betroffenen Anwendungen und damit der jeweiligen Geschäftsprozesse verbunden sind." class="fa fa-question-circle-o fa-lg"></i></h5>
</div>
<div class="col-sm-12 text-center">
<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" /> Normal
......@@ -367,7 +367,8 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
</td>
<td class="text-center">
<button type="button" class="abschluss_abhaengigkeit_del btn btn-danger" title="Abhängigkeit aus Liste entfernen"><i class="fa fa-minus"></i> Entfernen</button><br />
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a>
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a><br />
<button type="button" style="margin-top: 2px;" class="quick_add_dependency btn btn-success" title="Abhängigkeit anlegen" data-type="2"><i class="fa fa-plus"></i> Anlegen</button>
</td>
</tr>
</tbody>
......@@ -416,10 +417,10 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<button type="button" id="massnahmen_abhaengigkeit_add" class="btn btn-wd btn-success"><i class="fa fa-plus"></i> Hinzufügen</button>
</div>
<div class="col-sm-12 dsbOnly">
<div class="col-sm-12 dsbOnly printHide">
<h6 class="info-text text-ul-dot">Abhängige Fachapplikationen und IT-Verfahren</h6>
</div>
<div class="col-sm-offset-1 col-sm-10 dsbOnly">
<div class="col-sm-offset-1 col-sm-10 dsbOnly printHide">
<p>Von diesem IT-Verfahren hängen die folgenden Fachapplikationen und IT-Verfahren ab:</p>
<table id="abschluss_vonabhaengig" class="table table-hover btn-table table-striped">
<thead>
......@@ -597,4 +598,4 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<script src="assets/js/datatables.min.js" type="text/javascript"></script>
<!-- Custom WWU JS Files -->
<script src="assets/js/wizard.js?20200805" type="text/javascript"></script>
<script src="assets/js/wizard.js?20200813" type="text/javascript"></script>
......@@ -97,7 +97,7 @@
<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">
<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" /> Normal
......@@ -294,4 +294,4 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<script src="assets/js/datatables.min.js" type="text/javascript"></script>
<!-- Custom WWU JS Files -->
<script src="assets/js/wizard.js?20200805" type="text/javascript"></script>
<script src="assets/js/wizard.js?20200813" type="text/javascript"></script>
......@@ -416,7 +416,7 @@
<div class="col-sm-offset-1 col-sm-10">
<h5 class="info-text text-ul">Ergebnis der Schutzbedarfsfeststellung <i data-toggle="tooltip" data-html="true" title="Ziel der <em>Schutzbedarfsfeststellung</em> ist es, für die <strong>Verarbeitungstätigkeit</strong> zu entscheiden, welchen Schutzbedarf sie bezüglich der Gewährleistungsziele des Datenschutzes (Vertraulichkeit, Integrität, Verfügbarkeit, sowie Datenminmierung, Nichtverkettung, Transparenz und Intervenierbarkeit) besitzt. Dieser Schutzbedarf orientiert sich an den möglichen Schäden, die mit einer Beeinträchtigung des informationellen Selbstbestimmungsrechts verbunden sind." class="fa fa-question-circle-o fa-lg"></i></h5>
</div>
<div class="col-sm-12 text-center">
<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" /> Normal
......@@ -492,7 +492,8 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
</td>
<td class="text-center">
<button type="button" class="abschluss_abhaengigkeit_del btn btn-danger" title="Abhängigkeit aus Liste entfernen"><i class="fa fa-minus"></i> Entfernen</button><br />
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a>
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a><br />
<button type="button" style="margin-top: 2px;" class="quick_add_dependency btn btn-success" title="Abhängigkeit anlegen" data-type="3"><i class="fa fa-plus"></i> Anlegen</button>
</td>
</tr>
</tbody>
......@@ -533,7 +534,8 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
</td>
<td class="text-center">
<button type="button" class="verarbeitung_abhaengigkeit_del btn btn-danger" title="Abhängigkeit aus Liste entfernen"><i class="fa fa-minus"></i> Entfernen</button><br />
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a>
<a class="btn" style="margin-top: 2px;" target="_blank" title="Dokumentation in neuem Fenster öffnen" disabled>Anzeigen</a><br />
<button type="button" style="margin-top: 2px;" class="quick_add_dependency btn btn-success" title="Abhängigkeit anlegen" data-type="1"><i class="fa fa-plus"></i> Anlegen</button>
</td>
</tr>
</tbody>
......@@ -541,10 +543,10 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<button type="button" id="verarbeitung_abhaengigkeit_add" class="btn btn-wd btn-success"><i class="fa fa-plus"></i> Hinzufügen</button>
</div>
<div class="col-sm-12 dsbOnly">
<div class="col-sm-12 dsbOnly printHide">
<h6 class="info-text text-ul-dot">Abhängige Verarbeitungstätigkeiten</h6>
</div>
<div class="col-sm-offset-1 col-sm-10 dsbOnly">
<div class="col-sm-offset-1 col-sm-10 dsbOnly printHide">
<p>Von dieser Verarbeitungstätigkeit hängen die folgenden anderen Verarbeitungstätigkeiten ab:</p>
<table id="abschluss_vonabhaengig" class="table table-hover btn-table table-striped">
<thead>
......@@ -736,4 +738,4 @@ Art. 35 DSGVO" class="fa fa-question-circle-o fa-lg"></i></h6>
<script src="assets/js/datatables.min.js" type="text/javascript"></script>
<!-- Custom WWU JS Files -->
<script src="assets/js/wizard.js?20200812" type="text/javascript"></script>
<script src="assets/js/wizard.js?20200813" type="text/javascript"></script>
......@@ -41,15 +41,16 @@ function getCombinedPDF() {
}
let blob = new Blob([pdfBuffer], {type: "application/pdf"});
let lastUpdate = new Date(); // Safari benötigt das Format YYYY-MM-DDTHH:MM:SS (mit T)
let fileTitle = 'SecDoc_VVT_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2) + '.pdf';
// PDF-Anzeige starten (Unterscheidung, ob Edge genutzt wird)
if(window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, 'VVT_' + '_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2) + '.pdf');
window.navigator.msSaveOrOpenBlob(blob, fileTitle);
}
else {
let url = window.URL.createObjectURL(blob);
let download = $('<a></a>');
download.attr('href', url).attr('download', 'VVT_' + '_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2) + '.pdf').addClass('hidden');;
download.attr('href', url).attr('download', fileTitle).addClass('hidden');;
$('body').append(download);
download[0].click();
window.URL.revokeObjectURL(url);
......@@ -84,15 +85,19 @@ function getCompletePDF(docId) {
}
let blob = new Blob([pdfBuffer], {type: "application/pdf"});
let lastUpdate = new Date(); // Safari benötigt das Format YYYY-MM-DDTHH:MM:SS (mit T)
let typeName = {1: 'Verarbeitungstätigkeit', 2: 'IT-Verfahren', 3: 'Fachapplikation', 4: 'Übergreifende_Massnahme'};
let fileTitle = 'SecDoc_' + typeName[data['data']['type']] + '_(komplett)_' + docId + '_' + data['data']['title'].substr(0, 30) + '_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2);
fileTitle = fileTitle.replace(/[/\\?%*:|"<>\.,;=\s]/g, '_');
fileTitle += '.pdf';
// PDF-Anzeige starten (Unterscheidung, ob Edge genutzt wird)
if(window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, 'Vollständige_Dokumentation_#' + docId + '_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2) + '.pdf');
window.navigator.msSaveOrOpenBlob(blob, fileTitle);
}
else {
let url = window.URL.createObjectURL(blob);
let download = $('<a></a>');
download.attr('href', url).attr('download', 'Vollständige_Dokumentation_#' + docId + '_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2) + '.pdf').addClass('hidden');;
download.attr('href', url).attr('download', fileTitle).addClass('hidden');;
$('body').append(download);
download[0].click();
window.URL.revokeObjectURL(url);
......
......@@ -302,15 +302,19 @@ function getPDFFromServer(id, draft = false) {
}
let blob = new Blob([pdfBuffer], {type: "application/pdf"});
let lastUpdate = data['data']['lastupdate'] ? new Date(data['data']['lastupdate'].replace(' ', 'T')) : new Date(); // Safari benötigt das Format YYYY-MM-DDTHH:MM:SS (mit T)
let typeName = {1: 'Verarbeitungstätigkeit', 2: 'IT-Verfahren', 3: 'Fachapplikation', 4: 'Übergreifende_Massnahme'};
let fileTitle = 'SecDoc_' + typeName[data['data']['type']] + '_' + id + '_' + data['data']['title'].substr(0, 30) + '_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2) + (draft ? '_DRAFT' : '' );
fileTitle = fileTitle.replace(/[/\\?%*:|"<>\.,;=\s]/g, '_');
fileTitle += '.pdf';
// PDF-Anzeige starten (Unterscheidung, ob Edge genutzt wird)
if(window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, 'SecDoc_Dokumentation_' + id + '_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2) + (draft ? '_DRAFT' : '' ) + '.pdf');
window.navigator.msSaveOrOpenBlob(blob, fileTitle);
}
else {
let url = window.URL.createObjectURL(blob);
let download = $('<a></a>');
download.attr('href', url).attr('download', 'SecDoc_Dokumentation_' + id + '_' + lastUpdate.getFullYear() + ('0' + (lastUpdate.getMonth() + 1)).slice(-2) + ('0' + lastUpdate.getDate()).slice(-2) + ('0' + lastUpdate.getHours()).slice(-2) + ('0' + lastUpdate.getMinutes()).slice(-2) + (draft ? '_DRAFT' : '' ) + '.pdf').addClass('hidden');;
download.attr('href', url).attr('download', fileTitle).addClass('hidden');;
$('body').append(download);
download[0].click();
window.URL.revokeObjectURL(url);
......
......@@ -51,6 +51,18 @@ var canEdit = true;
*/
var mode = ['wizit', 'wizproc', 'wizapp', 'wizmeasures'].includes(page) ? page : 'wizproc';
/**
* Mapping des Typs
* @global
* @type {Object}
*/
let modeMapping = {
1: ['Verarbeitungstätigkeit', 'Verarbeitungstätigkeiten'],
2: ['IT-Verfahren', 'IT-Verfahren'],
3: ['Fachapplikation', 'Fachapplikationen'],
4: ['übergreifende Massnahme', 'übergreifende Massnahmen']
};
/**
* Interne Nummerierung für die Dokumentations-Modi
* @global
......@@ -67,10 +79,7 @@ if(mode === 'wizmeasures') modeNum = 4;
* @global
* @type {Array}
*/
var modeName = ['Verarbeitungstätigkeit', 'Verarbeitungstätigkeiten'];
if(mode === 'wizapp') modeName = ['Fachapplikation', 'Fachapplikationen'];
if(mode === 'wizit') modeName = ['IT-Verfahren', 'IT-Verfahren'];
if(mode === 'wizmeasures') modeName = ['übergreifende Massnahme', 'übergreifende Massnahmen'];
var modeName = modeMapping[modeNum];
/**
* Gibt an, ob Eingaben geändert wurden seit dem letzten Laden/Speichern
......@@ -1097,7 +1106,8 @@ function genHTMLforPDF(draft = false) {
});
/* Eingabeelemente durch gelb hinterlegten Text ersetzen */
toSend.find('input[type!=checkbox][type!=hidden][type!=radio], textarea, select').replaceWith(function() { if($(this).parents('td').length>0) { return '<p>' + $(this).val() + '</p>'; } else { return '<p style="background-color: lightyellow">' + $(this).val() + '</p>'; }});
toSend.find('input[type!=checkbox][type!=hidden][type!=radio], select').replaceWith(function() { if($(this).parents('td').length>0) { return '<p>' + $(this).val() + '</p>'; } else { return '<p style="background-color: lightyellow">' + $(this).val() + '</p>'; }});
toSend.find('textarea').replaceWith(function() { if($(this).parents('td').length>0) { return '<p>' + $(this).val().replace(/(?:\r\n|\r|\n)/g, '<br />') + '</p>'; } else { return '<p style="background-color: lightyellow">' + $(this).val().replace(/(?:\r\n|\r|\n)/g, '<br />') + '</p>'; }});
/* Radio-Elemente formatieren */
toSend.find('input[type=radio]:not(:checked)').closest('label').remove();
......@@ -1115,8 +1125,14 @@ function genHTMLforPDF(draft = false) {
var checkbox = $(this);
checkbox.parent().parent().attr('style', 'margin: 5px;');
if(checkbox.prop('checked')) checkbox.replaceWith('<span style="color: green;">&#10004;</span>');
//else checkbox.replaceWith('<span style="color: red;">&#10006;</span>');
if(checkbox.prop('checked')) {
if(checkbox.attr('name') === 'daten_kategorien_besonders[]') {
checkbox.replaceWith('<span><span style="color: green;">&#10004;</span> Ja</span>');
return;
}
checkbox.replaceWith('<span style="color: green;">&#10004;</span>');
}
else {
if(checkbox.attr('name').search(/massnahmen/g) > -1) {
checkbox.replaceWith('<span style="color: red;">&#10006;</span>');
......@@ -1128,6 +1144,11 @@ function genHTMLforPDF(draft = false) {
return;
}
if(checkbox.attr('name') === 'daten_kategorien_besonders[]') {
checkbox.replaceWith('<span>Nein</span>');
return;
}
checkbox.parent().parent().addClass('hidden');
if(['allgemein_verantwortlich_extern'].includes(checkbox.attr('name'))) {
......@@ -2076,6 +2097,9 @@ Promise.all(promises).then(function() {
let statusSymbol = data['data'][0]['Status'] in statusSymbolMapping ? '<span>' + statusText + ' <i data-toggle="tooltip" class="fa ' + statusSymbolMapping[data['data'][0]['Status']] + '" title="' + statusText + '"></i></span>' : '<span>Unbekannt <i data-toggle="tooltip" class="fa fa-question" title="Unbekannt"></i></span>';
idField.closest('td').find('.status span').replaceWith(statusSymbol);
idField.closest('td').find('.status i').tooltip();
// Hide quick add button
idField.closest('tr').find('.quick_add_dependency').addClass('hidden');
}).fail((jqXHR, error, errorThrown) => {
console.error('Fehler beim Abruf von Abhängigkeiten! HTTP Code: ' + jqXHR.status + ' Fehler: ' + error + ' - ' + errorThrown);
descText.val('<Fehler beim Abrufen>');
......@@ -2088,10 +2112,15 @@ Promise.all(promises).then(function() {
// Refresh status
idField.closest('td').find('.status span').replaceWith('<span>Unbekannt <i data-toggle="tooltip" class="fa fa-question" title="Unbekannt"></i></span>');
idField.closest('td').find('.status i').tooltip();
// Show quick add button
idField.closest('tr').find('.quick_add_dependency').removeClass('hidden');
});
}
else {
descText.val('');
idField.closest('td').find('input[name="abschluss_abhaengigkeit_betreiber[]"], input[name="itverfahren_abhaengigkeit_betreiber[]"], input[name="verarbeitung_abhaengigkeit_betreiber[]"], input[name="massnahmen_abhaengigkeit_betreiber[]"]').val('');
// Disable Link
idField.closest('tr').find('td:last').find('a').removeAttr('href');
idField.closest('tr').find('td:last').find('a').attr('disabled', 'disabled');
......@@ -2099,9 +2128,73 @@ Promise.all(promises).then(function() {
// Refresh status
idField.closest('td').find('.status span').replaceWith('<span>Unbekannt <i data-toggle="tooltip" class="fa fa-question" title="Unbekannt"></i></span>');
idField.closest('td').find('.status i').tooltip();
// Show quick add button
idField.closest('tr').find('.quick_add_dependency').removeClass('hidden');
}
});
$('#abschluss_abhaengigkeit, #itverfahren_abhaengigkeit, #verarbeitung_abhaengigkeit, #massnahmen_abhaengigkeit').on('click', 'button.quick_add_dependency', function() {
let targetIDField = $(this).closest('tr').find('input[type="hidden"]');
let targetType = $(this).data('type');
let targetTitle = $(this).closest('tr').find('input[type="text"]').first().val();
modal.find('.modal-title').text('Abhängigkeit anlegen');
modal.find('.modal-body').html('<div></div>');
modal.find('.modal-body > div').append('<p>Hier können Sie eine Abhängigkeit (' + modeMapping[targetType][0] + ') vorläufig anlegen, sodass die Verknüpfung direkt angelegt werden kann. Die Dokumentation kann im späteren Verlauf wie jede andere Dokumentation bearbeitet und ergänzt werden.</p>');
modal.find('.modal-body > div').append('<p class="alert alert-danger hidden">Bitte füllen Sie alle Felder aus, um die Abhängigkeit anlegen zu können!</p>');
modal.find('.modal-body > div').append('<div class="form-group"><label>Bezeichnung <i data-toggle="tooltip" title="Eindeutiges Kürzel" class="fa fa-question-circle-o fa-lg"></i> <sup><i style="color: #EB5E28;" class="fa fa-asterisk" aria-hidden="true"></i></sup></label><input type="text" class="form-control" name="quick_title" placeholder="Bsp.: E-Mail Service" required></div>');
modal.find('.modal-body > div').append('<div class="form-group"><label>Beschreibung <i data-toggle="tooltip" title="Ausführliche Beschreibung des Verfahrens" class="fa fa-question-circle-o fa-lg"></i> <sup><i style="color: #EB5E28;" class="fa fa-asterisk" aria-hidden="true"></i></sup></label><br><textarea class="form-control" name="quick_desc" placeholder="Bsp.: Stellt Dienste bereit zum Empfang und Versand von E-Mails für Angehörige der WWU" rows="5"></textarea></div>');
modal.find('.modal-body > div').append('<div class="form-group"><label>Verantwortliche Organisationseinheit <sup><i style="color: #EB5E28;" class="fa fa-asterisk" aria-hidden="true"></i></sup></label><br><input data-tool="typeahead" data-action="searchabteilung" data-minlength="0" type="text" class="form-control" name="quick_department" placeholder="Bsp.: Zentrum für Informationsverarbeitung" required></div>');
modal.find('input[name="quick_title"]').val(targetTitle);
modal.find('.modal-body').append('<p class="text-center"><button type="button" class="btn btn-success" id="quickSave">Anlegen & Speichern</button><button type="button" class="ml btn btn-danger" data-dismiss="modal" aria-label="Close">Abbrechen</button></p>');
// Tooltips, Typeahead und Buttons
modal.find('.modal-body i').tooltip();
modal.find('input[data-tool="typeahead"]').each(function(key, value) {
initTypeahead(value);
});
modal.find('#quickSave').click(function() {
// Werte holen
let newDoc = {
'allgemein_typ': targetType,
'allgemein_bezeichnung': modal.find('input[name="quick_title"]').val(),
'allgemein_beschreibung': modal.find('textarea[name="quick_desc"]').val(),
'allgemein_abteilung': modal.find('input[name="quick_department"]').val(),
};
debugLog('Quick Create', newDoc);
if(!newDoc['allgemein_typ'] || !newDoc['allgemein_bezeichnung'] || !newDoc['allgemein_beschreibung'] || !newDoc['allgemein_abteilung']) {
modal.find('.alert').removeClass('hidden');
return;
}
// Dokumentation anlegen
setOverlay(true);
$(this).prop('disabled', true);
$.post(backendPath, JSON.stringify({'action':'create', 'debug': debug, 'data': newDoc})).done(function(data) {
if(data['success']) {
targetIDField.val(parseInt(data['data']['ID']));
targetIDField.trigger('change');
modal.modal('hide');
}
else {
showError('Anlegen einer Abhängigkeit', data['error']);
}
setOverlay(false);
}).fail((jqXHR, error, errorThrown) => {
showError('Anlegen einer Abhängigkeit', false, {'jqXHR': jqXHR, 'error': error, 'errorThrown': errorThrown});
setOverlay(false);
});
});
modal.modal();
});
// Zeigt den aktuellen Aufstellungsort der Endgeräte an
$('#systeme_server').on('change', 'input[name="systeme_server_ip[]"]', function() {
var idField = $(this);
......
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