'✨', 'update' => '📝', 'comment' => '💬', 'view' => '👁️', 'assign' => '👤', 'status_change' => '🔄' ]; return $icons[$actionType] ?? '•'; } function formatAction($event) { $actions = [ 'create' => 'created this ticket', 'update' => 'updated this ticket', 'comment' => 'added a comment', 'view' => 'viewed this ticket', 'assign' => 'assigned this ticket', 'status_change' => 'changed the status' ]; return $actions[$event['action_type']] ?? $event['action_type']; } function formatDetails($details, $actionType) { if ($actionType === 'update' && is_array($details)) { $changes = []; foreach ($details as $field => $value) { if ($field === 'old_value' || $field === 'new_value') continue; $changes[] = "" . htmlspecialchars($field) . ": " . htmlspecialchars($value); } return implode(', ', $changes); } return ''; } require_once __DIR__ . '/../middleware/SecurityHeadersMiddleware.php'; require_once __DIR__ . '/../middleware/CsrfMiddleware.php'; $nonce = SecurityHeadersMiddleware::getNonce(); ?> Ticket #<?php echo $ticket['ticket_id']; ?>
← Dashboard
👤 Admin
">
Ticket Information

Content Sections
Content Display
Description
Comments Section

Add Comment

Enable Markdown
Preview Markdown

Comment History

"; // Thread connector line for replies if ($parentId) { echo "
"; } echo "
"; echo "
"; echo "" . htmlspecialchars($displayName) . ""; $dateStr = date('M d, Y H:i', strtotime($comment['created_at'])); $editedIndicator = !empty($comment['updated_at']) ? ' (edited)' : ''; echo "{$dateStr}{$editedIndicator}"; // Action buttons echo "
"; // Reply button (max depth of 3) if ($threadDepth < 3) { echo ""; } // Edit/Delete buttons for owner or admin if ($canModify) { echo ""; echo ""; } echo "
"; echo "
"; // .comment-header echo "
"; if ($comment['markdown_enabled']) { echo htmlspecialchars($comment['comment_text']); } else { echo nl2br(htmlspecialchars($comment['comment_text'])); } echo "
"; // Hidden raw text for editing echo ""; echo "
"; // .comment-content // Render replies recursively if (!empty($comment['replies'])) { echo "
"; foreach ($comment['replies'] as $reply) { renderComment($reply, $currentUserId, $isAdmin, $threadDepth + 1); } echo "
"; } echo "
"; // .comment } // Render all comments foreach ($comments as $comment) { renderComment($comment, $currentUserId, $isAdmin); } ?>
File Attachments

Upload Files

📁

Drag and drop files here or click to browse

Max file size:

Attached Files

Loading attachments...

Ticket Dependencies

Add Dependency

Current Dependencies

Loading dependencies...

Tickets That Depend On This

Loading dependents...

Activity Timeline

No activity recorded yet.