From b535a47db4868969f307ddc60dd3b0420c0ca3b7 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 24 Feb 2026 23:36:27 +0000 Subject: [PATCH] Fix ini --- app/Controllers/HomeController.php | 104 ++++++++++--------------- app/Services/ApkService.php | 29 ++++++- assets/uploads/icons/699e34c63c00e.jpg | Bin 0 -> 22619 bytes index.php | 7 +- lang/en.php | 21 +++++ lang/id.php | 21 +++++ views/admin/apks/index.php | 19 ++++- views/footer.php | 14 ++-- views/help_center.php | 71 +++++++++++++++++ views/privacy_policy.php | 23 ++++++ views/terms_of_service.php | 23 ++++++ 11 files changed, 257 insertions(+), 75 deletions(-) create mode 100644 assets/uploads/icons/699e34c63c00e.jpg create mode 100644 views/help_center.php create mode 100644 views/privacy_policy.php create mode 100644 views/terms_of_service.php diff --git a/app/Controllers/HomeController.php b/app/Controllers/HomeController.php index 15ec9d8..4a6e4cc 100644 --- a/app/Controllers/HomeController.php +++ b/app/Controllers/HomeController.php @@ -6,36 +6,15 @@ 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; + $search = $_GET['search'] ?? null; - // Store global referral code if present - if (isset($_GET['ref'])) { - $_SESSION['global_ref'] = $_GET['ref']; - } - - $sql = "SELECT * FROM apks WHERE status = 'published'"; - $params = []; + $apkService = new ApkService(); + $apks = $apkService->getAllApks($category, $search); - 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', [ + $this->view('home', [ 'apks' => $apks, 'title' => get_setting('site_name', 'ApkNusa') . __('home_title_suffix') ]); @@ -57,14 +36,9 @@ class HomeController extends Controller { $_SESSION['ref_download_' . $apk['id']] = $_GET['ref']; } - $siteName = get_setting('site_name', 'ApkNusa'); - $description = substr(strip_tags($apk['description']), 0, 150) . '...'; - $this->view('apk_detail', [ 'apk' => $apk, - 'title' => sprintf(__('apk_detail_title'), $apk['title'], $apk['version'], $siteName), - 'meta_description' => sprintf(__('apk_detail_meta_desc'), $apk['title'], $apk['version'], $description), - 'meta_keywords' => sprintf(__('apk_detail_meta_keywords'), $apk['title'], $apk['title'], $apk['title']) + 'title' => $apk['title'] . ' - ' . get_setting('site_name', 'ApkNusa') ]); } @@ -79,43 +53,49 @@ class HomeController extends Controller { $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 = ?"); + // Increment download count + $stmt = $db->prepare("UPDATE apks SET total_downloads = total_downloads + 1 WHERE id = ?"); + $stmt->execute([$apk['id']]); + + // Referral logic + $ref_key = 'ref_download_' . $apk['id']; + if (isset($_SESSION['ref_download_' . $apk['id']])) { + $ref_code = $_SESSION['ref_download_' . $apk['id']]; + + // Find the user who owns this referral code + $stmt = $db->prepare("SELECT * 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]); - } + // Award points/money to referrer + // For example, 100 rupiah per download + $stmt = $db->prepare("UPDATE users SET balance = balance + 100 WHERE id = ?"); + $stmt->execute([$referrer['id']]); } - // Clear session specific to this APK, but maybe keep global_ref? - // The user might download other APKs too. - unset($_SESSION['ref_download_' . $apk['id']]); + + unset($_SESSION[$ref_key]); } - // Increment total downloads - $stmt = $db->prepare("UPDATE apks SET total_downloads = total_downloads + 1 WHERE id = ?"); - $stmt->execute([$apk['id']]); + header('Location: ' . $apk['download_url']); + exit; + } - // Redirect to actual file - $this->redirect($apk['download_url']); + public function helpCenter() { + $this->view('help_center', [ + 'title' => __('help_center') . ' - ' . get_setting('site_name', 'ApkNusa') + ]); + } + + public function privacyPolicy() { + $this->view('privacy_policy', [ + 'title' => __('privacy_policy') . ' - ' . get_setting('site_name', 'ApkNusa') + ]); + } + + public function termsOfService() { + $this->view('terms_of_service', [ + 'title' => __('terms_of_service') . ' - ' . get_setting('site_name', 'ApkNusa') + ]); } } \ No newline at end of file diff --git a/app/Services/ApkService.php b/app/Services/ApkService.php index a27150f..d3f9ff4 100644 --- a/app/Services/ApkService.php +++ b/app/Services/ApkService.php @@ -12,7 +12,7 @@ class ApkService { } public function getLatest($limit = 10) { - $stmt = $this->db->prepare("SELECT * FROM apks WHERE status = 'published' ORDER BY created_at DESC LIMIT :limit"); + $stmt = $this->db->prepare("SELECT * FROM apks WHERE status = 'published' ORDER BY display_order ASC, created_at DESC LIMIT :limit"); $stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT); $stmt->execute(); return $stmt->fetchAll(); @@ -24,9 +24,30 @@ class ApkService { return $stmt->fetch(); } - public function getAllApks() { - $stmt = $this->db->prepare("SELECT * FROM apks ORDER BY created_at DESC"); - $stmt->execute(); + public function getAllApks($category_slug = null, $search = null) { + $query = "SELECT a.* FROM apks a"; + $params = []; + $where = []; + + if ($category_slug) { + $query .= " JOIN categories c ON a.category_id = c.id"; + $where[] = "c.slug = :category_slug"; + $params['category_slug'] = $category_slug; + } + + if ($search) { + $where[] = "a.title LIKE :search"; + $params['search'] = "%$search%"; + } + + if (!empty($where)) { + $query .= " WHERE " . implode(" AND ", $where); + } + + $query .= " ORDER BY a.display_order ASC, a.created_at DESC"; + + $stmt = $this->db->prepare($query); + $stmt->execute($params); return $stmt->fetchAll(); } diff --git a/assets/uploads/icons/699e34c63c00e.jpg b/assets/uploads/icons/699e34c63c00e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..472e17998c7a3022623c76ba8436f4914811a272 GIT binary patch literal 22619 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 zget('/', 'HomeController@index'); $router->get('/apk/:slug', 'HomeController@apkDetail'); $router->get('/download/:slug', 'HomeController@download'); +// Static Pages +$router->get('/help-center', 'HomeController@helpCenter'); +$router->get('/privacy-policy', 'HomeController@privacyPolicy'); +$router->get('/terms-of-service', 'HomeController@termsOfService'); + // Auth $router->get('/login', 'AuthController@loginForm'); $router->post('/login', 'AuthController@login'); @@ -86,4 +91,4 @@ $router->get('/admin/withdrawals', 'AdminController@withdrawals'); $router->get('/admin/withdrawals/approve/:id', 'AdminController@approveWithdrawal'); $router->get('/admin/withdrawals/reject/:id', 'AdminController@rejectWithdrawal'); -$router->dispatch(); +$router->dispatch(); \ No newline at end of file diff --git a/lang/en.php b/lang/en.php index b07ebf6..e59c771 100644 --- a/lang/en.php +++ b/lang/en.php @@ -134,4 +134,25 @@ return [ // SEO Defaults 'meta_description_default' => 'Download Professional APKs.', 'meta_keywords_default' => 'apk, android, download', + + // Help Center + 'help_center_title' => 'Help Center', + 'faq_title' => 'Frequently Asked Questions', + 'faq_q1' => 'How to download APK from our site?', + 'faq_a1' => 'Simply browse for the app you want, click on it, and then click the green "Download Now" button. Your download will start immediately.', + 'faq_q2' => 'Are the APKs safe?', + 'faq_a2' => 'Yes, all our APKs are sourced from original developers and verified to be safe and clean from any malware.', + 'faq_q3' => 'How does the referral program work?', + 'faq_a3' => 'Register for an account, copy your referral link from an APK page or your profile, and share it. You will earn Rp 500 for every unique download made through your link.', + 'contact_us' => 'Contact Us', + 'contact_text' => 'Still have questions? Our support team is here to help you.', + 'send_email' => 'Send Email', + + // Privacy Policy + 'privacy_policy_title' => 'Privacy Policy', + 'privacy_policy_content' => '

