38751-vm/app/Controllers/HomeController.php
2026-02-24 23:03:19 +00:00

119 lines
4.1 KiB
PHP

<?php
namespace App\Controllers;
use App\Core\Controller;
use App\Services\ApkService;
class HomeController extends Controller {
protected $apkService;
public function __construct() {
$this->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']);
}
}