83 lines
3.5 KiB
PHP
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;
|
|
}
|