1. Information We Collect

We collect information that you provide directly to us, such as when you create an account, participate in our referral program, or communicate with us.

2. How We Use Information

We use the information we collect to provide, maintain, and improve our services, including processing your referral earnings and withdrawal requests.

3. Data Security

We take reasonable measures to help protect information about you from loss, theft, misuse and unauthorized access.

', + + // Terms of Service + 'terms_of_service_title' => 'Terms of Service', + 'terms_of_service_content' => '

1. Acceptance of Terms

By accessing or using our website, you agree to be bound by these terms of service.

2. User Conduct

You agree not to use the website for any unlawful purpose or in any way that could damage, disable, or impair the website.

3. Referral Program

Abuse of the referral program, including but not limited to self-referrals or using bots, will result in account suspension and forfeiture of earnings.

', ]; \ No newline at end of file diff --git a/lang/id.php b/lang/id.php index 5b1e119..71d7b69 100644 --- a/lang/id.php +++ b/lang/id.php @@ -134,4 +134,25 @@ return [ // SEO Defaults 'meta_description_default' => 'Unduh APK Profesional.', 'meta_keywords_default' => 'apk, android, unduh', + + // Help Center + 'help_center_title' => 'Pusat Bantuan', + 'faq_title' => 'Pertanyaan yang Sering Diajukan', + 'faq_q1' => 'Bagaimana cara mengunduh APK dari situs kami?', + 'faq_a1' => 'Cukup cari aplikasi yang Anda inginkan, klik aplikasi tersebut, lalu klik tombol hijau "Unduh Sekarang". Unduhan Anda akan segera dimulai.', + 'faq_q2' => 'Apakah APK di sini aman?', + 'faq_a2' => 'Ya, semua APK kami bersumber dari pengembang asli dan diverifikasi aman serta bersih dari malware.', + 'faq_q3' => 'Bagaimana cara kerja program referral?', + 'faq_a3' => 'Daftar akun, salin link referral Anda dari halaman APK atau profil Anda, dan bagikan. Anda akan mendapatkan Rp 500 untuk setiap unduhan unik yang dilakukan melalui link Anda.', + 'contact_us' => 'Hubungi Kami', + 'contact_text' => 'Masih punya pertanyaan? Tim dukungan kami siap membantu Anda.', + 'send_email' => 'Kirim Email', + + // Privacy Policy + 'privacy_policy_title' => 'Kebijakan Privasi', + 'privacy_policy_content' => '

