logout(); } // Handle login form submission if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$auth->isLoggedIn()) { $username = isset($_POST['username']) ? sanitize($_POST['username']) : ''; $password = isset($_POST['password']) ? $_POST['password'] : ''; $rememberMe = isset($_POST['remember_me']); if ($auth->login($username, $password, $rememberMe)) { header('Location: support.php'); exit; } else { $loginError = 'Invalid username or password.'; } } // Handle AJAX requests for logged-in admins if ($auth->isLoggedIn() && $_SERVER['REQUEST_METHOD'] === 'POST') { $action = isset($_POST['action']) ? $_POST['action'] : ''; $admin = $auth->getCurrentAdmin(); switch ($action) { case 'update_status': $ticketId = isset($_POST['ticket_id']) ? intval($_POST['ticket_id']) : 0; $status = isset($_POST['status']) ? sanitize($_POST['status']) : ''; if ($ticketId && in_array($status, ['open', 'pending', 'resolved', 'closed'])) { $success = $auth->updateTicketStatus($ticketId, $status, $admin['id']); adminJsonResponse($success, $success ? 'Status updated successfully' : 'Failed to update status'); } else { adminJsonResponse(false, 'Invalid parameters'); } break; case 'assign_ticket': $ticketId = isset($_POST['ticket_id']) ? intval($_POST['ticket_id']) : 0; $assignToId = isset($_POST['assign_to']) ? intval($_POST['assign_to']) : null; if ($ticketId) { $success = $auth->assignTicket($ticketId, $assignToId, $admin['id']); adminJsonResponse($success, $success ? 'Ticket assigned successfully' : 'Failed to assign ticket'); } else { adminJsonResponse(false, 'Invalid ticket ID'); } break; case 'add_reply': $ticketId = isset($_POST['ticket_id']) ? intval($_POST['ticket_id']) : 0; $message = isset($_POST['message']) ? trim($_POST['message']) : ''; $isInternal = isset($_POST['is_internal']) ? true : false; if ($ticketId && $message) { $success = $auth->addReply($ticketId, $admin['id'], $message, $isInternal); adminJsonResponse($success, $success ? 'Reply added successfully' : 'Failed to add reply'); } else { adminJsonResponse(false, 'Message is required'); } break; case 'create_admin': if ($admin['role'] !== 'super_admin') { adminJsonResponse(false, 'Permission denied'); } $username = isset($_POST['new_username']) ? sanitize($_POST['new_username']) : ''; $email = isset($_POST['new_email']) ? sanitize($_POST['new_email']) : ''; $password = isset($_POST['new_password']) ? $_POST['new_password'] : ''; $fullName = isset($_POST['new_full_name']) ? sanitize($_POST['new_full_name']) : ''; $role = isset($_POST['new_role']) ? sanitize($_POST['new_role']) : 'admin'; if ($username && $email && $password && $fullName) { $success = $auth->createAdmin($username, $email, $password, $fullName, $role); adminJsonResponse($success, $success ? 'Admin user created successfully' : 'Failed to create admin user (username or email may already exist)'); } else { adminJsonResponse(false, 'All fields are required'); } break; default: adminJsonResponse(false, 'Invalid action'); } } // If admin is logged in, get ticket data if ($auth->isLoggedIn()) { $admin = $auth->getCurrentAdmin(); // Get filters from URL $statusFilter = isset($_GET['status']) ? sanitize($_GET['status']) : null; $priorityFilter = isset($_GET['priority']) ? sanitize($_GET['priority']) : null; $page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1; $limit = 25; $offset = ($page - 1) * $limit; // Get specific ticket if viewing one $viewTicketId = isset($_GET['ticket']) ? intval($_GET['ticket']) : null; $viewTicket = null; $ticketMessages = []; if ($viewTicketId) { $viewTicket = $auth->getTicketById($viewTicketId); if ($viewTicket) { $ticketMessages = $auth->getTicketMessages($viewTicketId, true); } } // Get tickets list and stats $tickets = $auth->getAllTickets($statusFilter, $priorityFilter, $limit, $offset); $stats = $auth->getTicketStats(); $adminUsers = $auth->getAdminUsers(); } ?> <?php echo $auth->isLoggedIn() ? 'Support Admin Panel' : 'Admin Login'; ?> - Relevant Reflex isLoggedIn()): ?>

Support Admin Panel

Welcome,
Total Tickets
Open
Pending
Resolved
Urgent
Today

No tickets found

No support tickets match your current filters.

| | messages | Assigned to

Ticket #


User:
Created:
Assigned to:
Last update:
Internal Note
Add Reply
Actions
Quick Info
Messages:
User Messages:
Admin Replies:
Internal Notes:

Ticket Not Found

The requested ticket could not be found.

Back to All Tickets
isLoggedIn()): ?>