From f2d4eb0486d9a5cfef343b4bd371d90876d8c75b Mon Sep 17 00:00:00 2001 From: johnnyq Date: Mon, 29 Dec 2025 17:46:23 -0500 Subject: [PATCH] Fix Ticket Template auto filling --- agent/js/tickets_add_modal.js | 82 +++++++++++++++++++++++++++ agent/modals/ticket/ticket_add_v2.php | 50 +++++++--------- agent/user/modals/user_mfa_modal.php | 3 +- 3 files changed, 104 insertions(+), 31 deletions(-) diff --git a/agent/js/tickets_add_modal.js b/agent/js/tickets_add_modal.js index 154e29f3..bddcad07 100644 --- a/agent/js/tickets_add_modal.js +++ b/agent/js/tickets_add_modal.js @@ -174,3 +174,85 @@ function populateVendorsDropdown(client_id) { } ); } + +const TEMPLATE_AJAX_URL = "/agent/ajax.php"; + +function applyTemplateToForm(subject, details) { + const subjectEl = document.getElementById("subjectInput"); + if (subjectEl) subjectEl.value = subject || ""; + + if (typeof tinymce !== "undefined") { + const ed = tinymce.get("detailsInput"); + if (ed) { + ed.setContent(details || ""); + return; + } + } + + const detailsEl = document.getElementById("detailsInput"); + if (detailsEl) detailsEl.value = details || ""; +} + +function loadTemplatesIfPresent() { + const select = document.getElementById("ticket_template_select"); + if (!select) return; + + // If already loaded, do nothing + if (select.dataset.loaded === "1") return; + + // Mark as loading to prevent duplicate fetches + select.dataset.loaded = "1"; + + fetch(`${TEMPLATE_AJAX_URL}?get_ticket_templates=true`, { credentials: "same-origin" }) + .then(r => r.json()) + .then(data => { + select.innerHTML = ``; + + (data.templates || []).forEach(t => { + const opt = document.createElement("option"); + opt.value = t.ticket_template_id; + opt.textContent = `${t.ticket_template_name} (${t.task_count} tasks)`; + select.appendChild(opt); + }); + }) + .catch(err => { + // allow retry if it failed + select.dataset.loaded = "0"; + console.error("Template list load failed:", err); + }); +} + +// 1) Run once now (in case modal is already present) +loadTemplatesIfPresent(); + +// 2) Watch for AJAX-injected modal content +const ticketTemplateObserver = new MutationObserver(() => { + loadTemplatesIfPresent(); +}); + +ticketTemplateObserver.observe(document.body, { childList: true, subtree: true }); + +// 3) When user changes template, fetch details +document.addEventListener("change", function (e) { + if (e.target && e.target.id === "ticket_template_select") { + const templateId = e.target.value; + + if (!templateId || templateId === "0") { + applyTemplateToForm("", ""); + return; + } + + fetch(`${TEMPLATE_AJAX_URL}?get_ticket_template_details=true&ticket_template_id=${encodeURIComponent(templateId)}`, { + credentials: "same-origin" + }) + .then(r => r.json()) + .then(resp => { + if (resp.success !== "TRUE") { + applyTemplateToForm("", ""); + return; + } + applyTemplateToForm(resp.subject, resp.details); + }) + .catch(err => console.error("Template details load failed:", err)); + } +}); diff --git a/agent/modals/ticket/ticket_add_v2.php b/agent/modals/ticket/ticket_add_v2.php index 9cc31e92..a7d3961f 100644 --- a/agent/modals/ticket/ticket_add_v2.php +++ b/agent/modals/ticket/ticket_add_v2.php @@ -18,7 +18,7 @@ ob_start();
- + @@ -58,13 +58,13 @@ ob_start(); - +
@@ -297,32 +297,24 @@ ob_start(); diff --git a/agent/user/modals/user_mfa_modal.php b/agent/user/modals/user_mfa_modal.php index cea5334e..8f4b05d7 100644 --- a/agent/user/modals/user_mfa_modal.php +++ b/agent/user/modals/user_mfa_modal.php @@ -25,7 +25,7 @@ $data = "otpauth://totp/ITFlow:$session_email?secret=$token";
-