PDO::ERRMODE_EXCEPTION]); } catch (PDOException $e) { die("Database connection failed"); } $dataDir = '/opt/PLATFOMRDELIVERABILITYWEVAL'; $response = ['success' => false, 'message' => '', 'data' => null]; if ($_SERVER['REQUEST_METHOD'] === 'POST') { header('Content-Type: application/json'); $action = $_POST['action'] ?? ''; if ($action === 'scan_files') { $files = []; if (is_dir($dataDir)) { foreach (new DirectoryIterator($dataDir) as $file) { if ($file->isDot()) continue; $ext = strtolower($file->getExtension()); if (!in_array($ext, ['csv', 'txt'])) continue; $lines = 0; $handle = fopen($file->getPathname(), 'r'); while (!feof($handle)) { fgets($handle); $lines++; } fclose($handle); $fn = strtolower($file->getBasename()); $isp = 'Mixed'; if (strpos($fn,'gmail')!==false) $isp='Gmail'; elseif (strpos($fn,'hotmail')!==false || strpos($fn,'outlook')!==false) $isp='Hotmail'; elseif (strpos($fn,'yahoo')!==false) $isp='Yahoo'; elseif (strpos($fn,'gmx')!==false) $isp='GMX'; $seg = 'cold'; if (strpos($fn,'click')!==false) $seg='hot'; elseif (strpos($fn,'open')!==false || strpos($fn,'active')!==false) $seg='warm'; $country = null; if (preg_match('/[_-](us|uk|ca|de|fr|au|es|nl|se|no|fi)[\._-]/i', $fn, $m)) $country = strtoupper($m[1]); $files[] = ['name'=>$file->getBasename(),'size'=>round($file->getSize()/1024,1).'KB','lines'=>$lines-1,'isp'=>$isp,'segment'=>$seg,'country'=>$country]; } } usort($files, fn($a,$b) => $b['lines'] - $a['lines']); echo json_encode(['success'=>true,'data'=>$files]); exit; } if ($action === 'import_file') { $file = basename($_POST['file'] ?? ''); $segment = $_POST['segment'] ?? 'cold'; $country = $_POST['country'] ?? null; $filepath = $dataDir . '/' . $file; if (!file_exists($filepath)) { echo json_encode(['success'=>false,'message'=>'File not found']); exit; } $handle = fopen($filepath, 'r'); $first = fgets($handle); rewind($handle); $delim = substr_count($first,';') > substr_count($first,',') ? ';' : ','; fgetcsv($handle, 0, $delim); $imported = 0; $skipped = 0; $stmt = $pdo->prepare("INSERT INTO admin.leads (email,country,segment,isp,source_file,created_at) VALUES (?,?,?,?,?,NOW()) ON CONFLICT (email) DO UPDATE SET segment=CASE WHEN EXCLUDED.segment='hot' THEN 'hot' WHEN admin.leads.segment='hot' THEN 'hot' WHEN EXCLUDED.segment='warm' THEN 'warm' ELSE admin.leads.segment END, updated_at=NOW()"); while (($row = fgetcsv($handle, 0, $delim)) !== false) { $email = null; foreach ($row as $val) { if (filter_var(trim($val), FILTER_VALIDATE_EMAIL)) { $email = strtolower(trim($val)); break; } } if (!$email) { $skipped++; continue; } $domain = substr(strrchr($email, "@"), 1); $isp = 'Other'; if (strpos($domain,'gmail')!==false) $isp='Gmail'; elseif (strpos($domain,'hotmail')!==false || strpos($domain,'outlook')!==false || strpos($domain,'live')!==false) $isp='Hotmail'; elseif (strpos($domain,'yahoo')!==false) $isp='Yahoo'; try { $stmt->execute([$email,$country,$segment,$isp,$file]); $imported++; } catch(Exception $e) { $skipped++; } } fclose($handle); echo json_encode(['success'=>true,'message'=>"Imported: $imported, Skipped: $skipped",'data'=>['imported'=>$imported,'skipped'=>$skipped]]); exit; } } $totalLeads = $pdo->query("SELECT COUNT(*) FROM admin.leads")->fetchColumn() ?: 0; $todayImported = $pdo->query("SELECT COUNT(*) FROM admin.leads WHERE created_at::date = CURRENT_DATE")->fetchColumn() ?: 0; ?>
Loading files...
No files found