Unmatched - Open ticket: a ticket from a text from a number that isn't a contact's, * for the client and contact picked (or no client). Every unmatched text from the number in * the last SMS_CONVERSATION_DAYS days goes on it, and what the number texts next goes on it * too. The number can be saved as the contact's mobile, so their next text finds them * (sms_open_ticket, agent/post/texts.php). */ require_once '../../../includes/modal_header.php'; enforceUserPermission('module_support', 2); $row = smsMessageRow($_GET['id'] ?? 0); if (!$row || $row['sms_message_direction'] !== 'in' || $row['sms_message_status'] !== 'unmatched' || !hasClientAccess($row['sms_message_client_id'])) { echo json_encode(['error' => 'That text isn\'t waiting in Unmatched any more - someone may have opened a ticket from it.']); exit; } $number = (string) $row['sms_message_number']; $texts = mysqli_fetch_all(mysqli_query($mysqli, "SELECT sms_message_id, sms_message_body, sms_message_media, sms_message_created_at FROM sms_messages WHERE sms_message_direction = 'in' AND sms_message_status = 'unmatched' AND sms_message_number = '" . escapeSql($number) . "' AND sms_message_created_at > NOW() - INTERVAL " . SMS_CONVERSATION_DAYS . " DAY ORDER BY sms_message_id ASC LIMIT 20"), MYSQLI_ASSOC); $first_line = trim(strtok((string) ($texts[0]['sms_message_body'] ?? $row['sms_message_body']), "\n") ?: ''); $subject = $first_line !== '' ? mb_strimwidth($first_line, 0, 80, '...') : 'Text from ' . smsNumberText($number); $client_id = intval($row['sms_message_client_id']); ob_start(); ?>