Files
html/api/sequence-engine.php
2026-04-12 22:57:03 +02:00

83 lines
3.5 KiB
PHP

<?php
require_once __DIR__ . '/_secrets.php';
header('Content-Type: application/json');
$token = $_GET['token'] ?? '';
if ($token !== 'WEVADS2026') die(json_encode(['error'=>'token']));
$action = $_GET['action'] ?? '';
$db = new PDO('pgsql:host=127.0.0.1;dbname=adx_system','admin',weval_secret('WEVAL_PG_ADMIN_PASS'));
$db->exec("SET search_path TO admin");
// Create sequences table if not exists
try {
$db->exec("CREATE TABLE IF NOT EXISTS sequences (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
status TEXT DEFAULT 'draft',
steps JSONB DEFAULT '[]',
contacts_list TEXT,
total_contacts INT DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)");
$db->exec("CREATE TABLE IF NOT EXISTS sequence_enrollments (
id SERIAL PRIMARY KEY,
sequence_id INT REFERENCES sequences(id),
contact_email TEXT NOT NULL,
current_step INT DEFAULT 0,
status TEXT DEFAULT 'active',
next_action_at TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW()
)");
$db->exec("CREATE TABLE IF NOT EXISTS sequence_events (
id SERIAL PRIMARY KEY,
sequence_id INT,
enrollment_id INT,
step_index INT,
event_type TEXT,
details JSONB,
created_at TIMESTAMP DEFAULT NOW()
)");
} catch (Exception $e) {}
switch ($action) {
case 'list':
$seqs = [];
foreach ($db->query("SELECT id, name, status, total_contacts, created_at,
(SELECT COUNT(*) FROM sequence_enrollments WHERE sequence_id = sequences.id AND status = 'active') as active_contacts,
jsonb_array_length(steps) as step_count
FROM sequences ORDER BY created_at DESC LIMIT 20") as $r) $seqs[] = $r;
echo json_encode(['ok'=>1, 'sequences'=>$seqs]);
break;
case 'create':
if ($_SERVER['REQUEST_METHOD'] !== 'POST') die(json_encode(['error'=>'POST']));
$data = json_decode(file_get_contents('php://input'), true);
$name = $data['name'] ?? 'New Sequence';
$steps = json_encode($data['steps'] ?? [
['type'=>'email','delay_days'=>0,'subject'=>'','html'=>'','wait_hours'=>0],
['type'=>'email','delay_days'=>3,'subject'=>'','html'=>'','wait_hours'=>72],
['type'=>'email','delay_days'=>5,'subject'=>'','html'=>'','wait_hours'=>120]
]);
$db->prepare("INSERT INTO sequences (name, steps) VALUES (?, ?)")->execute([$name, $steps]);
echo json_encode(['ok'=>1, 'id'=>$db->lastInsertId()]);
break;
case 'get':
$id = intval($_GET['id'] ?? 0);
$seq = $db->query("SELECT * FROM sequences WHERE id = $id")->fetch(PDO::FETCH_ASSOC);
$enrollments = [];
foreach ($db->query("SELECT * FROM sequence_enrollments WHERE sequence_id = $id ORDER BY created_at DESC LIMIT 50") as $r) $enrollments[] = $r;
echo json_encode(['ok'=>1, 'sequence'=>$seq, 'enrollments'=>$enrollments]);
break;
case 'stats':
$total = $db->query("SELECT COUNT(*) FROM sequences")->fetchColumn();
$active = $db->query("SELECT COUNT(*) FROM sequences WHERE status = 'active'")->fetchColumn();
$enrolled = $db->query("SELECT COUNT(*) FROM sequence_enrollments WHERE status = 'active'")->fetchColumn();
$events = $db->query("SELECT COUNT(*) FROM sequence_events")->fetchColumn();
$by_step = [];
foreach ($db->query("SELECT event_type, COUNT(*) as cnt FROM sequence_events GROUP BY event_type ORDER BY cnt DESC") as $r) $by_step[] = $r;
echo json_encode(['ok'=>1, 'total'=>(int)$total, 'active'=>(int)$active, 'enrolled'=>(int)$enrolled, 'events'=>(int)$events, 'by_type'=>$by_step]);
break;
}