apkService = new ApkService(); } public function index() { $db = db_pdo(); $category = $_GET['category'] ?? null; // Store global referral code if present if (isset($_GET['ref'])) { $_SESSION['global_ref'] = $_GET['ref']; } $sql = "SELECT * FROM apks WHERE status = 'published'"; $params = []; if ($category) { $sql .= " AND category_id = (SELECT id FROM categories WHERE slug = ?)"; $params[] = $category; } $sql .= " ORDER BY display_order ASC, created_at DESC LIMIT 12"; $stmt = $db->prepare($sql); $stmt->execute($params); $apks = $stmt->fetchAll(); return $this->view('home', [ 'apks' => $apks, 'title' => get_setting('site_name', 'ApkNusa') . ' - Professional APK Download Portal' ]); } public function apkDetail($params) { $slug = $params['slug']; $db = db_pdo(); $stmt = $db->prepare("SELECT * FROM apks WHERE slug = ?"); $stmt->execute([$slug]); $apk = $stmt->fetch(); if (!$apk) { $this->redirect('/'); } // Store referral code if present specifically for this APK if (isset($_GET['ref'])) { $_SESSION['ref_download_' . $apk['id']] = $_GET['ref']; } $this->view('apk_detail', [ 'apk' => $apk, 'title' => 'Download ' . $apk['title'] . ' ' . $apk['version'] . ' - ' . get_setting('site_name', 'ApkNusa'), 'meta_description' => 'Download ' . $apk['title'] . ' ' . $apk['version'] . ' APK for free. ' . substr(strip_tags($apk['description']), 0, 150) . '...', 'meta_keywords' => $apk['title'] . ', ' . $apk['title'] . ' apk, download ' . $apk['title'] ]); } public function download($params) { $slug = $params['slug']; $db = db_pdo(); $stmt = $db->prepare("SELECT * FROM apks WHERE slug = ?"); $stmt->execute([$slug]); $apk = $stmt->fetch(); if (!$apk) { $this->redirect('/'); } // Check for referral earnings // Try specific APK referral first, then global referral $ref_code = $_SESSION['ref_download_' . $apk['id']] ?? ($_SESSION['global_ref'] ?? null); if ($ref_code) { $stmt = $db->prepare("SELECT id FROM users WHERE referral_code = ?"); $stmt->execute([$ref_code]); $referrer = $stmt->fetch(); if ($referrer) { $referrer_id = $referrer['id']; $ip = $_SERVER['REMOTE_ADDR']; // Check if this IP already earned for this APK today (prevent abuse) $stmt = $db->prepare("SELECT id FROM referral_downloads WHERE referrer_id = ? AND apk_id = ? AND ip_address = ? AND created_at > DATE_SUB(NOW(), INTERVAL 1 DAY)"); $stmt->execute([$referrer_id, $apk['id'], $ip]); if (!$stmt->fetch()) { // Credit 500 IDR $stmt = $db->prepare("UPDATE users SET balance = balance + 500 WHERE id = ?"); $stmt->execute([$referrer_id]); // Log download $stmt = $db->prepare("INSERT INTO referral_downloads (referrer_id, apk_id, ip_address, amount) VALUES (?, ?, ?, 500)"); $stmt->execute([$referrer_id, $apk['id'], $ip]); } } // Clear session specific to this APK, but maybe keep global_ref? // The user might download other APKs too. unset($_SESSION['ref_download_' . $apk['id']]); } // Increment total downloads $stmt = $db->prepare("UPDATE apks SET total_downloads = total_downloads + 1 WHERE id = ?"); $stmt->execute([$apk['id']]); // Redirect to actual file $this->redirect($apk['download_url']); } }