Path : /home/vishqocm/pcib.in/student/
File Upload :
Current File : /home/vishqocm//pcib.in/student/view_ticket.php

<?php
$pageTitle = "View Support Ticket";
include_once('includes/header.php');

// Check if user is logged in
if (!isset($_SESSION['user_id']) || $_SESSION['role'] !== 'student') {
    header("Location: ../login.php");
    exit();
}

// Get student ID
$student_id = $_SESSION['user_id'];

// Get ticket ID
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    header("Location: support.php");
    exit();
}

$ticket_id = (int)$_GET['id'];

// Fetch ticket details
$query = "
    SELECT t.*, c.title as course_name 
    FROM support_tickets t
    LEFT JOIN courses c ON t.course_id = c.id
    WHERE t.id = ? AND t.student_id = ?
";
$stmt = $conn->prepare($query);
$stmt->bind_param("ii", $ticket_id, $student_id);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows === 0) {
    // Ticket not found or doesn't belong to this student
    header("Location: support.php");
    exit();
}

$ticket = $result->fetch_assoc();

// Handle new reply submission
$success_message = "";
$error_message = "";

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit_reply'])) {
    $reply_message = trim($_POST['reply_message'] ?? '');
    
    // Validation
    if (empty($reply_message)) {
        $error_message = "Please enter a message.";
    } else {
        // Insert the reply
        $stmt = $conn->prepare("
            INSERT INTO support_ticket_replies 
            (ticket_id, user_type, user_id, message) 
            VALUES (?, 'student', ?, ?)
        ");
        $stmt->bind_param("iis", $ticket_id, $student_id, $reply_message);
        
        if ($stmt->execute()) {
            // Update ticket status if it was closed or resolved
            if ($ticket['status'] === 'closed' || $ticket['status'] === 'resolved') {
                $stmt = $conn->prepare("UPDATE support_tickets SET status = 'open', updated_at = NOW() WHERE id = ?");
                $stmt->bind_param("i", $ticket_id);
                $stmt->execute();
                $ticket['status'] = 'open';
            } else {
                // Just update the updated_at timestamp
                $stmt = $conn->prepare("UPDATE support_tickets SET updated_at = NOW() WHERE id = ?");
                $stmt->bind_param("i", $ticket_id);
                $stmt->execute();
            }
            
            $success_message = "Your reply has been sent successfully.";
            $reply_message = "";
        } else {
            $error_message = "Failed to send your reply. Please try again.";
        }
    }
}

// Handle ticket actions
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['close_ticket']) && $ticket['status'] !== 'closed') {
        $stmt = $conn->prepare("UPDATE support_tickets SET status = 'closed', updated_at = NOW() WHERE id = ? AND student_id = ?");
        $stmt->bind_param("ii", $ticket_id, $student_id);
        if ($stmt->execute()) {
            $ticket['status'] = 'closed';
            $success_message = "Ticket has been closed successfully.";
        } else {
            $error_message = "Failed to close the ticket. Please try again.";
        }
    } elseif (isset($_POST['reopen_ticket']) && ($ticket['status'] === 'closed' || $ticket['status'] === 'resolved')) {
        $stmt = $conn->prepare("UPDATE support_tickets SET status = 'open', updated_at = NOW() WHERE id = ? AND student_id = ?");
        $stmt->bind_param("ii", $ticket_id, $student_id);
        if ($stmt->execute()) {
            $ticket['status'] = 'open';
            $success_message = "Ticket has been reopened successfully.";
        } else {
            $error_message = "Failed to reopen the ticket. Please try again.";
        }
    }
}

// Fetch all replies for this ticket
$query = "
    SELECT r.*, 
           CASE WHEN r.user_type = 'admin' THEN CONCAT(a.first_name, ' ', a.last_name) ELSE CONCAT(s.first_name, ' ', s.last_name) END as user_name,
           CASE WHEN r.user_type = 'admin' THEN a.email ELSE s.email END as user_email
    FROM support_ticket_replies r
    LEFT JOIN users s ON (r.user_id = s.id AND r.user_type = 'student')
    LEFT JOIN users a ON (r.user_id = a.id AND r.user_type = 'admin')
    WHERE r.ticket_id = ?
    ORDER BY r.created_at ASC
";

$stmt = $conn->prepare($query);
$stmt->bind_param("i", $ticket_id);
$stmt->execute();
$replies_result = $stmt->get_result();
$replies = [];

while ($row = $replies_result->fetch_assoc()) {
    $replies[] = $row;
}