1. Informasi yang Kami Kumpulkan

Kami mengumpulkan informasi yang Anda berikan langsung kepada kami, seperti saat Anda membuat akun, berpartisipasi dalam program referral kami, atau berkomunikasi dengan kami.

2. Bagaimana Kami Menggunakan Informasi

Kami menggunakan informasi yang kami kumpulkan untuk menyediakan, memelihara, dan meningkatkan layanan kami, termasuk memproses pendapatan referral dan permintaan penarikan Anda.

3. Keamanan Data

Kami mengambil langkah-langkah yang wajar untuk membantu melindungi informasi tentang Anda dari kehilangan, pencurian, penyalahgunaan, dan akses yang tidak sah.

', + + // Terms of Service + 'terms_of_service_title' => 'Ketentuan Layanan', + 'terms_of_service_content' => '

1. Penerimaan Ketentuan

Dengan mengakses atau menggunakan situs web kami, Anda setuju untuk terikat oleh ketentuan layanan ini.

2. Perilaku Pengguna

Anda setuju untuk tidak menggunakan situs web untuk tujuan yang melanggar hukum atau dengan cara apa pun yang dapat merusak, melumpuhkan, atau mengganggu situs web.

3. Program Referral

Penyalahgunaan program referral, termasuk namun tidak terbatas pada referral diri sendiri atau menggunakan bot, akan mengakibatkan penangguhan akun dan penghapusan pendapatan.

', ]; \ No newline at end of file diff --git a/views/admin/apks/index.php b/views/admin/apks/index.php index 8f5fe68..a5d9fdb 100644 --- a/views/admin/apks/index.php +++ b/views/admin/apks/index.php @@ -8,6 +8,11 @@ + +
APK List (Drag to Reorder)
@@ -90,6 +95,7 @@ onEnd: function (evt) { const rows = el.querySelectorAll('tr'); const order = Array.from(rows).map(row => row.dataset.id); + const alertBox = document.getElementById('reorderAlert'); fetch('/admin/apks/reorder', { method: 'POST', @@ -98,11 +104,22 @@ }, body: 'order[]=' + order.join('&order[]=') }) - .then(response => response.json()) + .then(response => { + if (!response.ok) throw new Error('Network response was not ok'); + return response.json(); + }) .then(data => { if (data.success) { console.log('Order updated'); + alertBox.style.display = 'block'; + setTimeout(() => { + alertBox.style.display = 'none'; + }, 3000); } + }) + .catch(error => { + console.error('Error:', error); + alert('Failed to update order. Please check your connection.'); }); } }); diff --git a/views/footer.php b/views/footer.php index 28ba35c..17de14b 100644 --- a/views/footer.php +++ b/views/footer.php @@ -18,17 +18,17 @@
    -
  • -
  • -
  • +
  • +
  • +
    -
  • -
  • -
  • +
  • +
  • +
@@ -60,4 +60,4 @@ - + \ No newline at end of file diff --git a/views/help_center.php b/views/help_center.php new file mode 100644 index 0000000..9f7728d --- /dev/null +++ b/views/help_center.php @@ -0,0 +1,71 @@ + + +
+
+
+
+ +

+ +
+
+

+
+
+

+ +

+
+
+ +
+
+
+
+

+ +

+
+
+ +
+
+
+
+

+ +

+
+
+ +
+
+
+
+
+ +
+

+

+ + + +
+
+
+
+
+
+ + diff --git a/views/privacy_policy.php b/views/privacy_policy.php new file mode 100644 index 0000000..28ca2c5 --- /dev/null +++ b/views/privacy_policy.php @@ -0,0 +1,23 @@ + + +
+
+
+
+ +

+ +
+ +
+
+
+
+
+ + diff --git a/views/terms_of_service.php b/views/terms_of_service.php new file mode 100644 index 0000000..79be910 --- /dev/null +++ b/views/terms_of_service.php @@ -0,0 +1,23 @@ + + +
+
+
+
+ +

+ +
+ +
+
+
+
+
+ +