exec("SET search_path TO admin, public"); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $tracking_id = $data['tracking_id'] ?? $data['id'] ?? null; $event_type = $data['event'] ?? $data['type'] ?? 'unknown'; if (!$tracking_id) { throw new Exception("Missing tracking_id"); } // Insert into tracking_events $stmt = $db->prepare(" INSERT INTO tracking_events (tracking_id, event_type, event_data, ip_address, user_agent, referer) VALUES (?, ?, ?::jsonb, ?, ?, ?) "); $stmt->execute([ $tracking_id, $event_type, json_encode($data), $_SERVER['REMOTE_ADDR'] ?? 'unknown', $_SERVER['HTTP_USER_AGENT'] ?? 'unknown', $_SERVER['HTTP_REFERER'] ?? 'unknown' ]); // Update send log if needed if (in_array($event_type, ['open', 'click'])) { $update_field = $event_type === 'open' ? 'opened_at = NOW()' : 'clicked_at = NOW()'; $db->exec(" UPDATE unified_send_log_new SET {$update_field} WHERE tracking_id = '{$tracking_id}' "); } echo json_encode([ 'success' => true, 'message' => "Event '{$event_type}' logged for tracking_id '{$tracking_id}'", 'event_id' => $db->lastInsertId() ]); } catch (Exception $e) { http_response_code(400); file_put_contents($log_file, date('Y-m-d H:i:s') . " ERROR: " . $e->getMessage() . "\n", FILE_APPEND); echo json_encode([ 'success' => false, 'error' => $e->getMessage() ]); } ?>