"Unbearbeitet" als Vorauswahl für Massnahmen; Update gespeicherter,...

"Unbearbeitet" als Vorauswahl für Massnahmen; Update gespeicherter, unbearbeiteter Massnahmen; Ausblenden bearbeiteter Massnahmen (Closes #68)
parent 42283878
......@@ -604,7 +604,30 @@
error_log("[SecDoc] DBCon.class.php -> Aktualisiere Datenbank von Version $db_version zu " . self::DBVERSION . "!");
$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 = ?;');
$sth1->execute();
foreach($sth1->fetchAll() as $entry) {
$parsedJSON = json_decode($entry['JSON'], true);
$tomKeys = array_filter(array_keys($parsedJSON), function($key) { return strpos($key, 'massnahmen_') === 0; });
foreach($tomKeys as $key) {
if(strpos($key, '_kommentar') !== FALSE || in_array($key, ['massnahmen_risiko', 'massnahmen_abhaengigkeit_id', 'massnahmen_abhaengigkeit_name', 'massnahmen_vertraulichkeit', 'massnahmen_integritaet', 'massnahmen_verfuegbarkeit'])) continue;
if($parsedJSON[$key] !== '0') continue;
if($parsedJSON[$key] === '0' && (!array_key_exists($key . '_kommentar', $parsedJSON) || empty($parsedJSON[$key . '_kommentar']))) {
$parsedJSON[$key] = '-1';
}
}
$sth2->execute([json_encode($parsedJSON), $entry['ID']]);
}
$this->pdo->exec("PRAGMA user_version = 11;");
$this->pdo->commit();
}
......
......@@ -332,6 +332,9 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<div class="col-sm-offset-1 col-sm-10">
<h6 class="info-text text-ul-dot printHide">2. Sicherheitsmaßnahmen angeben</h6>
<p class="printHide">Klicken Sie auf die Bausteine, um die jeweiligen Anforderungen anzuzeigen und den Umsetzungsstand sowie die Sicherheitsmaßnahmen anzugeben.</p>
<div class="checkbox text-center">
<label><input type="checkbox" id="hideFinishedTOMs" value="1" /> <strong>Bereits bearbeitete Massnahmen ausblenden</strong> <i data-toggle="tooltip" title="Neu bearbeitete Massnahmen werden erst beim nächsten Laden oder bei einem erneuten Ein- und Ausblenden beachtet." class="fa fa-question-circle-o fa-lg"></i></label>
</div>
<div class="panel-group" id="tom_accordion" role="tablist" aria-multiselectable="true">
</div>
</div>
......
......@@ -329,6 +329,9 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<div class="col-sm-offset-1 col-sm-10">
<h6 class="info-text text-ul-dot printHide">2. Sicherheitsmaßnahmen angeben</h6>
<p class="printHide">Klicken Sie auf die Bausteine, um die jeweiligen Anforderungen anzuzeigen und den Umsetzungsstand sowie die Sicherheitsmaßnahmen anzugeben.</p>
<div class="checkbox text-center">
<label><input type="checkbox" id="hideFinishedTOMs" value="1" /> <strong>Bereits bearbeitete Massnahmen ausblenden</strong> <i data-toggle="tooltip" title="Neu bearbeitete Massnahmen werden erst beim nächsten Laden oder bei einem erneuten Ein- und Ausblenden beachtet." class="fa fa-question-circle-o fa-lg"></i></label>
</div>
<div class="panel-group" id="tom_accordion" role="tablist" aria-multiselectable="true">
</div>
</div>
......
......@@ -127,6 +127,9 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<div class="col-sm-offset-1 col-sm-10">
<h6 class="info-text text-ul-dot printHide">2. Sicherheitsmaßnahmen angeben</h6>
<p class="printHide">Klicken Sie auf die Bausteine, um die jeweiligen Anforderungen anzuzeigen und den Umsetzungsstand sowie die Sicherheitsmaßnahmen anzugeben.</p>
<div class="checkbox text-center">
<label><input type="checkbox" id="hideFinishedTOMs" value="1" /> <strong>Bereits bearbeitete Massnahmen ausblenden</strong> <i data-toggle="tooltip" title="Neu bearbeitete Massnahmen werden erst beim nächsten Laden oder bei einem erneuten Ein- und Ausblenden beachtet." class="fa fa-question-circle-o fa-lg"></i></label>
</div>
<div class="panel-group" id="tom_accordion" role="tablist" aria-multiselectable="true">
</div>
</div>
......@@ -139,7 +142,7 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<div class="col-sm-12">
<h5 class="info-text text-ul">Abschluss</h5>
</div>
<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 vorhandene Dokumente im PDF-Format an die Dokumentation angehangen und hinterlegt werden.</p>
......
......@@ -446,6 +446,9 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<div class="col-sm-offset-1 col-sm-10">
<h6 class="info-text text-ul-dot printHide">2. Sicherheitsmaßnahmen angeben</h6>
<p class="printHide">Klicken Sie auf die Bausteine, um die jeweiligen Anforderungen anzuzeigen und den Umsetzungsstand sowie die Sicherheitsmaßnahmen anzugeben.</p>
<div class="checkbox text-center">
<label><input type="checkbox" id="hideFinishedTOMs" value="1" /> <strong>Bereits bearbeitete Massnahmen ausblenden</strong> <i data-toggle="tooltip" title="Neu bearbeitete Massnahmen werden erst beim nächsten Laden oder bei einem erneuten Ein- und Ausblenden beachtet." class="fa fa-question-circle-o fa-lg"></i></label>
</div>
<div class="panel-group" id="tom_accordion" role="tablist" aria-multiselectable="true">
</div>
</div>
......
......@@ -1042,7 +1042,9 @@ function genHTMLforPDF(draft = false) {
if(draft) {
toSend.find('#tom_accordion').find('option').each(function() {
let selectName = $(this).closest('select')[0].name;
let selectedValue = $('select[name="' + selectName + '"]').val();
let selectedValue = $('select[name="' + selectName + '"]').val(); // .val() funktioniert in Kopie nicht richtig, deswegen Abfrage im Live-DOM
if(this.value === '-1') return;
if(this.value === selectedValue) {
$(this).closest('td').append('<p>&#9746; ' + this.text + '</p>');
......@@ -1060,11 +1062,27 @@ function genHTMLforPDF(draft = false) {
if(parseInt($(this).data('risk')) > currRiskLevel) $(this).remove();
});
/* Ausgeblendete, bearbeitete TOMs wieder anzeigen */
toSend.find('#tom_accordion tr.hidden').removeClass('hidden');
/* Bei Abschluss-PDF unbearbeitete Massnahmen entfernen */
if(!draft) toSend.find('#tom_accordion select').each(function() {
if($('select[name="' + this.name + '"]').val() === '-1') $(this).closest('tr').remove();
});
/* Bei Abschluss-PDF Volltexte entfernen */
if(!draft) toSend.find('#tom_accordion').find('tbody td:nth-child(2) div.tom_desc').remove();
if(!draft) toSend.find('#tom_accordion').find('tbody td:nth-child(2) p').removeClass('strong');
if(!draft) toSend.find('#tom_accordion').find('.panel-body > p, .panel-body > a').remove();
/* Leere TOM-Kategorien entfernen */
if(!draft) toSend.find('#tom_accordion table').each(function() {
if($(this).find('tbody tr').length === 0) {
$(this).closest('.panel-collapse').prev('h6').remove();
$(this).closest('.panel-collapse').remove();
}
});
/* Hinweis-Text bei keinen ausgewählten TOMs */
if(toSend.find('#toggletoms').find('input[type=checkbox]:checked').length === 0 || toSend.find('#tom_accordion').find('tr').length === 0) {
toSend.find('#tom_accordion').append('<h5 class="text-center"><strong>Es wurden keine Technischen und Organisatorischen Maßnahmen ausgewählt.</strong></h5>');
......@@ -1810,10 +1828,11 @@ function generateTOMList() {
/**
* Filtert die Liste der TOMs anhand des gewählten Risikolevels
* @param {Number} risklevel Risikolevel des Verfahrens
* @param {Number} risklevel Risikolevel des Verfahrens
* @param {Boolean} hideFinished (optional) Bearbeitete Massnahmen ausblenden
* @return {undefined}
*/
function filterTOMList(risklevel) {
function filterTOMList(risklevel, hideFinished = false) {
let riskTexts = {
'1': 'Der Schutzbedarf ' + (modeNum === 2 ? 'des ' + modeName[0] + 's' : 'der ' + modeName[0]) + ' ist normal. Es sind die <em>Basis</em>-Anforderungen umzusetzen.',
'2': 'Der Schutzbedarf ' + (modeNum === 2 ? 'des ' + modeName[0] + 's' : 'der ' + modeName[0]) + ' ist hoch. Es sind vorrangig die <em>Basis</em>-Anforderungen umzusetzen. Darüber hinaus sollten die <em>Standard</em>-Anforderungen umgesetzt werden.',
......@@ -1829,6 +1848,8 @@ function filterTOMList(risklevel) {
let tomRisklevel = parseInt($(this).data('risk'));
if(tomRisklevel <= risklevel) $(this).removeClass('hidden');
if(tomRisklevel > risklevel) $(this).addClass('hidden');
if(hideFinished && $(this).find('select').val() !== '-1') $(this).addClass('hidden');
});
$('#tom_accordion').find('div.panel').each((idx, elem) => {
......@@ -1906,8 +1927,9 @@ function toggleTOMList(evt) {
// Umsetzung
let tomDropdown = $('<select data-tool="selectpicker" name="massnahmen_' + tomID + '"></select>')
.append('<option value="-1" selected>Unbearbeitet</option>')
.append('<option value="1">Ja</option>')
.append('<option value="0" selected>Nein</option>')
.append('<option value="0">Nein</option>')
.append('<option value="2">Teilweise</option>')
.append('<option value="4">Entbehrlich</option>');
......@@ -2441,6 +2463,15 @@ Promise.all(promises).then(function() {
filterTOMList(parseInt($(this).val()));
});
$('#hideFinishedTOMs').change(function() {
if(this.checked) {
filterTOMList(parseInt($('[name=massnahmen_risiko]:checked').val()), true);
}
else {
filterTOMList(parseInt($('[name=massnahmen_risiko]:checked').val()));
}
});
console.timeEnd('Dynamische Inhalte initialisieren');
/*
......
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