Closes #64, #16; Bereinigungsskript für gelöscht-markierte Dokumentationen ergänzt

parent 0ee15b22
......@@ -886,6 +886,32 @@
}
}
/**
* Listet alle IDs der als 'gelöscht' markierten Dokumentationen auf.
*
* @return mixed[] Liste der IDs
* @throws PDOException
* @throws Exception
*/
public function listVerfahrenDeleted() {
if($this->isConnected()) {
$sth = $this->pdo->prepare('SELECT ID FROM verfahren WHERE Status = 3;');
$sth->execute();
ob_start();
$sth->debugDumpParams();
$sqlDump = ob_get_clean();
print "DBCon.class.php -> listVerfahrenDeleted() Execute: $sqlDump";
return $sth->fetchAll();
}
else {
throw new Exception("DBCon.class.php -> Keine aktive Datenbank-Verbindung!");
}
}
/**
* Liest ein Verfahren mit der übergebenen ID aus.
*
......@@ -1198,7 +1224,7 @@
}
/**
* Löscht das Verfahren mit der übergebenen ID.
* Löscht das Verfahren mit der übergebenen ID (markiert es als gelöscht).
*
* @param int $verfahrensId ID des zu löschenden Verfahrens
* @param string $userId Nutzerkennung des ausführenden Nutzers
......@@ -1215,7 +1241,7 @@
return FALSE;
}
if(!$userIsDSB && $this->getVerfahrenInfo()['Typ'] === 4) {
if(!$userIsDSB && $this->getVerfahrenInfo($verfahrensId)['Typ'] === 4) {
return FALSE;
}
......@@ -1248,6 +1274,40 @@
}
}
/**
* Löscht eine Dokumentation final. Wird nur ausgeführt, wenn die Dokumentation vorher bereits im Zustand gelöscht war.
* @param int $verfahrensId ID der Dokumentation
* @return bool Gibt im Erfolgsfall TRUE zurück; FALSE falls das Verfahren nicht gefunden wurde oder es noch nicht als gelöscht markiert war
* @throws PDOException
* @throws Exception
*/
public function finalDelVerfahren($verfahrensId) {
if($this->isConnected()) {
# Das Verfahren wird erstmal nur als gelöscht markiert
$sth = $this->pdo->prepare('DELETE FROM verfahren WHERE Status = 3 AND id = ?;');
$sth->execute(array($verfahrensId));
ob_start();
$sth->debugDumpParams();
$sqlDump = ob_get_clean();
print "DBCon.class.php -> finalDelVerfahren() Execute: $sqlDump";
$deletedRows = $sth->rowCount();
if($deletedRows === 1) {
return TRUE; // Falls genau ein Verfahren gelöscht wurde
}
if($deletedRows === 0) return FALSE; // Falls nichts gelöscht werden konnte
throw new Exception("DBCon.class.php -> Fehler beim Löschen eines Verfahrens! (Fehler: Unbekannter Fehler - Gelöschte Reihen: $deletedRows)");
}
else {
throw new Exception("DBCon.class.php -> Keine aktive Datenbank-Verbindung!");
}
}
/**
* Liest die letzten Historie-Einträge zu einem bestimmten Verfahren aus.
*
......
......@@ -146,6 +146,12 @@ class localDocMGMT extends DocMGMT {
$filePath = $pdf_dir . DIRECTORY_SEPARATOR . $processID . DIRECTORY_SEPARATOR . $fileRef;
if(unlink($filePath)) {
if(count(glob($pdf_dir . DIRECTORY_SEPARATOR . $processID . DIRECTORY_SEPARATOR . '*')) === 0) {
if(!rmdir($pdf_dir . DIRECTORY_SEPARATOR . $processID)) {
trigger_error("[SecDoc] localDocMGMT.php -> Leerer Ordner '" . $pdf_dir . DIRECTORY_SEPARATOR . $processID . "' konnte nicht gelöscht werden");
error_log("[SecDoc] localDocMGMT.php -> Leerer Ordner '" . $pdf_dir . DIRECTORY_SEPARATOR . $processID . "' konnte nicht gelöscht werden");
}
}
return TRUE;
}
else {
......
......@@ -249,7 +249,7 @@
require_once '../vendor/autoload.php';
global $dbcon, $userId, $pdf_dir, $prog_name, $prog_version, $prog_url;
global $dbcon, $userId, $pdf_dir, $prog_name, $prog_version, $prog_url, $docmgmtClass, $temp_dir;
$res = Utils::searchUsers($userId, TRUE);
$author = !empty($res) ? $res[0]['name'] : '';
......@@ -320,6 +320,46 @@ EOH;
$mpdf->WriteHTML($part,2);
}
if(!$isDraft) {
# Angehängte PDF-Dokumente einbetten
$attachedDocs = $dbcon->listDocuments($verfahrensId);
if(count($attachedDocs) > 0) {
$mpdf->Bookmark("Angehängte Dokumente", 0);
}
foreach($attachedDocs as $doc) {
$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) {
error_log("[SecDoc] verwaltung.php -> Konnte temporäre PDF von angehängtem Dokument nicht erstellen (Dokumentation #{$verfahrensId} - Dokument #{$doc['DocID']})");
continue;
}
$mpdf->WriteHTML('<pagebreak />');
$tocTitle = empty($doc['Description']) ? $doc['FileRef'] : $doc['Description'];
if(strlen($tocTitle) > 43) {
$tocTitle = trim(substr($tocTitle, 0, 40)) . '...';
}
$mpdf->Bookmark(htmlspecialchars($tocTitle), 1);
try {
$pageCount = $mpdf->SetSourceFile($tmpFile);
for($c = 1; $c <= $pageCount; $c++) {
$mpdf->UseTemplate($mpdf->ImportPage($c));
if($c !== $pageCount) $mpdf->WriteHTML('<pagebreak />');
}
} catch(\Exception $e) {
$mpdf->WriteHTML('<h3>Die angehängte PDF konnte nicht gelesen werden! Möglicherweise wird das Format nicht unterstützt.</h3>');
error_log("[SecDoc] verwaltung.php -> PDF konnte nicht gelesen werden (Dokument #{$doc['DocID']}) (Fehler: " . $e->getMessage() . ")");
unlink($tmpFile);
continue;
}
unlink($tmpFile);
}
}
# PDF generieren und zurückgeben
#$title = preg_replace('/\W/', '_', $title); # Alle Nicht-Wort-Zeichen in Unterstriche umwandeln
$pdf_content = $mpdf->Output(
......@@ -1314,12 +1354,16 @@ EOH;
break;
}
# Löscht ein Verfahren
# Löscht ein Verfahren (es wird aktuell nur als gelöscht markiert)
case 'delete': {
if(empty($verfahrensId)) {
returnError('Keine ID für ein Verfahren wurde übergeben!');
}
if(!$userIsDSB && $dbcon->getPermissionLevel($verfahrensId, $userId, $userGroups) < 2) {
returnError('Keine Schreibberechtigung für die gewählte Dokumentation!');
}
$dependencies = $dbcon->getDependencies($verfahrensId, $userId, $userGroups, $userIsDSB);
if(is_array($dependencies) && count($dependencies) > 0) {
......@@ -1328,20 +1372,6 @@ EOH;
$success = $dbcon->delVerfahren($verfahrensId, $userId, $userGroups, $userIsDSB);
if($success) {
if(!unlink($includes_dir . DIRECTORY_SEPARATOR . $verfahrensId . '.txt')) {
error_log('[SecDoc] verwaltung.php -> Konnte Include-Textbaustein zur ID "' . $verfahrensId . '" nicht löschen!');
}
if(!unlink($pdf_dir . DIRECTORY_SEPARATOR . $verfahrensId . '.pdf')) {
error_log('[SecDoc] verwaltung.php -> Konnte PDF zur ID "' . $verfahrensId . '" nicht löschen!');
}
if(!unlink($pdf_dir . DIRECTORY_SEPARATOR . $verfahrensId . '_DRAFT.pdf')) {
error_log('[SecDoc] verwaltung.php -> Konnte Vorschau-PDF zur ID "' . $verfahrensId . '" nicht löschen!');
}
}
if(!$success) {
returnError('Kein Verfahren wurde gelöscht, da entweder das Verfahren nicht gefunden wurde oder Sie keine Berechtigung haben!');
}
......
......@@ -457,55 +457,6 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<h5 class="info-text text-ul">Abschluss</h5>
</div>
<div class="col-sm-offset-1 col-sm-10">
<h6 class="info-text text-ul-dot">Referenzdokumente</h6>
<p class="printHide">Hier haben Sie die Möglichkeit auf bereits vorhandene Dokumente zu verweisen, die beim fachlichen oder technischen Verantwortlichen eingesehen werden können.</p>
<ul class="list-unstyled">
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_risikoanalyse" type="checkbox" value="1"> Risikoanalyse</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_risikoanalyse_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_datensicherheitbeschreibung" type="checkbox" value="1"> Allgemeine Datensicherheitsbeschreibung</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_datensicherheitbeschreibung_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_datensicherheitskonzept" type="checkbox" value="1"> Umfassendes Datensicherheitskonzept</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_datensicherheitskonzept_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_wiederanlaufkonzept" type="checkbox" value="1"> Notfallkonzept / Wiederanlaufkonzept</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_wiederanlaufkonzept_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_netzstruktur" type="checkbox" value="1"> Netzstrukturbeschreibung</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_netzstruktur_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_verhaltensregeln" type="checkbox" value="1"> Interne Verhaltensregeln</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_verhaltensregeln_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_sonstige_label" type="checkbox" value="1"> Sonstige Dokumente</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_sonstige" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
</ul>
</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>
......
......@@ -452,55 +452,6 @@ Art. 25 DSGVO Datenschutz durch Technikgestaltung und durch datenschutzfreundlic
<h5 class="info-text text-ul">Abschluss</h5>
</div>
<div class="col-sm-offset-1 col-sm-10">
<h6 class="info-text text-ul-dot">Referenzdokumente</h6>
<p class="printHide">Hier haben Sie die Möglichkeit auf bereits vorhandene Dokumente zu verweisen, die beim fachlichen oder technischen Verantwortlichen eingesehen werden können.</p>
<ul class="list-unstyled">
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_risikoanalyse" type="checkbox" value="1"> Risikoanalyse</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_risikoanalyse_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_datensicherheitbeschreibung" type="checkbox" value="1"> Allgemeine Datensicherheitsbeschreibung</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_datensicherheitbeschreibung_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_datensicherheitskonzept" type="checkbox" value="1"> Umfassendes Datensicherheitskonzept</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_datensicherheitskonzept_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_wiederanlaufkonzept" type="checkbox" value="1"> Notfallkonzept / Wiederanlaufkonzept</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_wiederanlaufkonzept_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_netzstruktur" type="checkbox" value="1"> Netzstrukturbeschreibung</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_netzstruktur_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_verhaltensregeln" type="checkbox" value="1"> Interne Verhaltensregeln</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_verhaltensregeln_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_sonstige_label" type="checkbox" value="1"> Sonstige Dokumente</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_sonstige" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
</ul>
</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>
......
......@@ -139,56 +139,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">
<h6 class="info-text text-ul-dot">Referenzdokumente</h6>
<p class="printHide">Hier haben Sie die Möglichkeit auf bereits vorhandene Dokumente zu verweisen, die beim fachlichen oder technischen Verantwortlichen eingesehen werden können.</p>
<ul class="list-unstyled">
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_risikoanalyse" type="checkbox" value="1"> Risikoanalyse</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_risikoanalyse_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_datensicherheitbeschreibung" type="checkbox" value="1"> Allgemeine Datensicherheitsbeschreibung</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_datensicherheitbeschreibung_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_datensicherheitskonzept" type="checkbox" value="1"> Umfassendes Datensicherheitskonzept</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_datensicherheitskonzept_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_wiederanlaufkonzept" type="checkbox" value="1"> Notfallkonzept / Wiederanlaufkonzept</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_wiederanlaufkonzept_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_netzstruktur" type="checkbox" value="1"> Netzstrukturbeschreibung</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_netzstruktur_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_verhaltensregeln" type="checkbox" value="1"> Interne Verhaltensregeln</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_verhaltensregeln_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_sonstige_label" type="checkbox" value="1"> Sonstige Dokumente</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_sonstige" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
</ul>
</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>
......
......@@ -584,55 +584,6 @@ Art. 35 DSGVO" class="fa fa-question-circle-o fa-lg"></i></h6>
</ul>
</div>
<div class="col-sm-offset-1 col-sm-10">
<h6 class="info-text text-ul-dot">Referenzdokumente</h6>
<p class="printHide">Hier haben Sie die Möglichkeit auf bereits vorhandene Dokumente zu verweisen, die beim fachlichen oder technischen Verantwortlichen eingesehen werden können.</p>
<ul class="list-unstyled">
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_risikoanalyse" type="checkbox" value="1"> Datenschutz-Folgeabschätzung / Risikoanalyse</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_risikoanalyse_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_datensicherheitbeschreibung" type="checkbox" value="1"> Allgemeine Datensicherheitsbeschreibung</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_datensicherheitbeschreibung_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_datensicherheitskonzept" type="checkbox" value="1"> Umfassendes Datensicherheitskonzept</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_datensicherheitskonzept_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_wiederanlaufkonzept" type="checkbox" value="1"> Notfallkonzept / Wiederanlaufkonzept</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_wiederanlaufkonzept_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_netzstruktur" type="checkbox" value="1"> Netzstrukturbeschreibung</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_netzstruktur_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_verhaltensregeln" type="checkbox" value="1"> Interne Verhaltensregeln</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_verhaltensregeln_url" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
<li>
<div class="form-check">
<label class="form-check-label"><input class="form-check-input additionalDocs" name="abschluss_dokumente_sonstige_label" type="checkbox" value="1"> Sonstige Dokumente</label>
<input type="text" class="form-control docInputs hidden" name="abschluss_dokumente_sonstige" placeholder="URL zu Datei-Speicherort bzw. Hinweis auf Dokument-Ablageort">
</div>
</li>
</ul>
</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>
......
......@@ -511,9 +511,14 @@ function showVerfahrensliste(startup = false) {
if(show) {
modalBody.append('<p><span><button type="button" class="btn loadEmpty btn-success btn-fill"><i class="fa fa-plus"></i> Neue Dokumentation anlegen</button></span></p>');
modalBody.find('.loadEmpty').click(function() {
history.replaceState({}, document.title, window.location.href.split('?')[0]);
loadEmpty();
modal.modal('hide');
if(!canEdit) {
window.location.href = "?page=" + mode;
}
else {
history.replaceState({}, document.title, window.location.href.split('?')[0]);
loadEmpty();
modal.modal('hide');
}
});
modal.modal();
}
......@@ -2084,6 +2089,11 @@ function showDocumentAddDialog(docID = -1, fileref = '', description = '') {
setOverlay(false);
}
/**
* Listet angehängte Dokumente auf.
*
* @return {undefined}
*/
function loadDocuments() {
$.get(backendPath, { 'action': 'listDocuments', 'id': loadId, 'debug': debug }).done(function(data) {
if(!data['success']) {
......@@ -2093,7 +2103,8 @@ function loadDocuments() {
$('#attached_documents').find('tbody').empty();
data['data'].forEach((val, idx) => {
$('#attached_documents').find('tbody').append('<tr><td>' + htmlEncode(val['FileRef']) + '</td><td>' + htmlEncode(val['Description']) + '</td><td>' + htmlEncode(val['Date']) + '</td><td class="text-center"><div class="btn-group"><button type="button" class="attached_documents_show btn" data-docid="' + val['DocID'] + '">Anzeigen</button><button type="button" class="attached_documents_edit btn btn-warning" data-docid="' + val['DocID'] + '" data-docdesc="' + val['Description'] + '" data-fileref="' + val['FileRef'] + '"><i class="fa fa-pencil-square-o"></i> Bearbeiten</button><button type="button" class="attached_documents_del btn btn-danger" data-docid="' + val['DocID'] + '"><i class="fa fa-minus"></i> Löschen</button></div></td></tr>');
let lastUpdate = new Date(Date.parse(val['Date'].replace(' ', 'T')));
$('#attached_documents').find('tbody').append('<tr><td>' + htmlEncode(val['FileRef']) + '</td><td>' + htmlEncode(val['Description']) + '</td><td>' + lastUpdate.toLocaleDateString('de-DE', { year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric' }) + '</td><td class="text-center"><div class="btn-group"><button type="button" class="attached_documents_show btn" data-docid="' + val['DocID'] + '">Anzeigen</button><button type="button" class="attached_documents_edit btn btn-warning" data-docid="' + val['DocID'] + '" data-docdesc="' + val['Description'] + '" data-fileref="' + val['FileRef'] + '" '+ (canEdit ? '' : 'disabled') + '><i class="fa fa-pencil-square-o"></i> Bearbeiten</button><button type="button" class="attached_documents_del btn btn-danger" data-docid="' + val['DocID'] + '" '+ (canEdit ? '' : 'disabled') + '><i class="fa fa-minus"></i> Löschen</button></div></td></tr>');
});
$('#attached_documents').find('.attached_documents_show').click((evt) => {
......
#!/usr/local/bin/php
<?php
/**
* Enthält eine abstrakte Implementierung der Klasse zur Dokumentenverwaltung.
*
* @author Dustin Gawron <dustin.gawron@uni-muenster.de>
* @copyright (c) 2020 Westfälische Wilhelms-Universität Münster
* @license AGPL-3.0-or-later <https://www.gnu.org/licenses/agpl.html>
*/
# Skript nur auf Kommandozeile ausführen
if(php_sapi_name() !== 'cli') die('cli execution only!');
# Allgemeine Einstellungen
require_once('../ajax/config.inc.php');
# Skript-Einstellungen
set_time_limit(0);
$dbcon = new DBCon($db_dir, $db_name);
# Gelöscht Dokumentationen holen
$deletedDocs = $dbcon->listVerfahrenDeleted();
echo "Es sind " . count($deletedDocs) . " Dokumentationen als gelöscht markiert.\n";
foreach($deletedDocs as $doc) {
echo "Lösche Dokumentation #{$doc['ID']} endgültig...\n";
# Angehängte Dokumente löschen
$attachedDocs = $dbcon->listDocuments($doc['ID']);
foreach($attachedDocs as $file) {
$delSuccess = $docmgmtClass->deleteDocument($doc['ID'], $file['FileRef']);
if(!$delSuccess) {
echo "Konnte angehängtes Dokument '{$file['FileRef']}' nicht löschen! Überspringe Dokumentation #{$doc['ID']}...\n";
error_log("[SecDoc] clean_deleted_documentations.php -> Konnte angehängtes Dokument '{$file['FileRef']}' von der gelöschten Dokumentation #{$doc['ID']} nicht löschen!");
continue 2;
}
$dbcon->deleteDocument($file['DocID']);
}
# Include-Baustein löschen
if(!unlink($includes_dir . DIRECTORY_SEPARATOR . $doc['ID'] . '.txt')) {
echo 'Konnte Include-Textbaustein zur ID "' . $doc['ID'] . '" nicht löschen!' . "\n";
error_log('[SecDoc] clean_deleted_documentations.php -> Konnte Include-Textbaustein zur ID "' . $doc['ID'] . '" nicht löschen!');
}
# Abschluss-PDF löschen
if(!unlink($pdf_dir . DIRECTORY_SEPARATOR . $doc['ID'] . '.pdf')) {
echo 'Konnte PDF zur ID "' . $doc['ID'] . '" nicht löschen!' . "\n";
error_log('[SecDoc] clean_deleted_documentations.php -> Konnte PDF zur ID "' . $doc['ID'] . '" nicht löschen!');
}
# Vorschau-PDF löschen
if(!unlink($pdf_dir . DIRECTORY_SEPARATOR . $doc['ID'] . '_DRAFT.pdf')) {
echo 'Konnte Vorschau-PDF zur ID "' . $doc['ID'] . '" nicht löschen!' . "\n";
error_log('[SecDoc] clean_deleted_documentations.php -> Konnte Vorschau-PDF zur ID "' . $doc['ID'] . '" nicht löschen!');
}
if($dbcon->finalDelVerfahren($doc['ID'])) {
echo "Dokumentation #{$doc['ID']} erfolgreich gelöscht!\n";
}
else {
echo "Dokumentation #{$doc['ID']} konnte nicht gelöscht werden!\n";
}
}
?>
......@@ -2,7 +2,7 @@
<?php
/**
* cpe-update.php - CPE-Feed von NIST holen
*
*
* https://nvd.nist.gov/products/cpe
* wget -O- https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml.gz | gunzip > cpe.xml
* cd /www/data/ZIVtest/htdocs/ZIVtest/secdoc/assets/ajax && ./cpe-update.php > /dev/null
......@@ -13,7 +13,9 @@
*
* TK, 13.06.2018 - Erste Version
*/
if(php_sapi_name() !== 'cli') die('cli execution only!');
$debug = 0;
# Vorhandenes Verzeichnis laden
......@@ -40,7 +42,7 @@
# Stand überprüfen und ausgeben
$timestamp = date('Y-m-d H:i:s', strtotime(strval($xml->generator->timestamp)));
if ($debug) { print "Notice: Common Platform Enumeration (CPE) Dictionary (Stand: $timestamp).\n"; }
print "DELETE FROM CPE;\n";
print "BEGIN TRANSACTION;\n";
# Alle Einträge durchgehen und in SQL umwandeln
......@@ -55,5 +57,5 @@
print "INSERT INTO CPE VALUES ('$item_value', '$item_label', '$item_typ');\n";
}
}
print "END TRANSACTION;\n";
?>
\ No newline at end of file
print "END TRANSACTION;\n";
?>
......@@ -2,14 +2,16 @@
<?php
/**
* db-update-wwu.php - Zur Befüllung der SQLite-DB (secdoc.db) mit Personen- und Organisationseinheitdaten aus WWU Datenbanken.
*
*
* TK, 18.07.2018 - Erste Version
*
*
* @author Thorsten Küfer <thorsten.kuefer@uni-muenster.de>
* @copyright (c) 2018 Westfälische Wilhelms-Universität Münster
* @license AGPL-3.0-or-later <https://www.gnu.org/licenses/agpl.html>
*/
if(php_sapi_name() !== 'cli') die('cli execution only!');
# Allgemeine Einstellungen
require_once('../ajax/config.inc.php');
......@@ -34,7 +36,7 @@
/**
* Personen-Tabelle mit Mitarbeitern und Stud. Hilfskräften füllen.
*
*
*/
function sql_personen_table()
{
......@@ -44,7 +46,7 @@
/**
* Liste der Mitarbeiter sowie Adresse, Tel. und E-Mail holen.
*
*
*/
function sql_mitarbeiter_table()
{
......@@ -81,7 +83,7 @@
/**
* Liste der Stud. Mitarbeiter mit Name holen.
*
*
*/
function sql_studhilfskraefte_table()
{
......@@ -100,7 +102,7 @@
/**
* Liste der IVVen holen (Tabelle V_NETZ).
*
*
* @global type $oci_handle Globaler Datenbank-Handle