From 8ed7f7ec8fe1aeb40a7c18737f591678126ffb39 Mon Sep 17 00:00:00 2001 From: NOrtmann1 Date: Sun, 14 Jun 2026 22:41:16 +0200 Subject: [PATCH] =?UTF-8?q?gel=C3=B6schte=20Bilder=20entfernen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/updateArticle.php | 3 ++ js/editor.js | 13 +++++++ php/controller/updateArticle-controller.php | 39 +++------------------ 3 files changed, 21 insertions(+), 34 deletions(-) diff --git a/content/updateArticle.php b/content/updateArticle.php index bb69e0d..96d0690 100644 --- a/content/updateArticle.php +++ b/content/updateArticle.php @@ -50,6 +50,9 @@ include_once 'php/controller/showArticle-controller.php'; echo '[]'; } ?> + + + diff --git a/js/editor.js b/js/editor.js index 38aec78..fc4fe51 100644 --- a/js/editor.js +++ b/js/editor.js @@ -41,6 +41,19 @@ function initEditor() { deleteBtn.innerHTML = "✕"; deleteBtn.classList.add("delete-block-btn"); deleteBtn.addEventListener("click", () => { + const blockType = blockDiv.getAttribute("data-type"); + + // holt den Pfad aus dem data-value Attribut des divs + const blockValue = blockDiv.getAttribute("data-value"); + + if (blockType === "image" && blockValue && blockValue.startsWith("uploads/")) { + const deletedInput = document.getElementById("deleted-images"); + if (deletedInput) { + let deletedList = JSON.parse(deletedInput.value || "[]"); + deletedList.push(blockValue); + deletedInput.value = JSON.stringify(deletedList); + } + } blockDiv.remove(); }); blockDiv.appendChild(deleteBtn); diff --git a/php/controller/updateArticle-controller.php b/php/controller/updateArticle-controller.php index a57915e..6f091c9 100644 --- a/php/controller/updateArticle-controller.php +++ b/php/controller/updateArticle-controller.php @@ -77,37 +77,12 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { mkdir($uploadDir, 0755, true); } - // --- Verwaiste Bilder löschen: - try { - // 1. Alten Artikelzustand vor dem Update aus der Datenbank laden - $articleManager = ArticleManager::getInstance(); - $oldArticle = $articleManager->getArticle($id); - $oldBlocks = json_decode($oldArticle->getContent(), true); - - if (is_array($oldBlocks) && is_array($blocks)) { - $oldImages = []; - $newImages = []; - - // Alle Bildpfade aus dem alten Zustand sammeln - foreach ($oldBlocks as $oldBlock) { - if (isset($oldBlock['type'], $oldBlock['value']) && $oldBlock['type'] === 'image' && !str_starts_with($oldBlock['value'], 'data:image/')) { - $oldImages[] = $oldBlock['value']; - } - } - - // Alle Bildpfade aus dem neuen Zustand sammeln - foreach ($blocks as $newBlock) { - if (isset($newBlock['type'], $newBlock['value']) && $newBlock['type'] === 'image' && !str_starts_with($newBlock['value'], 'data:image/')) { - $newImages[] = $newBlock['value']; - } - } - - // Differenz ermitteln: Welche Pfade waren alt da, sind neu aber weg? - $deletedImages = array_diff($oldImages, $newImages); - - // Diese Dateien physisch vom Server löschen + // --- Verwaiste Bilder löschen über die JS-Löschliste: + if (isset($_POST['deleted_images'])) { + $deletedImages = json_decode($_POST['deleted_images'], true); + if (is_array($deletedImages)) { foreach ($deletedImages as $imagePath) { - // Extra-Sicherheit: Nur Dateien im eigenen Uploads-Ordner löschen + // Sicherheit: Nur den reinen Dateinamen filtern (Schutz vor Manipulation) $filename = basename($imagePath); $fullDeletePath = $uploadDir . $filename; @@ -116,10 +91,6 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { } } } - } catch (\Throwable $e) { - $_SESSION["message"] = $e->getMessage(); - header("location: ../../index.php?pfad=updateArticle&id=$id"); - exit(); } // --- NEU hinzugefügte Base64-Bilder: