<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\CoreExtension;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* @CompanyGroup/pages/tickets/create_ticket.html.twig */
class __TwigTemplate_d3c14b32ec9a23d50656de5d8361b57237ef38bbdfdf77b3d0f40772c63c6a4a extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
$__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->enter($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "@CompanyGroup/pages/tickets/create_ticket.html.twig"));
$__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02 = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->enter($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "@CompanyGroup/pages/tickets/create_ticket.html.twig"));
// line 1
$context["page_title"] = "New Ticket | HoneyBee";
// line 2
yield from $this->loadTemplate("@Application/inc/central_header.html.twig", "@CompanyGroup/pages/tickets/create_ticket.html.twig", 2)->unwrap()->yield($context);
// line 3
yield from $this->loadTemplate("@CompanyGroup/pages/admin/_sidebar.html.twig", "@CompanyGroup/pages/tickets/create_ticket.html.twig", 3)->unwrap()->yield($context);
// line 4
yield "
<style>
/* ── Design tokens ─────────────────────────────────────────────────────────── */
:root {
--n-cream: #F7F5F0;
--n-cream-2: #F0EDE5;
--n-white: #FFFFFF;
--n-dark: #1A1D2E;
--n-dark-2: #252840;
--n-amber: #C07D2A;
--n-amber-lt: #D4954A;
--n-amber-dim: rgba(192,125,42,.10);
--n-sage: #3D6B52;
--n-sage-dim: rgba(61,107,82,.09);
--n-muted: #6B6E7F;
--n-muted-2: #9395A5;
--n-border: rgba(26,29,46,.07);
--n-border-md: rgba(26,29,46,.12);
--n-shadow-sm: 0 2px 12px rgba(26,29,46,.07);
--n-shadow-md: 0 8px 32px rgba(26,29,46,.09);
--n-radius: 12px;
--n-radius-sm: 8px;
--n-font: 'DM Sans', 'Poppins', system-ui, sans-serif;
}
*, *::before, *::after { box-sizing: border-box; }
body { background: var(--n-cream); font-family: var(--n-font); color: var(--n-dark); text-align: left; }
/* ── Layout ────────────────────────────────────────────────────────────────── */
.tc-wrap { max-width: 1100px; margin: 0 auto; padding: 0 28px; }
.tc-page { padding: 40px 0 80px; }
/* ── Breadcrumb ────────────────────────────────────────────────────────────── */
.tc-breadcrumb {
font-size: .8rem; color: var(--n-muted-2); margin-bottom: 20px;
display: flex; align-items: center; gap: 6px;
}
.tc-breadcrumb a { color: var(--n-muted); text-decoration: none; font-weight: 500; }
.tc-breadcrumb a:hover { color: var(--n-amber); }
.tc-breadcrumb .sep { color: var(--n-border-md); }
.tc-breadcrumb .current { color: var(--n-dark); font-weight: 600; }
/* ── Page header ───────────────────────────────────────────────────────────── */
.tc-page-title {
font-family: 'Montserrat', sans-serif; font-size: clamp(1.4rem,2.5vw,1.9rem);
font-weight: 800; color: var(--n-dark); letter-spacing: -.02em; margin: 0 0 5px;
}
.tc-page-sub { font-size: .88rem; color: var(--n-muted); margin: 0 0 28px; }
.required-star { color: #c0392b; }
/* ── Form card ─────────────────────────────────────────────────────────────── */
.tc-card {
background: var(--n-white); border: 1px solid var(--n-border-md);
border-radius: var(--n-radius); padding: 28px 28px 24px;
margin-bottom: 16px; box-shadow: var(--n-shadow-sm);
}
.tc-card-title {
font-family: monospace; font-size: .72rem; font-weight: 700;
letter-spacing: .1em; text-transform: uppercase; color: var(--n-amber);
margin-bottom: 20px; padding-bottom: 12px;
border-bottom: 1px solid var(--n-border); display: flex;
align-items: center; justify-content: space-between; gap: 8px;
}
.tc-card-title i { margin-right: 6px; }
/* ── Form elements ─────────────────────────────────────────────────────────── */
.tc-label {
display: block; font-size: .8rem; font-weight: 600;
color: var(--n-muted); margin-bottom: 5px;
}
.tc-input,
.tc-select,
.tc-textarea {
width: 100%; border-radius: var(--n-radius-sm);
border: 1.5px solid var(--n-border-md); background: var(--n-cream);
color: var(--n-dark); font-family: var(--n-font); font-size: .9rem;
padding: 9px 13px; transition: border-color .15s, box-shadow .15s;
appearance: none;
}
.tc-textarea { resize: vertical; min-height: 130px; }
.tc-input:focus, .tc-select:focus, .tc-textarea:focus {
outline: none; border-color: var(--n-amber);
box-shadow: 0 0 0 3px var(--n-amber-dim);
}
.tc-select { background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236B6E7F' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E\"); background-repeat: no-repeat; background-position: right 13px center; padding-right: 36px; }
.tc-char-count { font-size: .73rem; color: var(--n-muted-2); text-align: right; margin-top: 4px; font-family: monospace; }
.tc-hint { font-size: .75rem; color: var(--n-muted-2); margin-top: 4px; }
/* ── Priority grid ─────────────────────────────────────────────────────────── */
.tc-priority-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 10px; }
.tc-prio-input { display: none; }
.tc-prio-label {
display: flex; flex-direction: column; align-items: center; justify-content: center;
gap: 4px; border: 1.5px solid var(--n-border-md); border-radius: var(--n-radius);
padding: 16px 8px; cursor: pointer; text-align: center; background: var(--n-cream);
transition: border-color .15s, background .15s;
}
.tc-prio-label:hover { border-color: var(--n-amber-lt); background: var(--n-amber-dim); }
.tc-prio-input:checked + .tc-prio-label { border-color: var(--n-amber); background: var(--n-amber-dim); }
.tc-prio-input[value=\"1\"]:checked + .tc-prio-label { border-color: #c0392b; background: rgba(192,57,43,.07); }
.tc-prio-input[value=\"2\"]:checked + .tc-prio-label { border-color: var(--n-amber-lt); background: var(--n-amber-dim); }
.tc-prio-icon { font-size: 1.4rem; }
.tc-prio-name { font-size: .8rem; font-weight: 700; color: var(--n-dark); }
.tc-prio-desc { font-size: .7rem; color: var(--n-muted-2); }
/* ── Source toggle ─────────────────────────────────────────────────────────── */
.tc-source-toggle {
display: flex; border: 1.5px solid var(--n-border-md);
border-radius: var(--n-radius-sm); overflow: hidden;
}
.tc-source-toggle input { display: none; }
.tc-source-toggle label {
flex: 1; text-align: center; padding: 9px 8px;
font-size: .82rem; font-weight: 600; cursor: pointer;
color: var(--n-muted); background: var(--n-cream); transition: all .15s;
border-right: 1.5px solid var(--n-border-md);
}
.tc-source-toggle label:last-of-type { border-right: none; }
.tc-source-toggle input:checked + label { background: var(--n-dark); color: #fff; }
/* ── Advanced section (collapsible) ───────────────────────────────────────── */
.tc-adv-toggle {
font-size: .78rem; font-weight: 700; color: var(--n-muted);
cursor: pointer; display: flex; align-items: center; gap: 5px;
font-family: monospace; text-transform: uppercase; letter-spacing: .08em;
}
.tc-adv-toggle:hover { color: var(--n-amber); }
.tc-adv-badge {
background: rgba(111,66,193,.09); color: #6f42c1;
font-size: .65rem; font-weight: 700; padding: 2px 8px;
border-radius: 100px; font-family: monospace; letter-spacing: .06em;
}
.tc-adv-body { display: none; margin-top: 16px; }
.tc-adv-body.open { display: block; }
.tc-mono { font-family: monospace !important; font-size: .83rem !important; }
/* ── Action bar ────────────────────────────────────────────────────────────── */
.tc-action-bar {
display: flex; align-items: center; gap: 12px;
padding-top: 8px;
}
.tc-btn-submit {
display: inline-flex; align-items: center; gap: 8px;
padding: 12px 28px; background: var(--n-dark); color: #fff;
border: none; border-radius: var(--n-radius-sm);
font-family: var(--n-font); font-size: .92rem; font-weight: 700;
cursor: pointer; transition: background .18s, transform .15s; text-decoration: none;
}
.tc-btn-submit:hover { background: var(--n-amber); color: #fff; transform: translateY(-1px); }
.tc-btn-cancel {
display: inline-flex; align-items: center; gap: 6px;
padding: 12px 20px; background: transparent; color: var(--n-muted);
border: 1.5px solid var(--n-border-md); border-radius: var(--n-radius-sm);
font-family: var(--n-font); font-size: .9rem; font-weight: 600;
cursor: pointer; text-decoration: none; transition: all .18s;
}
.tc-btn-cancel:hover { border-color: var(--n-dark); color: var(--n-dark); }
</style>
<div class=\"hb-admin-layout\">
<div class=\"tc-page\">
<div class=\"tc-wrap\">
";
// line 167
yield " <div class=\"tc-breadcrumb\">
<a href=\"";
// line 168
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ticket_list");
yield "\"><i class=\"fa fa-ticket-alt fa-xs\"></i> Tickets</a>
<span class=\"sep\">/</span>
<span class=\"current\">New Ticket</span>
</div>
<h1 class=\"tc-page-title\">Create New Ticket</h1>
<p class=\"tc-page-sub\">Fields marked <span class=\"required-star\">*</span> are required.</p>
<form method=\"POST\"
action=\"";
// line 177
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ticket_create_submit");
yield "\"
enctype=\"multipart/form-data\"
id=\"createTicketForm\">
<div class=\"row g-4\">
";
// line 184
yield " <div class=\"col-lg-8\">
";
// line 187
yield " <div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-info-circle\"></i>Ticket Details</span>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Title <span class=\"required-star\">*</span></label>
<input type=\"text\" name=\"title\" class=\"tc-input\"
placeholder=\"Brief summary of the issue…\"
value=\"";
// line 196
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "title", [], "any", true, true, false, 196) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "title", [], "any", false, false, false, 196)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "title", [], "any", false, false, false, 196), "html", null, true)) : (yield ""));
yield "\"
maxlength=\"255\" required>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Description <span class=\"required-star\">*</span></label>
<textarea name=\"description\" class=\"tc-textarea\" rows=\"6\"
id=\"descriptionField\"
placeholder=\"Describe the issue in detail…\"
maxlength=\"5000\"
required>";
// line 206
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "description", [], "any", true, true, false, 206) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "description", [], "any", false, false, false, 206)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "description", [], "any", false, false, false, 206), "html", null, true)) : (yield ""));
yield "</textarea>
<div class=\"tc-char-count\" id=\"charCount\">0 / 5000</div>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Internal Note</label>
<textarea name=\"note\" class=\"tc-textarea\" rows=\"3\"
placeholder=\"Internal notes (not visible to the reporter)…\">";
// line 213
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "note", [], "any", true, true, false, 213) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "note", [], "any", false, false, false, 213)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "note", [], "any", false, false, false, 213), "html", null, true)) : (yield ""));
yield "</textarea>
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Attachments</label>
<input type=\"file\" name=\"attachments[]\" class=\"tc-input\"
multiple accept=\".jpg,.jpeg,.png,.pdf,.txt,.log,.zip\">
<div class=\"tc-hint\">JPG, PNG, PDF, TXT, LOG, ZIP — max 10 MB per file</div>
</div>
</div>
";
// line 225
yield " <div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-sliders-h\"></i>Classification</span>
</div>
<div class=\"mb-4\">
<label class=\"tc-label\">Ticket Type</label>
<select name=\"ticketType\" class=\"tc-select\">
<option value=\"\">— Select type —</option>
<option value=\"1\" ";
// line 234
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 234, $this->source); })()), "ticketType", [], "any", false, false, false, 234), 1))) ? ("selected") : (""));
yield ">Service Ticket</option>
<option value=\"2\" ";
// line 235
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 235, $this->source); })()), "ticketType", [], "any", false, false, false, 235), 2))) ? ("selected") : (""));
yield ">To-Do</option>
<option value=\"3\" ";
// line 236
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 236, $this->source); })()), "ticketType", [], "any", false, false, false, 236), 3))) ? ("selected") : (""));
yield ">To-Do Reply</option>
<option value=\"4\" ";
// line 237
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 237, $this->source); })()), "ticketType", [], "any", false, false, false, 237), 4))) ? ("selected") : (""));
yield ">Query</option>
<option value=\"5\" ";
// line 238
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 238, $this->source); })()), "ticketType", [], "any", false, false, false, 238), 5))) ? ("selected") : (""));
yield ">Development</option>
<option value=\"6\" ";
// line 239
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 239, $this->source); })()), "ticketType", [], "any", false, false, false, 239), 6))) ? ("selected") : (""));
yield ">Supplier</option>
<option value=\"7\" ";
// line 240
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 240, $this->source); })()), "ticketType", [], "any", false, false, false, 240), 7))) ? ("selected") : (""));
yield ">Client</option>
</select>
</div>
<div class=\"mb-4\">
<label class=\"tc-label\">Priority <span class=\"required-star\">*</span></label>
<div class=\"tc-priority-grid\">
<div>
<input type=\"radio\" name=\"priority\" value=\"1\" id=\"prio1\" class=\"tc-prio-input\"
";
// line 249
yield (((0 === CoreExtension::compare((((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", true, true, false, 249) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", false, false, false, 249)))) ? (CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", false, false, false, 249)) : (3)), 1))) ? ("checked") : (""));
yield ">
<label for=\"prio1\" class=\"tc-prio-label\">
<span class=\"tc-prio-icon\">🔴</span>
<span class=\"tc-prio-name\">Emergency</span>
<span class=\"tc-prio-desc\">Needs immediate action</span>
</label>
</div>
<div>
<input type=\"radio\" name=\"priority\" value=\"2\" id=\"prio2\" class=\"tc-prio-input\"
";
// line 258
yield (((0 === CoreExtension::compare((((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", true, true, false, 258) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", false, false, false, 258)))) ? (CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", false, false, false, 258)) : (3)), 2))) ? ("checked") : (""));
yield ">
<label for=\"prio2\" class=\"tc-prio-label\">
<span class=\"tc-prio-icon\">🟡</span>
<span class=\"tc-prio-name\">Important</span>
<span class=\"tc-prio-desc\">Should be addressed soon</span>
</label>
</div>
<div>
<input type=\"radio\" name=\"priority\" value=\"3\" id=\"prio3\" class=\"tc-prio-input\"
";
// line 267
yield (((0 === CoreExtension::compare((((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", true, true, false, 267) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", false, false, false, 267)))) ? (CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "priority", [], "any", false, false, false, 267)) : (3)), 3))) ? ("checked") : (""));
yield ">
<label for=\"prio3\" class=\"tc-prio-label\">
<span class=\"tc-prio-icon\">🟢</span>
<span class=\"tc-prio-name\">Normal</span>
<span class=\"tc-prio-desc\">Routine issue</span>
</label>
</div>
</div>
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Source</label>
<div class=\"tc-source-toggle\">
<input type=\"radio\" name=\"source\" value=\"1\" id=\"src1\"
";
// line 281
yield (((0 === CoreExtension::compare((((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", true, true, false, 281) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", false, false, false, 281)))) ? (CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", false, false, false, 281)) : (1)), 1))) ? ("checked") : (""));
yield ">
<label for=\"src1\"><i class=\"fa fa-user fa-xs\"></i> Manual</label>
<input type=\"radio\" name=\"source\" value=\"2\" id=\"src2\"
";
// line 285
yield (((0 === CoreExtension::compare((((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", true, true, false, 285) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", false, false, false, 285)))) ? (CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", false, false, false, 285)) : (1)), 2))) ? ("checked") : (""));
yield ">
<label for=\"src2\"><i class=\"fa fa-robot fa-xs\"></i> System</label>
<input type=\"radio\" name=\"source\" value=\"3\" id=\"src3\"
";
// line 289
yield (((0 === CoreExtension::compare((((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", true, true, false, 289) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", false, false, false, 289)))) ? (CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "source", [], "any", false, false, false, 289)) : (1)), 3))) ? ("checked") : (""));
yield ">
<label for=\"src3\"><i class=\"fa fa-code fa-xs\"></i> API</label>
</div>
</div>
</div>
";
// line 296
yield " <div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-fingerprint\"></i>System Tracking</span>
<div style=\"display:flex;align-items:center;gap:10px;\">
<span class=\"tc-adv-badge\">Advanced</span>
<span class=\"tc-adv-toggle\" onclick=\"toggleSystemFields(this)\" id=\"sysToggleBtn\">
<i class=\"fa fa-chevron-down fa-xs\"></i> Expand
</span>
</div>
</div>
<div class=\"tc-adv-body\" id=\"systemFieldsBlock\">
<div class=\"mb-3\">
<label class=\"tc-label\">Problem Hash</label>
<input type=\"text\" name=\"problemHash\" class=\"tc-input tc-mono\"
placeholder=\"SHA256 — leave blank to auto-compute\"
value=\"";
// line 311
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "problemHash", [], "any", true, true, false, 311) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "problemHash", [], "any", false, false, false, 311)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "problemHash", [], "any", false, false, false, 311), "html", null, true)) : (yield ""));
yield "\">
<div class=\"tc-hint\">SHA256 of (errorCode + fileLocation + exceptionClass + appId). Do not include timestamps or user IDs.</div>
</div>
<div class=\"row g-3 mb-3\">
<div class=\"col-md-6\">
<label class=\"tc-label\">Error Code</label>
<input type=\"text\" name=\"errorCode\" class=\"tc-input\"
placeholder=\"e.g. 500, DB_CONN_FAIL\"
value=\"";
// line 319
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "errorCode", [], "any", true, true, false, 319) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "errorCode", [], "any", false, false, false, 319)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "errorCode", [], "any", false, false, false, 319), "html", null, true)) : (yield ""));
yield "\">
</div>
<div class=\"col-md-6\">
<label class=\"tc-label\">Server Identifier</label>
<input type=\"text\" name=\"serverIdentifier\" class=\"tc-input\"
placeholder=\"e.g. app-server-01\"
value=\"";
// line 325
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "serverIdentifier", [], "any", true, true, false, 325) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "serverIdentifier", [], "any", false, false, false, 325)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "serverIdentifier", [], "any", false, false, false, 325), "html", null, true)) : (yield ""));
yield "\">
</div>
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Payload JSON</label>
<textarea name=\"lastPayloadJson\" class=\"tc-textarea tc-mono\" rows=\"5\"
placeholder='{\"exception\":\"RuntimeException\",\"file\":\"src/...\",\"line\":42,...}'>";
// line 331
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "lastPayloadJson", [], "any", true, true, false, 331) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "lastPayloadJson", [], "any", false, false, false, 331)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "lastPayloadJson", [], "any", false, false, false, 331), "html", null, true)) : (yield ""));
yield "</textarea>
</div>
</div>
</div>
</div>
";
// line 339
yield " <div class=\"col-lg-4\">
";
// line 342
yield " <div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-user-check\"></i>Assignment</span>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Assign To (User ID)</label>
<input type=\"number\" name=\"assignedToUserId\" class=\"tc-input\"
placeholder=\"User ID…\"
value=\"";
// line 350
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "assignedToUserId", [], "any", true, true, false, 350) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "assignedToUserId", [], "any", false, false, false, 350)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "assignedToUserId", [], "any", false, false, false, 350), "html", null, true)) : (yield ""));
yield "\">
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Deadline</label>
<input type=\"date\" name=\"deadlineDate\" class=\"tc-input\"
value=\"";
// line 355
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "deadlineDate", [], "any", true, true, false, 355) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "deadlineDate", [], "any", false, false, false, 355)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "deadlineDate", [], "any", false, false, false, 355), "html", null, true)) : (yield ""));
yield "\">
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Tagged User IDs</label>
<input type=\"text\" name=\"taggedUserIds\" class=\"tc-input\"
placeholder=\"Comma-separated, e.g. 12, 45, 78\"
value=\"";
// line 361
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "taggedUserIds", [], "any", true, true, false, 361) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "taggedUserIds", [], "any", false, false, false, 361)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "taggedUserIds", [], "any", false, false, false, 361), "html", null, true)) : (yield ""));
yield "\">
</div>
</div>
";
// line 366
yield " <div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-address-card\"></i>Reporter Contact</span>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Name</label>
<input type=\"text\" name=\"name\" class=\"tc-input\"
placeholder=\"Reporter's name…\"
value=\"";
// line 374
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "name", [], "any", true, true, false, 374) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "name", [], "any", false, false, false, 374)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "name", [], "any", false, false, false, 374), "html", null, true)) : (yield ""));
yield "\">
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Email</label>
<input type=\"email\" name=\"email\" class=\"tc-input\"
placeholder=\"reporter@example.com\"
value=\"";
// line 380
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "email", [], "any", true, true, false, 380) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "email", [], "any", false, false, false, 380)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "email", [], "any", false, false, false, 380), "html", null, true)) : (yield ""));
yield "\">
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Phone</label>
<input type=\"text\" name=\"phone\" class=\"tc-input\"
placeholder=\"+49 …\"
value=\"";
// line 386
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "phone", [], "any", true, true, false, 386) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "phone", [], "any", false, false, false, 386)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "phone", [], "any", false, false, false, 386), "html", null, true)) : (yield ""));
yield "\">
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Preferred Contact</label>
<select name=\"preferredContactMethod\" class=\"tc-select\">
<option value=\"\">— No preference —</option>
<option value=\"1\" ";
// line 392
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 392, $this->source); })()), "preferredContactMethod", [], "any", false, false, false, 392), 1))) ? ("selected") : (""));
yield ">Email</option>
<option value=\"2\" ";
// line 393
yield (((0 === CoreExtension::compare(CoreExtension::getAttribute($this->env, $this->source, (isset($context["formData"]) || array_key_exists("formData", $context) ? $context["formData"] : (function () { throw new RuntimeError('Variable "formData" does not exist.', 393, $this->source); })()), "preferredContactMethod", [], "any", false, false, false, 393), 2))) ? ("selected") : (""));
yield ">Phone</option>
</select>
</div>
</div>
";
// line 399
yield " <div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-sitemap\"></i>Context</span>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Company ID</label>
<input type=\"number\" name=\"companyId\" class=\"tc-input\"
value=\"";
// line 406
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "companyId", [], "any", true, true, false, 406) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "companyId", [], "any", false, false, false, 406)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "companyId", [], "any", false, false, false, 406), "html", null, true)) : (yield ""));
yield "\">
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">App ID</label>
<input type=\"number\" name=\"appId\" class=\"tc-input\"
value=\"";
// line 411
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "appId", [], "any", true, true, false, 411) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "appId", [], "any", false, false, false, 411)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "appId", [], "any", false, false, false, 411), "html", null, true)) : (yield ""));
yield "\">
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Branch ID</label>
<input type=\"number\" name=\"branchId\" class=\"tc-input\"
value=\"";
// line 416
(((CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "branchId", [], "any", true, true, false, 416) && !(null === CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "branchId", [], "any", false, false, false, 416)))) ? (yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["formData"] ?? null), "branchId", [], "any", false, false, false, 416), "html", null, true)) : (yield ""));
yield "\">
</div>
</div>
</div>
</div>
";
// line 424
yield " <div class=\"tc-action-bar\">
<button type=\"submit\" class=\"tc-btn-submit\">
<i class=\"fa fa-paper-plane\" style=\"font-size:.8rem\"></i> Create Ticket
</button>
<a href=\"";
// line 428
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ticket_list");
yield "\" class=\"tc-btn-cancel\">
Cancel
</a>
</div>
</form>
</div>
</div>
<script>
// Character counter
var descField = document.getElementById('descriptionField');
var charCount = document.getElementById('charCount');
if (descField) {
descField.addEventListener('input', function () {
charCount.textContent = this.value.length + ' / 5000';
});
}
// System fields toggle
function toggleSystemFields(el) {
var block = document.getElementById('systemFieldsBlock');
var isOpen = block.classList.contains('open');
if (isOpen) {
block.classList.remove('open');
el.innerHTML = '<i class=\"fa fa-chevron-down fa-xs\"></i> Expand';
} else {
block.classList.add('open');
el.innerHTML = '<i class=\"fa fa-chevron-up fa-xs\"></i> Collapse';
}
}
// Auto-expand if values are pre-filled
(function () {
var fields = ['[name=\"problemHash\"]', '[name=\"serverIdentifier\"]', '[name=\"lastPayloadJson\"]'];
for (var i = 0; i < fields.length; i++) {
var el = document.querySelector(fields[i]);
if (el && el.value.trim() !== '') {
var block = document.getElementById('systemFieldsBlock');
block.classList.add('open');
var btn = document.getElementById('sysToggleBtn');
if (btn) btn.innerHTML = '<i class=\"fa fa-chevron-up fa-xs\"></i> Collapse';
break;
}
}
})();
</script>
</div>";
// line 477
yield "
";
// line 478
yield from $this->loadTemplate("@Application/footer/central_footer.html.twig", "@CompanyGroup/pages/tickets/create_ticket.html.twig", 478)->unwrap()->yield($context);
$__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->leave($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof);
$__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->leave($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof);
return; yield '';
}
/**
* @codeCoverageIgnore
*/
public function getTemplateName()
{
return "@CompanyGroup/pages/tickets/create_ticket.html.twig";
}
/**
* @codeCoverageIgnore
*/
public function isTraitable()
{
return false;
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo()
{
return array ( 639 => 478, 636 => 477, 585 => 428, 579 => 424, 569 => 416, 561 => 411, 553 => 406, 544 => 399, 536 => 393, 532 => 392, 523 => 386, 514 => 380, 505 => 374, 495 => 366, 488 => 361, 479 => 355, 471 => 350, 461 => 342, 457 => 339, 447 => 331, 438 => 325, 429 => 319, 418 => 311, 401 => 296, 392 => 289, 385 => 285, 378 => 281, 361 => 267, 349 => 258, 337 => 249, 325 => 240, 321 => 239, 317 => 238, 313 => 237, 309 => 236, 305 => 235, 301 => 234, 290 => 225, 276 => 213, 266 => 206, 253 => 196, 242 => 187, 238 => 184, 229 => 177, 217 => 168, 214 => 167, 50 => 4, 48 => 3, 46 => 2, 44 => 1,);
}
public function getSourceContext()
{
return new Source("{% set page_title = 'New Ticket | HoneyBee' %}
{% include '@Application/inc/central_header.html.twig' %}
{% include '@CompanyGroup/pages/admin/_sidebar.html.twig' %}
<style>
/* ── Design tokens ─────────────────────────────────────────────────────────── */
:root {
--n-cream: #F7F5F0;
--n-cream-2: #F0EDE5;
--n-white: #FFFFFF;
--n-dark: #1A1D2E;
--n-dark-2: #252840;
--n-amber: #C07D2A;
--n-amber-lt: #D4954A;
--n-amber-dim: rgba(192,125,42,.10);
--n-sage: #3D6B52;
--n-sage-dim: rgba(61,107,82,.09);
--n-muted: #6B6E7F;
--n-muted-2: #9395A5;
--n-border: rgba(26,29,46,.07);
--n-border-md: rgba(26,29,46,.12);
--n-shadow-sm: 0 2px 12px rgba(26,29,46,.07);
--n-shadow-md: 0 8px 32px rgba(26,29,46,.09);
--n-radius: 12px;
--n-radius-sm: 8px;
--n-font: 'DM Sans', 'Poppins', system-ui, sans-serif;
}
*, *::before, *::after { box-sizing: border-box; }
body { background: var(--n-cream); font-family: var(--n-font); color: var(--n-dark); text-align: left; }
/* ── Layout ────────────────────────────────────────────────────────────────── */
.tc-wrap { max-width: 1100px; margin: 0 auto; padding: 0 28px; }
.tc-page { padding: 40px 0 80px; }
/* ── Breadcrumb ────────────────────────────────────────────────────────────── */
.tc-breadcrumb {
font-size: .8rem; color: var(--n-muted-2); margin-bottom: 20px;
display: flex; align-items: center; gap: 6px;
}
.tc-breadcrumb a { color: var(--n-muted); text-decoration: none; font-weight: 500; }
.tc-breadcrumb a:hover { color: var(--n-amber); }
.tc-breadcrumb .sep { color: var(--n-border-md); }
.tc-breadcrumb .current { color: var(--n-dark); font-weight: 600; }
/* ── Page header ───────────────────────────────────────────────────────────── */
.tc-page-title {
font-family: 'Montserrat', sans-serif; font-size: clamp(1.4rem,2.5vw,1.9rem);
font-weight: 800; color: var(--n-dark); letter-spacing: -.02em; margin: 0 0 5px;
}
.tc-page-sub { font-size: .88rem; color: var(--n-muted); margin: 0 0 28px; }
.required-star { color: #c0392b; }
/* ── Form card ─────────────────────────────────────────────────────────────── */
.tc-card {
background: var(--n-white); border: 1px solid var(--n-border-md);
border-radius: var(--n-radius); padding: 28px 28px 24px;
margin-bottom: 16px; box-shadow: var(--n-shadow-sm);
}
.tc-card-title {
font-family: monospace; font-size: .72rem; font-weight: 700;
letter-spacing: .1em; text-transform: uppercase; color: var(--n-amber);
margin-bottom: 20px; padding-bottom: 12px;
border-bottom: 1px solid var(--n-border); display: flex;
align-items: center; justify-content: space-between; gap: 8px;
}
.tc-card-title i { margin-right: 6px; }
/* ── Form elements ─────────────────────────────────────────────────────────── */
.tc-label {
display: block; font-size: .8rem; font-weight: 600;
color: var(--n-muted); margin-bottom: 5px;
}
.tc-input,
.tc-select,
.tc-textarea {
width: 100%; border-radius: var(--n-radius-sm);
border: 1.5px solid var(--n-border-md); background: var(--n-cream);
color: var(--n-dark); font-family: var(--n-font); font-size: .9rem;
padding: 9px 13px; transition: border-color .15s, box-shadow .15s;
appearance: none;
}
.tc-textarea { resize: vertical; min-height: 130px; }
.tc-input:focus, .tc-select:focus, .tc-textarea:focus {
outline: none; border-color: var(--n-amber);
box-shadow: 0 0 0 3px var(--n-amber-dim);
}
.tc-select { background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236B6E7F' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E\"); background-repeat: no-repeat; background-position: right 13px center; padding-right: 36px; }
.tc-char-count { font-size: .73rem; color: var(--n-muted-2); text-align: right; margin-top: 4px; font-family: monospace; }
.tc-hint { font-size: .75rem; color: var(--n-muted-2); margin-top: 4px; }
/* ── Priority grid ─────────────────────────────────────────────────────────── */
.tc-priority-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 10px; }
.tc-prio-input { display: none; }
.tc-prio-label {
display: flex; flex-direction: column; align-items: center; justify-content: center;
gap: 4px; border: 1.5px solid var(--n-border-md); border-radius: var(--n-radius);
padding: 16px 8px; cursor: pointer; text-align: center; background: var(--n-cream);
transition: border-color .15s, background .15s;
}
.tc-prio-label:hover { border-color: var(--n-amber-lt); background: var(--n-amber-dim); }
.tc-prio-input:checked + .tc-prio-label { border-color: var(--n-amber); background: var(--n-amber-dim); }
.tc-prio-input[value=\"1\"]:checked + .tc-prio-label { border-color: #c0392b; background: rgba(192,57,43,.07); }
.tc-prio-input[value=\"2\"]:checked + .tc-prio-label { border-color: var(--n-amber-lt); background: var(--n-amber-dim); }
.tc-prio-icon { font-size: 1.4rem; }
.tc-prio-name { font-size: .8rem; font-weight: 700; color: var(--n-dark); }
.tc-prio-desc { font-size: .7rem; color: var(--n-muted-2); }
/* ── Source toggle ─────────────────────────────────────────────────────────── */
.tc-source-toggle {
display: flex; border: 1.5px solid var(--n-border-md);
border-radius: var(--n-radius-sm); overflow: hidden;
}
.tc-source-toggle input { display: none; }
.tc-source-toggle label {
flex: 1; text-align: center; padding: 9px 8px;
font-size: .82rem; font-weight: 600; cursor: pointer;
color: var(--n-muted); background: var(--n-cream); transition: all .15s;
border-right: 1.5px solid var(--n-border-md);
}
.tc-source-toggle label:last-of-type { border-right: none; }
.tc-source-toggle input:checked + label { background: var(--n-dark); color: #fff; }
/* ── Advanced section (collapsible) ───────────────────────────────────────── */
.tc-adv-toggle {
font-size: .78rem; font-weight: 700; color: var(--n-muted);
cursor: pointer; display: flex; align-items: center; gap: 5px;
font-family: monospace; text-transform: uppercase; letter-spacing: .08em;
}
.tc-adv-toggle:hover { color: var(--n-amber); }
.tc-adv-badge {
background: rgba(111,66,193,.09); color: #6f42c1;
font-size: .65rem; font-weight: 700; padding: 2px 8px;
border-radius: 100px; font-family: monospace; letter-spacing: .06em;
}
.tc-adv-body { display: none; margin-top: 16px; }
.tc-adv-body.open { display: block; }
.tc-mono { font-family: monospace !important; font-size: .83rem !important; }
/* ── Action bar ────────────────────────────────────────────────────────────── */
.tc-action-bar {
display: flex; align-items: center; gap: 12px;
padding-top: 8px;
}
.tc-btn-submit {
display: inline-flex; align-items: center; gap: 8px;
padding: 12px 28px; background: var(--n-dark); color: #fff;
border: none; border-radius: var(--n-radius-sm);
font-family: var(--n-font); font-size: .92rem; font-weight: 700;
cursor: pointer; transition: background .18s, transform .15s; text-decoration: none;
}
.tc-btn-submit:hover { background: var(--n-amber); color: #fff; transform: translateY(-1px); }
.tc-btn-cancel {
display: inline-flex; align-items: center; gap: 6px;
padding: 12px 20px; background: transparent; color: var(--n-muted);
border: 1.5px solid var(--n-border-md); border-radius: var(--n-radius-sm);
font-family: var(--n-font); font-size: .9rem; font-weight: 600;
cursor: pointer; text-decoration: none; transition: all .18s;
}
.tc-btn-cancel:hover { border-color: var(--n-dark); color: var(--n-dark); }
</style>
<div class=\"hb-admin-layout\">
<div class=\"tc-page\">
<div class=\"tc-wrap\">
{# ── Breadcrumb ── #}
<div class=\"tc-breadcrumb\">
<a href=\"{{ path('ticket_list') }}\"><i class=\"fa fa-ticket-alt fa-xs\"></i> Tickets</a>
<span class=\"sep\">/</span>
<span class=\"current\">New Ticket</span>
</div>
<h1 class=\"tc-page-title\">Create New Ticket</h1>
<p class=\"tc-page-sub\">Fields marked <span class=\"required-star\">*</span> are required.</p>
<form method=\"POST\"
action=\"{{ path('ticket_create_submit') }}\"
enctype=\"multipart/form-data\"
id=\"createTicketForm\">
<div class=\"row g-4\">
{# ── LEFT column ── #}
<div class=\"col-lg-8\">
{# Core details #}
<div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-info-circle\"></i>Ticket Details</span>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Title <span class=\"required-star\">*</span></label>
<input type=\"text\" name=\"title\" class=\"tc-input\"
placeholder=\"Brief summary of the issue…\"
value=\"{{ formData.title ?? '' }}\"
maxlength=\"255\" required>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Description <span class=\"required-star\">*</span></label>
<textarea name=\"description\" class=\"tc-textarea\" rows=\"6\"
id=\"descriptionField\"
placeholder=\"Describe the issue in detail…\"
maxlength=\"5000\"
required>{{ formData.description ?? '' }}</textarea>
<div class=\"tc-char-count\" id=\"charCount\">0 / 5000</div>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Internal Note</label>
<textarea name=\"note\" class=\"tc-textarea\" rows=\"3\"
placeholder=\"Internal notes (not visible to the reporter)…\">{{ formData.note ?? '' }}</textarea>
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Attachments</label>
<input type=\"file\" name=\"attachments[]\" class=\"tc-input\"
multiple accept=\".jpg,.jpeg,.png,.pdf,.txt,.log,.zip\">
<div class=\"tc-hint\">JPG, PNG, PDF, TXT, LOG, ZIP — max 10 MB per file</div>
</div>
</div>
{# Classification #}
<div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-sliders-h\"></i>Classification</span>
</div>
<div class=\"mb-4\">
<label class=\"tc-label\">Ticket Type</label>
<select name=\"ticketType\" class=\"tc-select\">
<option value=\"\">— Select type —</option>
<option value=\"1\" {{ formData.ticketType == 1 ? 'selected' }}>Service Ticket</option>
<option value=\"2\" {{ formData.ticketType == 2 ? 'selected' }}>To-Do</option>
<option value=\"3\" {{ formData.ticketType == 3 ? 'selected' }}>To-Do Reply</option>
<option value=\"4\" {{ formData.ticketType == 4 ? 'selected' }}>Query</option>
<option value=\"5\" {{ formData.ticketType == 5 ? 'selected' }}>Development</option>
<option value=\"6\" {{ formData.ticketType == 6 ? 'selected' }}>Supplier</option>
<option value=\"7\" {{ formData.ticketType == 7 ? 'selected' }}>Client</option>
</select>
</div>
<div class=\"mb-4\">
<label class=\"tc-label\">Priority <span class=\"required-star\">*</span></label>
<div class=\"tc-priority-grid\">
<div>
<input type=\"radio\" name=\"priority\" value=\"1\" id=\"prio1\" class=\"tc-prio-input\"
{{ (formData.priority ?? 3) == 1 ? 'checked' }}>
<label for=\"prio1\" class=\"tc-prio-label\">
<span class=\"tc-prio-icon\">🔴</span>
<span class=\"tc-prio-name\">Emergency</span>
<span class=\"tc-prio-desc\">Needs immediate action</span>
</label>
</div>
<div>
<input type=\"radio\" name=\"priority\" value=\"2\" id=\"prio2\" class=\"tc-prio-input\"
{{ (formData.priority ?? 3) == 2 ? 'checked' }}>
<label for=\"prio2\" class=\"tc-prio-label\">
<span class=\"tc-prio-icon\">🟡</span>
<span class=\"tc-prio-name\">Important</span>
<span class=\"tc-prio-desc\">Should be addressed soon</span>
</label>
</div>
<div>
<input type=\"radio\" name=\"priority\" value=\"3\" id=\"prio3\" class=\"tc-prio-input\"
{{ (formData.priority ?? 3) == 3 ? 'checked' }}>
<label for=\"prio3\" class=\"tc-prio-label\">
<span class=\"tc-prio-icon\">🟢</span>
<span class=\"tc-prio-name\">Normal</span>
<span class=\"tc-prio-desc\">Routine issue</span>
</label>
</div>
</div>
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Source</label>
<div class=\"tc-source-toggle\">
<input type=\"radio\" name=\"source\" value=\"1\" id=\"src1\"
{{ (formData.source ?? 1) == 1 ? 'checked' }}>
<label for=\"src1\"><i class=\"fa fa-user fa-xs\"></i> Manual</label>
<input type=\"radio\" name=\"source\" value=\"2\" id=\"src2\"
{{ (formData.source ?? 1) == 2 ? 'checked' }}>
<label for=\"src2\"><i class=\"fa fa-robot fa-xs\"></i> System</label>
<input type=\"radio\" name=\"source\" value=\"3\" id=\"src3\"
{{ (formData.source ?? 1) == 3 ? 'checked' }}>
<label for=\"src3\"><i class=\"fa fa-code fa-xs\"></i> API</label>
</div>
</div>
</div>
{# System Tracking — collapsible #}
<div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-fingerprint\"></i>System Tracking</span>
<div style=\"display:flex;align-items:center;gap:10px;\">
<span class=\"tc-adv-badge\">Advanced</span>
<span class=\"tc-adv-toggle\" onclick=\"toggleSystemFields(this)\" id=\"sysToggleBtn\">
<i class=\"fa fa-chevron-down fa-xs\"></i> Expand
</span>
</div>
</div>
<div class=\"tc-adv-body\" id=\"systemFieldsBlock\">
<div class=\"mb-3\">
<label class=\"tc-label\">Problem Hash</label>
<input type=\"text\" name=\"problemHash\" class=\"tc-input tc-mono\"
placeholder=\"SHA256 — leave blank to auto-compute\"
value=\"{{ formData.problemHash ?? '' }}\">
<div class=\"tc-hint\">SHA256 of (errorCode + fileLocation + exceptionClass + appId). Do not include timestamps or user IDs.</div>
</div>
<div class=\"row g-3 mb-3\">
<div class=\"col-md-6\">
<label class=\"tc-label\">Error Code</label>
<input type=\"text\" name=\"errorCode\" class=\"tc-input\"
placeholder=\"e.g. 500, DB_CONN_FAIL\"
value=\"{{ formData.errorCode ?? '' }}\">
</div>
<div class=\"col-md-6\">
<label class=\"tc-label\">Server Identifier</label>
<input type=\"text\" name=\"serverIdentifier\" class=\"tc-input\"
placeholder=\"e.g. app-server-01\"
value=\"{{ formData.serverIdentifier ?? '' }}\">
</div>
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Payload JSON</label>
<textarea name=\"lastPayloadJson\" class=\"tc-textarea tc-mono\" rows=\"5\"
placeholder='{\"exception\":\"RuntimeException\",\"file\":\"src/...\",\"line\":42,...}'>{{ formData.lastPayloadJson ?? '' }}</textarea>
</div>
</div>
</div>
</div>
{# ── RIGHT column ── #}
<div class=\"col-lg-4\">
{# Assignment #}
<div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-user-check\"></i>Assignment</span>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Assign To (User ID)</label>
<input type=\"number\" name=\"assignedToUserId\" class=\"tc-input\"
placeholder=\"User ID…\"
value=\"{{ formData.assignedToUserId ?? '' }}\">
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Deadline</label>
<input type=\"date\" name=\"deadlineDate\" class=\"tc-input\"
value=\"{{ formData.deadlineDate ?? '' }}\">
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Tagged User IDs</label>
<input type=\"text\" name=\"taggedUserIds\" class=\"tc-input\"
placeholder=\"Comma-separated, e.g. 12, 45, 78\"
value=\"{{ formData.taggedUserIds ?? '' }}\">
</div>
</div>
{# Reporter contact #}
<div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-address-card\"></i>Reporter Contact</span>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Name</label>
<input type=\"text\" name=\"name\" class=\"tc-input\"
placeholder=\"Reporter's name…\"
value=\"{{ formData.name ?? '' }}\">
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Email</label>
<input type=\"email\" name=\"email\" class=\"tc-input\"
placeholder=\"reporter@example.com\"
value=\"{{ formData.email ?? '' }}\">
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Phone</label>
<input type=\"text\" name=\"phone\" class=\"tc-input\"
placeholder=\"+49 …\"
value=\"{{ formData.phone ?? '' }}\">
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Preferred Contact</label>
<select name=\"preferredContactMethod\" class=\"tc-select\">
<option value=\"\">— No preference —</option>
<option value=\"1\" {{ formData.preferredContactMethod == 1 ? 'selected' }}>Email</option>
<option value=\"2\" {{ formData.preferredContactMethod == 2 ? 'selected' }}>Phone</option>
</select>
</div>
</div>
{# Context #}
<div class=\"tc-card\">
<div class=\"tc-card-title\">
<span><i class=\"fa fa-sitemap\"></i>Context</span>
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">Company ID</label>
<input type=\"number\" name=\"companyId\" class=\"tc-input\"
value=\"{{ formData.companyId ?? '' }}\">
</div>
<div class=\"mb-3\">
<label class=\"tc-label\">App ID</label>
<input type=\"number\" name=\"appId\" class=\"tc-input\"
value=\"{{ formData.appId ?? '' }}\">
</div>
<div class=\"mb-0\">
<label class=\"tc-label\">Branch ID</label>
<input type=\"number\" name=\"branchId\" class=\"tc-input\"
value=\"{{ formData.branchId ?? '' }}\">
</div>
</div>
</div>
</div>
{# ── Submit bar ── #}
<div class=\"tc-action-bar\">
<button type=\"submit\" class=\"tc-btn-submit\">
<i class=\"fa fa-paper-plane\" style=\"font-size:.8rem\"></i> Create Ticket
</button>
<a href=\"{{ path('ticket_list') }}\" class=\"tc-btn-cancel\">
Cancel
</a>
</div>
</form>
</div>
</div>
<script>
// Character counter
var descField = document.getElementById('descriptionField');
var charCount = document.getElementById('charCount');
if (descField) {
descField.addEventListener('input', function () {
charCount.textContent = this.value.length + ' / 5000';
});
}
// System fields toggle
function toggleSystemFields(el) {
var block = document.getElementById('systemFieldsBlock');
var isOpen = block.classList.contains('open');
if (isOpen) {
block.classList.remove('open');
el.innerHTML = '<i class=\"fa fa-chevron-down fa-xs\"></i> Expand';
} else {
block.classList.add('open');
el.innerHTML = '<i class=\"fa fa-chevron-up fa-xs\"></i> Collapse';
}
}
// Auto-expand if values are pre-filled
(function () {
var fields = ['[name=\"problemHash\"]', '[name=\"serverIdentifier\"]', '[name=\"lastPayloadJson\"]'];
for (var i = 0; i < fields.length; i++) {
var el = document.querySelector(fields[i]);
if (el && el.value.trim() !== '') {
var block = document.getElementById('systemFieldsBlock');
block.classList.add('open');
var btn = document.getElementById('sysToggleBtn');
if (btn) btn.innerHTML = '<i class=\"fa fa-chevron-up fa-xs\"></i> Collapse';
break;
}
}
})();
</script>
</div>{# /hb-admin-layout #}
{% include '@Application/footer/central_footer.html.twig' %}
", "@CompanyGroup/pages/tickets/create_ticket.html.twig", "/home/u405565514/domains/ourhoneybee.eu/public_html/honeybee_main/src/CompanyGroupBundle/Resources/views/pages/tickets/create_ticket.html.twig");
}
}