PDO::ERRMODE_EXCEPTION]); class DataInjector { private $pdo; public function __construct($pdo) { $this->pdo = $pdo; } // Import Email List (CSV: email,first_name,last_name,country) public function importEmails($csvData, $listName = 'imported') { $lines = explode("\n", trim($csvData)); $imported = 0; $duplicates = 0; foreach ($lines as $line) { $parts = str_getcsv($line); if (count($parts) < 1 || !filter_var($parts[0], FILTER_VALIDATE_EMAIL)) continue; try { $this->pdo->prepare("INSERT INTO admin.data_profiles (email, first_name, last_name, country) VALUES (?, ?, ?, ?) ON CONFLICT (email) DO NOTHING") ->execute([ strtolower(trim($parts[0])), $parts[1] ?? '', $parts[2] ?? '', $parts[3] ?? '' ]); $imported++; } catch (Exception $e) { $duplicates++; } } return ['success' => true, 'imported' => $imported, 'duplicates' => $duplicates]; } // Import Domains public function importDomains($domains, $pool = 'main') { $imported = 0; $domainList = is_array($domains) ? $domains : explode("\n", trim($domains)); foreach ($domainList as $domain) { $domain = trim($domain); if (empty($domain)) continue; $this->pdo->prepare("INSERT INTO admin.rotation_domains (domain, pool, status) VALUES (?, ?, 'active') ON CONFLICT DO NOTHING") ->execute([$domain, $pool]); $imported++; } return ['success' => true, 'imported' => $imported]; } // Import IPs public function importIPs($ips, $provider = 'huawei') { $imported = 0; $ipList = is_array($ips) ? $ips : explode("\n", trim($ips)); foreach ($ipList as $ip) { $ip = trim($ip); if (!filter_var($ip, FILTER_VALIDATE_IP)) continue; $this->pdo->prepare("INSERT INTO admin.ip_pool (ip_address, provider, status) VALUES (?, ?, 'active') ON CONFLICT DO NOTHING") ->execute([$ip, $provider]); $imported++; } return ['success' => true, 'imported' => $imported]; } // Import O365 Accounts (CSV: email,password,tenant) public function importO365($csvData) { $lines = explode("\n", trim($csvData)); $imported = 0; foreach ($lines as $line) { $parts = str_getcsv($line); if (count($parts) < 2) continue; $this->pdo->prepare("INSERT INTO admin.o365_accounts (email, password, tenant_id, status) VALUES (?, ?, ?, 'active') ON CONFLICT DO NOTHING") ->execute([$parts[0], $parts[1], $parts[2] ?? '']); $imported++; } return ['success' => true, 'imported' => $imported]; } // Import Offers public function importOffer($data) { $this->pdo->prepare("INSERT INTO admin.offers (external_id, name, vertical, payout, geo_targets, tracking_url, preview_url, status) VALUES (?, ?, ?, ?, ?, ?, ?, 'active')") ->execute([ $data['offer_id'] ?? uniqid(), $data['name'], $data['vertical'] ?? 'general', $data['payout'] ?? 0, json_encode($data['geo'] ?? []), $data['tracking_url'] ?? '', $data['preview_url'] ?? '' ]); return ['success' => true, 'id' => $this->pdo->lastInsertId()]; } // Import PMTA Servers public function importServers($servers) { $imported = 0; foreach ($servers as $server) { $this->pdo->prepare("INSERT INTO admin.server_monitor (ip_address, provider, cloud_instance_id, status, cost_per_hour) VALUES (?, ?, ?, 'active', ?) ON CONFLICT DO NOTHING") ->execute([ $server['ip'], $server['provider'] ?? 'huawei', $server['instance_id'] ?? '', $server['cost'] ?? 0.05 ]); $imported++; } return ['success' => true, 'imported' => $imported]; } // Import Seed Inboxes public function importSeeds($csvData) { $lines = explode("\n", trim($csvData)); $imported = 0; foreach ($lines as $line) { $parts = str_getcsv($line); if (count($parts) < 4) continue; $this->pdo->prepare("INSERT INTO admin.seed_inboxes (email, password, imap_host, isp, is_active) VALUES (?, ?, ?, ?, true) ON CONFLICT DO NOTHING") ->execute([$parts[0], $parts[1], $parts[2], $parts[3]]); $imported++; } return ['success' => true, 'imported' => $imported]; } // Bulk Import from JSON public function bulkImport($jsonData) { $data = is_array($jsonData) ? $jsonData : json_decode($jsonData, true); $results = []; if (!empty($data['emails'])) { $results['emails'] = $this->importEmails(implode("\n", $data['emails'])); } if (!empty($data['domains'])) { $results['domains'] = $this->importDomains($data['domains']); } if (!empty($data['ips'])) { $results['ips'] = $this->importIPs($data['ips']); } if (!empty($data['offers'])) { foreach ($data['offers'] as $offer) { $results['offers'][] = $this->importOffer($offer); } } return $results; } public function getStats() { return [ 'emails' => $this->pdo->query("SELECT COUNT(*) FROM admin.data_profiles")->fetchColumn(), 'domains' => $this->pdo->query("SELECT COUNT(*) FROM admin.rotation_domains")->fetchColumn(), 'ips' => $this->pdo->query("SELECT COUNT(*) FROM admin.ip_pool")->fetchColumn(), 'o365_accounts' => $this->pdo->query("SELECT COUNT(*) FROM admin.o365_accounts")->fetchColumn(), 'offers' => $this->pdo->query("SELECT COUNT(*) FROM admin.offers")->fetchColumn(), 'servers' => $this->pdo->query("SELECT COUNT(*) FROM admin.server_monitor")->fetchColumn(), 'seeds' => $this->pdo->query("SELECT COUNT(*) FROM admin.seed_inboxes")->fetchColumn() ]; } } $injector = new DataInjector($pdo); $action = $_POST['action'] ?? $_GET['action'] ?? ''; switch ($action) { case 'emails': echo json_encode($injector->importEmails($_POST['data'], $_POST['list_name'] ?? 'imported')); break; case 'domains': echo json_encode($injector->importDomains($_POST['data'], $_POST['pool'] ?? 'main')); break; case 'ips': echo json_encode($injector->importIPs($_POST['data'], $_POST['provider'] ?? 'huawei')); break; case 'o365': echo json_encode($injector->importO365($_POST['data'])); break; case 'offer': echo json_encode($injector->importOffer($_POST)); break; case 'servers': echo json_encode($injector->importServers(json_decode($_POST['data'], true))); break; case 'seeds': echo json_encode($injector->importSeeds($_POST['data'])); break; case 'bulk': echo json_encode($injector->bulkImport($_POST['data'])); break; case 'stats': echo json_encode($injector->getStats()); break; default: echo json_encode(['name' => 'Data Injector', 'actions' => ['emails','domains','ips','o365','offer','servers','seeds','bulk','stats']]); }