gelöschte Bilder entfernen
This commit is contained in:
@@ -50,6 +50,9 @@ include_once 'php/controller/showArticle-controller.php';
|
|||||||
echo '[]';
|
echo '[]';
|
||||||
}
|
}
|
||||||
?></textarea>
|
?></textarea>
|
||||||
|
|
||||||
|
<!-- unsichtbares Input, um die zu löschenden Bilder zu übergeben-->
|
||||||
|
<input type="hidden" id="deleted-images" name="deleted_images" value="[]">
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Seitenleiste -->
|
<!-- Seitenleiste -->
|
||||||
|
|||||||
@@ -41,6 +41,19 @@ function initEditor() {
|
|||||||
deleteBtn.innerHTML = "✕";
|
deleteBtn.innerHTML = "✕";
|
||||||
deleteBtn.classList.add("delete-block-btn");
|
deleteBtn.classList.add("delete-block-btn");
|
||||||
deleteBtn.addEventListener("click", () => {
|
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.remove();
|
||||||
});
|
});
|
||||||
blockDiv.appendChild(deleteBtn);
|
blockDiv.appendChild(deleteBtn);
|
||||||
|
|||||||
@@ -77,37 +77,12 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
|||||||
mkdir($uploadDir, 0755, true);
|
mkdir($uploadDir, 0755, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Verwaiste Bilder löschen:
|
// --- Verwaiste Bilder löschen über die JS-Löschliste:
|
||||||
try {
|
if (isset($_POST['deleted_images'])) {
|
||||||
// 1. Alten Artikelzustand vor dem Update aus der Datenbank laden
|
$deletedImages = json_decode($_POST['deleted_images'], true);
|
||||||
$articleManager = ArticleManager::getInstance();
|
if (is_array($deletedImages)) {
|
||||||
$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
|
|
||||||
foreach ($deletedImages as $imagePath) {
|
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);
|
$filename = basename($imagePath);
|
||||||
$fullDeletePath = $uploadDir . $filename;
|
$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:
|
// --- NEU hinzugefügte Base64-Bilder:
|
||||||
|
|||||||
Reference in New Issue
Block a user