Warnung deaktivierung Template

This commit is contained in:
2026-02-01 01:26:47 +01:00
parent b376a92007
commit 1709ae6551
4 changed files with 141 additions and 1 deletions

View File

@@ -1060,6 +1060,16 @@ export function initEditor() {
}
}
async function confirmTemplateReferences(actionLabel) {
if (!current?.section?.is_template || !current?.id) return true;
const res = await apiAction('templates.references', { method: 'GET', data: { template_id: current.id } }).catch(() => ({}));
const refs = Array.isArray(res?.references) ? res.references : [];
if (!refs.length) return true;
const preview = refs.slice(0, 6).map(r => `${r.name || 'Template'} #${r.id}`).join(', ');
const more = refs.length > 6 ? ` und ${refs.length - 6} weitere` : '';
return confirm(`Dieses Template wird in ${refs.length} anderen Template(s) verwendet (${preview}${more}). ${actionLabel} trotzdem?`);
}
// Buttons
btnSave && (btnSave.onclick = save);
btnClear && (btnClear.onclick = clearEditor);
@@ -1086,6 +1096,8 @@ export function initEditor() {
if (!current?.id) return;
if (!currentVersionMeta || Number(currentVersionMeta.is_active) !== 1) return;
try {
const okRefs = await confirmTemplateReferences('Deaktivieren');
if (!okRefs) return;
const res = await apiAction('content_versions.deactivate', { method: 'POST', data: { content_id: current.id } });
if (!res?.ok) throw new Error(res?.error || 'Deaktivieren fehlgeschlagen');
await loadVersionsForCurrent({ keepSelection: true, preferredId: currentVersionId });

View File

@@ -88,6 +88,21 @@ async function openTemplateManager(item, section) {
let versions = [];
let activeId = 0;
const fetchTemplateReferences = async () => {
if (!section?.is_template) return [];
const res = await apiAction('templates.references', { method: 'GET', data: { template_id: item.id } }).catch(() => ({}));
return Array.isArray(res?.references) ? res.references : [];
};
const confirmTemplateReferences = async (actionLabel) => {
if (!section?.is_template) return true;
const refs = await fetchTemplateReferences();
if (!refs.length) return true;
const preview = refs.slice(0, 6).map(r => `${r.name || 'Template'} #${r.id}`).join(', ');
const more = refs.length > 6 ? ` und ${refs.length - 6} weitere` : '';
return confirm(`Dieses Template wird in ${refs.length} anderen Template(s) verwendet (${preview}${more}). ${actionLabel} trotzdem?`);
};
const updateDeleteState = () => {
const hasActive = !!activeId;
if (btnDelete) btnDelete.disabled = hasActive;
@@ -176,6 +191,10 @@ async function openTemplateManager(item, section) {
const onDeleteItem = async () => {
if (activeId) return;
if (section?.is_template) {
const ok = await confirmTemplateReferences('Löschen');
if (!ok) return;
}
if (!delDlg || !delForm) {
const res = await apiAction('content.delete', { method: 'POST', data: { id: item.id, section_id: section.id } });
toast(res && res.ok ? 'Gelöscht' : 'Löschen fehlgeschlagen', !!(res && res.ok), { duration: 3000 });
@@ -193,6 +212,10 @@ async function openTemplateManager(item, section) {
if (delCancel) delCancel.onclick = () => { delDlg.close(); cleanupDelete(); };
delForm.onsubmit = async (ev) => {
ev.preventDefault();
if (section?.is_template) {
const ok = await confirmTemplateReferences('Löschen');
if (!ok) return;
}
const res = await apiAction('content.delete', { method: 'POST', data: { id: item.id, section_id: section.id } });
delDlg.close();
cleanupDelete();
@@ -223,6 +246,10 @@ async function openTemplateManager(item, section) {
return;
}
if (target.dataset.versionDeactivate !== undefined) {
if (section?.is_template) {
const ok = await confirmTemplateReferences('Deaktivieren');
if (!ok) return;
}
const res = await apiAction('content_versions.deactivate', { method: 'POST', data: { content_id: item.id } });
toast(res && res.ok ? 'Aktive Version deaktiviert' : 'Deaktivieren fehlgeschlagen', !!(res && res.ok));
await loadVersions();