@props(['comments', 'level' => 0, 'ticket' => null, 'canSeeInternalNotes' => false])
@foreach ($comments as $comment)
@php
$commentUser = $comment->relationLoaded('user') ? $comment->getRelation('user') : null;
$commentAttachments = $comment->relationLoaded('attachments') ? $comment->getRelation('attachments') : collect();
$commentReplies = $comment->relationLoaded('replies') ? $comment->getRelation('replies') : collect();
$replyFormId = 'helpdesk-reply-form-'.$comment->id;
$currentTicket = $ticket ?? $comment->ticket ?? null;
$replyCount = $commentReplies->count();
$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 = html_entity_decode((string) $comment->body, ENT_QUOTES | ENT_HTML5, 'UTF-8');
while (str_contains($renderedBody, '<') || str_contains($renderedBody, '>') || str_contains($renderedBody, '<')) {
$decodedBody = html_entity_decode($renderedBody, ENT_QUOTES | ENT_HTML5, 'UTF-8');
if ($decodedBody === $renderedBody) {
break;
}
$renderedBody = $decodedBody;
}
if ($currentTicket !== null) {
$renderedBody = strtr($renderedBody, [
'{{ ticket.reference }}' => (string) e((string) ($currentTicket->reference ?? '')),
'{{ ticket.subject }}' => (string) e((string) ($currentTicket->subject ?? '')),
'{{ ticket.status }}' => (string) e((string) ($currentTicket->status?->name ?? '')),
'{{ ticket.priority }}' => (string) e((string) ($currentTicket->priority?->name ?? '')),
'{{ ticket.category }}' => (string) e((string) ($currentTicket->category?->name ?? '')),
'{{ ticket.project }}' => (string) e((string) ($currentTicket->project?->title ?? '')),
'{{ ticket.team }}' => (string) e((string) ($currentTicket->team?->name ?? '')),
'{{ requester.name }}' => (string) e((string) ($currentTicket->owner?->name ?? $currentTicket->user?->name ?? '')),
'{{ agent.name }}' => (string) e((string) ($currentTicket->agent?->name ?? '')),
'{{ actor.name }}' => (string) e((string) ($commentUser?->name ?? '')),
'{{ ticket.url }}' => (string) 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, '