getConnection();
} catch (Exception $e) {
logPartnerActivity('Database connection failed: ' . $e->getMessage());
die('System error. Please try again later.');
}
$success_message = '';
$error_message = '';
// Handle ticket creation
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$subject = isset($_POST['subject']) ? trim($_POST['subject']) : '';
$message = isset($_POST['message']) ? trim($_POST['message']) : '';
$priority = isset($_POST['priority']) ? $_POST['priority'] : 'medium';
if (empty($subject) || empty($message)) {
$error_message = 'Subject and message are required.';
} elseif (strlen($subject) > 255) {
$error_message = 'Subject must be 255 characters or less.';
} elseif (strlen($message) > 5000) {
$error_message = 'Message must be 5000 characters or less.';
} else {
try {
$pdo->beginTransaction();
// Generate unique ticket number
$ticketNumber = 'TKT-' . date('Ymd') . '-' . strtoupper(substr(bin2hex(random_bytes(4)), 0, 6));
// Insert ticket with partner info
$stmt = $pdo->prepare("
INSERT INTO support_tickets (ticket_number, user_id, sender_type, sender_id, subject, status, priority)
VALUES (?, ?, 'partner', ?, ?, 'open', ?)
");
$stmt->execute([$ticketNumber, $partner['id'], $partner['id'], $subject, $priority]);
$ticketId = $pdo->lastInsertId();
// Insert initial message
$stmt = $pdo->prepare("
INSERT INTO support_messages (ticket_id, sender_type, sender_id, message, is_internal)
VALUES (?, 'user', ?, ?, 0)
");
$stmt->execute([$ticketId, $partner['id'], $message]);
$pdo->commit();
$success_message = "Support ticket created successfully! Ticket Number: $ticketNumber
We will respond to your query shortly.";
logPartnerActivity('Support ticket created', [
'ticket_number' => $ticketNumber,
'partner_id' => $partner['id'],
'subject' => $subject,
'priority' => $priority
]);
// Clear form
$_POST = [];
} catch (Exception $e) {
$pdo->rollBack();
logPartnerActivity('Error creating support ticket: ' . $e->getMessage());
$error_message = 'Failed to create support ticket. Please try again.';
}
}
}
// Get partner's existing tickets
try {
$stmt = $pdo->prepare("
SELECT st.*, au.full_name as assigned_to_name,
(SELECT COUNT(*) FROM support_messages WHERE ticket_id = st.id AND is_internal = 0) as message_count
FROM support_tickets st
LEFT JOIN admin_users au ON st.assigned_to = au.id
WHERE st.sender_type = 'partner' AND st.sender_id = ?
ORDER BY st.created_at DESC
");
$stmt->execute([$partner['id']]);
$tickets = $stmt->fetchAll();
} catch (Exception $e) {
logPartnerActivity('Error fetching tickets: ' . $e->getMessage());
$tickets = [];
}
?>
You haven't created any support tickets. Create one above if you need assistance.