get('admin_sendeplan_vorlagen_title', '📋 Sendeplan Vorlagen');
$backLink = './?AdminSendeplanConfig';
ob_start();
?>
= e($message) ?>
✖
= $lang->get('admin_sendeplan_vorlagen_intro', '') ?>
= $lang->get('admin_sendeplan_vorlagen_format_title', '📐 Empfohlenes Bildformat für Vorlagen') ?>
= $lang->get('admin_sendeplan_vorlagen_format_text', '') ?>
$lang->get('admin_sendeplan_vorlagen_js_no_vorlagen', 'Keine Vorlagen vorhanden.'),
'save_error' => $lang->get('admin_sendeplan_vorlagen_js_save_error', 'Fehler beim Speichern'),
'discard_changes' => $lang->get('admin_sendeplan_vorlagen_js_discard_changes', 'Ungespeicherte Änderungen verwerfen?'),
'error_prefix' => $lang->get('admin_sendeplan_vorlagen_js_error_prefix', 'Fehler: '),
]);
$extraScripts = <<
const CSRF_TOKEN = {$csrfJs};
const LANG = {$langJs};
let unsavedChanges = false;
let dragSrcRow = null;
document.addEventListener("DOMContentLoaded", () => {
initDragAndDrop();
initSave();
initNavigationGuard();
initSuccessBanner();
});
// =========================
// DRAG & DROP
// =========================
function initDragAndDrop() {
const saveBtn = document.getElementById("saveOrderBtn");
if (saveBtn) {
saveBtn.disabled = true;
saveBtn.style.opacity = "0.5";
}
const placeholder = document.createElement("tr");
placeholder.classList.add("dragging");
placeholder.innerHTML = " | ";
document.querySelectorAll("#vorlagenTable tbody tr[data-id]").forEach(row => {
row.setAttribute("draggable", "true");
row.addEventListener("dragstart", e => {
dragSrcRow = row;
e.dataTransfer.setData("text/plain", row.dataset.id);
row.parentNode.insertBefore(placeholder, row.nextSibling);
setTimeout(() => row.style.display = "none", 0);
});
row.addEventListener("dragend", () => {
placeholder.parentNode.insertBefore(dragSrcRow, placeholder);
dragSrcRow.style.display = "";
placeholder.remove();
unsavedChanges = true;
if (saveBtn) {
saveBtn.disabled = false;
saveBtn.style.opacity = "1";
}
});
row.addEventListener("dragover", e => {
e.preventDefault();
const target = e.target.closest("tr[data-id]");
if (!target || target === placeholder) return;
target.parentNode.insertBefore(placeholder, target.nextSibling);
});
});
}
// =========================
// SAVE
// =========================
function initSave() {
window.saveOrder = function () {
const rows = Array.from(document.querySelectorAll("#vorlagenTable tbody tr[data-id]"));
if (!rows.length) {
alert(LANG.no_vorlagen);
return;
}
const ids = rows.map(r => r.dataset.id);
fetch("./?AdminUpdateSendeplanVorlagenOrder", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-CSRF-Token": CSRF_TOKEN
},
body: JSON.stringify({ ids })
})
.then(r => r.json())
.then(res => {
if (res.success === true) {
unsavedChanges = false;
const btn = document.getElementById("saveOrderBtn");
if (btn) {
btn.disabled = true;
btn.style.opacity = "0.5";
}
const url = new URL(window.location.href);
url.searchParams.set("saved", "1");
setTimeout(() => { window.location.href = url.toString(); }, 50);
} else {
alert(res.error || LANG.save_error);
}
})
.catch(err => alert(LANG.error_prefix + err));
};
document.getElementById("saveOrderBtn")?.addEventListener("click", saveOrder);
}
// =========================
// NAVIGATION GUARD
// =========================
function initNavigationGuard() {
window.addEventListener("beforeunload", e => {
if (!unsavedChanges) return;
const btn = document.getElementById("saveOrderBtn");
if (btn && btn.disabled) return;
e.preventDefault();
e.returnValue = "";
});
document.addEventListener("click", e => {
if (!unsavedChanges) return;
const target = e.target.closest("a");
if (!target) return;
if (!confirm(LANG.discard_changes)) {
e.preventDefault();
}
});
}
// =========================
// SUCCESS BANNER
// =========================
function closeSuccessBanner() {
const el = document.getElementById("successBanner");
if (el) el.style.display = "none";
}
function initSuccessBanner() {
const el = document.getElementById("successBanner");
if (!el) return;
// Nach 5 Sekunden ausblenden
setTimeout(() => {
el.style.transition = "opacity 0.5s ease";
el.style.opacity = "0";
setTimeout(() => el.style.display = "none", 500);
}, 5000);
}
// =========================
// FORM ANZEIGEN / VERSTECKEN
// =========================
function showForm() {
document.getElementById("vorlage-form-box").style.display = "block";
}
function hideForm() {
document.getElementById("vorlage-form-box").style.display = "none";
document.getElementById("form-id").value = "0";
document.getElementById("form-name").value = "";
document.getElementById("form-sortierung").value = "0";
document.getElementById("form-altes-bild").value = "";
document.getElementById("aktuelles-bild").style.display = "none";
}
function editVorlage(id, name, sortierung, bild) {
document.getElementById("form-id").value = id;
document.getElementById("form-name").value = name;
document.getElementById("form-sortierung").value = sortierung;
document.getElementById("form-altes-bild").value = bild;
if (bild) {
document.getElementById("bild-preview").src = "img/sendeplan_vorlagen/" + bild;
document.getElementById("aktuelles-bild").style.display = "block";
} else {
document.getElementById("aktuelles-bild").style.display = "none";
}
showForm();
document.getElementById("vorlage-form-box").scrollIntoView({ behavior: "smooth" });
}
// Button-Event für "Neue Vorlage"
document.getElementById("add-vorlage-btn")?.addEventListener("click", function() {
hideForm();
showForm();
document.getElementById("vorlage-form-box").scrollIntoView({ behavior: "smooth" });
});
JS;
include __DIR__ . '/admin_master_template.php';
?>