setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Database connection failed: " . $e->getMessage()); } // Helper functions function getOnlineGainsSite(PDO $pdo): ?array { $stmt = $pdo->prepare("SELECT * FROM sites WHERE site_name = 'online-gains' LIMIT 1"); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC) ?: null; } function isActiveSession(PDO $pdo): ?array { $site = getOnlineGainsSite($pdo); if (!$site) return null; if (!empty($site['session_id']) && $site['session_id'] === session_id() && time() < strtotime($site['session_expiry']) && $site['status'] === 'active') { // Sliding expiry $newExpiry = date('Y-m-d H:i:s', time() + SESSION_TTL); $upd = $pdo->prepare("UPDATE sites SET session_expiry = ? WHERE site_name = 'online-gains'"); $upd->execute([$newExpiry]); return $site; } return null; } $action = $_REQUEST['action'] ?? ''; // Logout if ($action === 'logout') { $site = getOnlineGainsSite($pdo); if ($site) { $upd = $pdo->prepare("UPDATE sites SET session_id = NULL, session_created = NULL, session_expiry = NULL WHERE site_name = 'online-gains'"); $upd->execute(); } session_destroy(); header('Location: ' . $_SERVER['PHP_SELF']); exit; } // Login handler if ($action === 'login' && $_SERVER['REQUEST_METHOD'] === 'POST') { $credential = trim($_POST['credential'] ?? ''); $password = trim($_POST['password'] ?? ''); $response = ['success' => false, 'message' => '']; if ($credential === '' || $password === '') { $response['message'] = 'Username/Email and password are required.'; echo json_encode($response); exit; } $stmt = $pdo->prepare("SELECT * FROM sites WHERE site_name = 'online-gains' AND (username = ? OR email = ?) LIMIT 1"); $stmt->execute([$credential, $credential]); $user = $stmt->fetch(PDO::FETCH_ASSOC); if (!$user || $user['password'] !== $password) { $response['message'] = 'Invalid credentials.'; echo json_encode($response); exit; } if ($user['status'] !== 'active') { $response['message'] = $user['status'] . ' user, please contact your admin.'; echo json_encode($response); exit; } $expiry = date('Y-m-d H:i:s', time() + SESSION_TTL); $updateStmt = $pdo->prepare("UPDATE sites SET session_id = ?, session_created = NOW(), session_expiry = ? WHERE site_name = 'online-gains'"); $updateStmt->execute([session_id(), $expiry]); $response['success'] = true; $response['message'] = 'Login successful.'; echo json_encode($response); exit; } // Edit profile if ($action === 'edit_profile' && $_SERVER['REQUEST_METHOD'] === 'POST') { $auth = isActiveSession($pdo); if (!$auth) { echo json_encode(['success' => false, 'message' => 'Session expired or inactive. Please login again.']); exit; } $email = trim($_POST['email'] ?? ''); $whatsapp_number = trim($_POST['whatsapp_number'] ?? ''); $password = trim($_POST['password'] ?? ''); if ($email === '' || $whatsapp_number === '') { echo json_encode(['success' => false, 'message' => 'Email and WhatsApp number are required.']); exit; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo json_encode(['success' => false, 'message' => 'Invalid email format.']); exit; } $updates = []; $params = []; if ($password !== '') { $updates[] = "password = ?"; $params[] = $password; } $updates[] = "email = ?"; $params[] = $email; $updates[] = "whatsapp_number = ?"; $params[] = $whatsapp_number; $params[] = 'online-gains'; $sql = "UPDATE sites SET " . implode(", ", $updates) . " WHERE site_name = ?"; $stmt = $pdo->prepare($sql); $stmt->execute($params); echo json_encode(['success' => true, 'message' => 'Profile updated successfully.']); exit; } // Edit site details if ($action === 'edit_site' && $_SERVER['REQUEST_METHOD'] === 'POST') { $auth = isActiveSession($pdo); if (!$auth) { echo json_encode(['success' => false, 'message' => 'Session expired or inactive. Please login again.']); exit; } $affiliate_link = trim($_POST['affiliate_link'] ?? ''); $whatsapp_group_link = trim($_POST['whatsapp_group_link'] ?? ''); $stmt = $pdo->prepare("UPDATE sites SET affiliate_link = ?, whatsapp_group_link = ? WHERE site_name = 'online-gains'"); $stmt->execute([$affiliate_link, $whatsapp_group_link]); echo json_encode(['success' => true, 'message' => 'Site details updated successfully.']); exit; } // Page state $activeSession = isActiveSession($pdo); $siteData = getOnlineGainsSite($pdo); if (!$siteData) { die("Error: No site record with site_name = 'online-gains' found. Please insert one."); } ?>