get('admin_sendeplan_vorlagen_title', '📋 Sendeplan Vorlagen'); $backLink = './?AdminSendeplanConfig'; ob_start(); ?>
✖

get('admin_sendeplan_vorlagen_intro', '') ?>

get('admin_sendeplan_vorlagen_format_title', '📐 Empfohlenes Bildformat für Vorlagen') ?>
get('admin_sendeplan_vorlagen_format_text', '') ?>
# get('admin_sendeplan_vorlagen_th_bild', 'Bild') ?> get('admin_sendeplan_vorlagen_th_name', 'Name') ?> get('admin_sendeplan_vorlagen_th_sortierung', 'Sortierung') ?> get('admin_sendeplan_vorlagen_th_aktion', 'Aktion') ?>
get('admin_sendeplan_vorlagen_empty', '📭 Noch keine Vorlagen vorhanden. Klicke auf "Neue Vorlage", um zu starten.') ?>
verschieben . <?= e($v['name']) ?> get('admin_sendeplan_vorlagen_no_bild', 'Kein Bild') ?>
$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'; ?>