From 26e428cd5f40f786d84188c7f4601c4b7e577b55 Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Wed, 17 Jun 2026 10:29:02 +0100 Subject: [PATCH] workign comments strucuture --- .../TicketCommentStoreController.php | 4 +-- .../views/partials/comment-thread.blade.php | 26 ++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Modules/Helpdesk/Http/Controllers/TicketCommentStoreController.php b/Modules/Helpdesk/Http/Controllers/TicketCommentStoreController.php index 18a15f8e..9f4b4102 100644 --- a/Modules/Helpdesk/Http/Controllers/TicketCommentStoreController.php +++ b/Modules/Helpdesk/Http/Controllers/TicketCommentStoreController.php @@ -54,10 +54,10 @@ final class TicketCommentStoreController extends Controller ->where('is_active', true) ->findOrFail((int) $validated['canned_response_id']); - $body = trim($renderer->render($response->body, $ticket, $user)); + $body = trim($response->body); } - $body = $this->normaliseHtmlBody($body); + $body = $this->normaliseHtmlBody($renderer->render($body, $ticket, $user)); validator(['commentBody' => $body], [ 'commentBody' => ['required', 'string', 'min:2'], diff --git a/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php b/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php index 2a7697ed..094e6237 100644 --- a/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php +++ b/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php @@ -12,6 +12,30 @@ $isInternal = (bool) $comment->is_internal; $borderClass = $isInternal ? 'border-amber-300 dark:border-amber-700' : 'border-red-200 dark:border-red-900/70'; $railClass = $isInternal ? 'bg-amber-500' : 'bg-red-500'; + $renderedBody = (string) $comment->body; + + if ($currentTicket !== null) { + $renderedBody = strtr($renderedBody, [ + '{{ ticket.reference }}' => e((string) ($currentTicket->reference ?? '')), + '{{ ticket.subject }}' => e((string) ($currentTicket->subject ?? '')), + '{{ ticket.status }}' => e((string) ($currentTicket->status?->name ?? '')), + '{{ ticket.priority }}' => e((string) ($currentTicket->priority?->name ?? '')), + '{{ ticket.category }}' => e((string) ($currentTicket->category?->name ?? '')), + '{{ ticket.project }}' => e((string) ($currentTicket->project?->title ?? '')), + '{{ ticket.team }}' => e((string) ($currentTicket->team?->name ?? '')), + '{{ requester.name }}' => e((string) ($currentTicket->owner?->name ?? $currentTicket->user?->name ?? '')), + '{{ agent.name }}' => e((string) ($currentTicket->agent?->name ?? '')), + '{{ actor.name }}' => e((string) ($commentUser?->name ?? '')), + '{{ ticket.url }}' => e(route('helpdesk.tickets.show', ['ticket' => $currentTicket->getKey()])), + ]); + } + + $containsHtml = $renderedBody !== strip_tags($renderedBody); + $renderedBody = preg_replace('/<\s*(script|style)[^>]*>.*?<\s*\/\s*\1\s*>/is', '', $renderedBody) ?: ''; + $renderedBody = preg_replace('/\s+on[a-z]+\s*=\s*("[^"]*"|\'[^\']*\'|[^\s>]+)/i', '', $renderedBody) ?: ''; + $renderedBody = preg_replace('/javascript\s*:/i', '', $renderedBody) ?: ''; + $renderedBody = strip_tags($renderedBody, '