// Define categories
$categories = [
    'account' => 'Account Access',
    'payment' => 'Payment Issues',
    'enrollment' => 'Course Enrollment',
    'certificate' => 'Certificate Issues',
    'exam' => 'Exam Related',
    'technical' => 'Technical Support',
    'general' => 'General Information',
    'other' => 'Other'
];

// Define priorities
$priorities = [
    'low' => 'Low',
    'medium' => 'Medium',
    'high' => 'High'
];

// Define status labels and colors
$status_labels = [
    'open' => ['label' => 'Open', 'class' => 'bg-danger'],
    'in_progress' => ['label' => 'In Progress', 'class' => 'bg-warning'],
    'resolved' => ['label' => 'Resolved', 'class' => 'bg-success'],
    'closed' => ['label' => 'Closed', 'class' => 'bg-secondary']
];
?>

<div class="container py-4">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <div>
            <a href="support.php" class="btn btn-sm btn-outline-secondary me-2">
                <i class="fas fa-arrow-left me-1"></i> Back to Tickets
            </a>
            <h2 class="h3 d-inline-block mb-0"><?php echo htmlspecialchars($ticket['subject']); ?></h2>
            <span class="badge <?php echo $status_labels[$ticket['status']]['class']; ?> ms-2">
                <?php echo $status_labels[$ticket['status']]['label']; ?>
            </span>
        </div>
        <div>
            <?php if ($ticket['status'] !== 'closed'): ?>
            <form method="post" action="" class="d-inline-block">
                <button type="submit" name="close_ticket" class="btn btn-outline-secondary" onclick="return confirm('Are you sure you want to close this ticket?')">
                    <i class="fas fa-times-circle me-1"></i> Close Ticket
                </button>
            </form>
            <?php elseif ($ticket['status'] === 'closed' || $ticket['status'] === 'resolved'): ?>
            <form method="post" action="" class="d-inline-block">
                <button type="submit" name="reopen_ticket" class="btn btn-outline-primary">
                    <i class="fas fa-sync me-1"></i> Reopen Ticket
                </button>
            </form>
            <?php endif; ?>
        </div>
    </div>
    
    <?php if (!empty($success_message)): ?>
    <div class="alert alert-success alert-dismissible fade show" role="alert">
        <?php echo $success_message; ?>
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
    </div>
    <?php endif; ?>
    
    <?php if (!empty($error_message)): ?>
    <div class="alert alert-danger alert-dismissible fade show" role="alert">
        <?php echo $error_message; ?>
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
    </div>
    <?php endif; ?>
    
    <div class="row">
        <!-- Ticket Details Column -->
        <div class="col-md-4">
            <!-- Ticket Information -->
            <div class="card mb-4">
                <div class="card-header bg-light">
                    <h5 class="mb-0">Ticket Information</h5>
                </div>
                <div class="card-body">
                    <div class="mb-3">
                        <h6 class="fw-bold">Ticket #</h6>
                        <p class="mb-0"><?php echo htmlspecialchars($ticket['ticket_id']); ?></p>
                    </div>
                    
                    <div class="mb-3">
                        <h6 class="fw-bold">Category</h6>
                        <p class="mb-0">
                            <?php echo isset($categories[$ticket['category']]) ? 
                                htmlspecialchars($categories[$ticket['category']]) : 
                                htmlspecialchars($ticket['category']); ?>
                        </p>
                    </div>
                    
                    <?php if (!empty($ticket['course_name'])): ?>
                    <div class="mb-3">
                        <h6 class="fw-bold">Related Course</h6>
                        <p class="mb-0"><?php echo htmlspecialchars($ticket['course_name']); ?></p>
                    </div>
                    <?php endif; ?>
                    
                    <div class="mb-3">
                        <h6 class="fw-bold">Priority</h6>
                        <p class="mb-0"><?php echo ucfirst(htmlspecialchars($ticket['priority'])); ?></p>
                    </div>
                    
                    <div class="mb-3">
                        <h6 class="fw-bold">Status</h6>
                        <p class="mb-0">
                            <span class="badge <?php echo $status_labels[$ticket['status']]['class']; ?>">
                                <?php echo $status_labels[$ticket['status']]['label']; ?>
                            </span>
                        </p>
                    </div>
                    
                    <div class="mb-3">
                        <h6 class="fw-bold">Created On</h6>
                        <p class="mb-0"><?php echo date('M d, Y h:i A', strtotime($ticket['created_at'])); ?></p>
                    </div>
                    
                    <?php if (!empty($ticket['updated_at']) && $ticket['updated_at'] != $ticket['created_at']): ?>
                    <div class="mb-0">
                        <h6 class="fw-bold">Last Updated</h6>
                        <p class="mb-0"><?php echo date('M d, Y h:i A', strtotime($ticket['updated_at'])); ?></p>
                    </div>
                    <?php endif; ?>
                </div>
            </div>
            
            <!-- Support Information -->
            <div class="card">
                <div class="card-header bg-light">
                    <h5 class="mb-0">Support Information</h5>
                </div>
                <div class="card-body">
                    <p><i class="fas fa-info-circle me-2 text-primary"></i> Our support team typically responds within 24 hours during business days.</p>
                    
                    <div class="d-flex align-items-center mb-3">
                        <i class="fas fa-phone me-3 text-primary"></i>
                        <div>
                            <strong>Support Hotline</strong><br>
                            <span>(123) 456-7890</span>
                        </div>
                    </div>
                    
                    <div class="d-flex align-items-center">
                        <i class="fas fa-clock me-3 text-primary"></i>
                        <div>
                            <strong>Business Hours</strong><br>
                            <span>Monday-Friday, 9:00 AM - 6:00 PM</span>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- Conversation Column -->
        <div class="col-md-8">
            <!-- Conversation Thread -->
            <div class="card mb-4">
                <div class="card-header bg-light">
                    <h5 class="mb-0">Conversation</h5>
                </div>
                <div class="card-body">
                    <?php foreach ($replies as $index => $reply): 
                        $is_admin = $reply['user_type'] === 'admin';
                        $name = $is_admin 
                            ? (!empty($reply['user_name']) ? $reply['user_name'] : 'Support Staff') 
                            : (!empty($reply['user_name']) ? $reply['user_name'] : 'You');
                    ?>
                    <div class="mb-4 <?php echo $index === 0 ? '' : 'mt-4 pt-4 border-top'; ?>">
                        <div class="d-flex justify-content-between align-items-center mb-2">
                            <div>
                                <span class="fw-bold"><?php echo htmlspecialchars($name); ?></span>
                                <?php if ($is_admin): ?>
                                <span class="badge bg-primary ms-2">Support Staff</span>
                                <?php endif; ?>
                            </div>
                            <small class="text-muted">
                                <?php echo date('M d, Y h:i A', strtotime($reply['created_at'])); ?>
                            </small>
                        </div>
                        <div class="message-content p-3 rounded <?php echo $is_admin ? 'bg-light' : 'bg-primary bg-opacity-10'; ?>">
                            <?php echo nl2br(htmlspecialchars($reply['message'])); ?>
                        </div>
                    </div>
                    <?php endforeach; ?>
                </div>
            </div>
            
            <!-- Reply Form -->
            <?php if ($ticket['status'] !== 'closed' && $ticket['status'] !== 'resolved'): ?>
            <div class="card">
                <div class="card-header bg-light">
                    <h5 class="mb-0">Add Reply</h5>
                </div>
                <div class="card-body">
                    <form method="post" action="">
                        <div class="mb-3">
                            <textarea class="form-control" id="reply_message" name="reply_message" rows="4" required><?php echo isset($reply_message) ? htmlspecialchars($reply_message) : ''; ?></textarea>
                        </div>
                        <div class="text-end">
                            <button type="submit" name="submit_reply" class="btn btn-primary">
                                <i class="fas fa-paper-plane me-2"></i> Send Reply
                            </button>
                        </div>
                    </form>
                </div>
            </div>
            <?php else: ?>
            <div class="alert alert-secondary">
                <div class="d-flex align-items-center">
                    <i class="fas fa-info-circle me-3 fs-4"></i>
                    <div>
                        <?php if ($ticket['status'] === 'closed'): ?>
                        <p class="mb-2">This ticket is closed. If you need further assistance, please reopen the ticket or create a new one.</p>
                        <?php else: ?>
                        <p class="mb-2">This ticket has been marked as resolved. If you're still experiencing issues, please reopen the ticket.</p>
                        <?php endif; ?>
                        <form method="post" action="">
                            <button type="submit" name="reopen_ticket" class="btn btn-sm btn-outline-primary">
                                <i class="fas fa-sync me-1"></i> Reopen Ticket
                            </button>
                        </form>
                    </div>
                </div>
            </div>
            <?php endif; ?>
        </div>
    </div>
</div>

<?php include_once('includes/footer.php'); ?>