diff --git a/app/Controllers/AdminController.php b/app/Controllers/AdminController.php index eadb807..de176de 100644 --- a/app/Controllers/AdminController.php +++ b/app/Controllers/AdminController.php @@ -418,75 +418,6 @@ private function getReferralStats() { $this->redirect('/admin/apks'); } - // Newsletter Management - public function newsletter() { - $this->checkAuth(); - $db = db_pdo(); - $subscribers = $db->query("SELECT * FROM newsletter_subscribers ORDER BY created_at DESC")->fetchAll(); - $this->view('admin/newsletter/index', ['subscribers' => $subscribers]); - } - - public function deleteSubscriber($params) { - $this->checkAuth(); - $db = db_pdo(); - $stmt = $db->prepare("DELETE FROM newsletter_subscribers WHERE id = ?"); - $stmt->execute([$params['id']]); - $this->redirect('/admin/newsletter'); - } - - public function exportSubscribers() { - $this->checkAuth(); - $db = db_pdo(); - $subscribers = $db->query("SELECT email, created_at FROM newsletter_subscribers ORDER BY created_at DESC")->fetchAll(\PDO::FETCH_ASSOC); - - header('Content-Type: text/csv; charset=utf-8'); - header('Content-Disposition: attachment; filename=subscribers_' . date('Y-m-d') . '.csv'); - $output = fopen('php://output', 'w'); - fputcsv($output, ['Email', 'Subscribed At']); - foreach ($subscribers as $row) { - fputcsv($output, $row); - } - fclose($output); - exit; - } - - public function sendNewsletterForm() { - $this->checkAuth(); - $db = db_pdo(); - $total_subscribers = $db->query("SELECT COUNT(*) FROM newsletter_subscribers")->fetchColumn(); - $this->view('admin/newsletter/send', ['total_subscribers' => $total_subscribers]); - } - - public function sendNewsletter() { - $this->checkAuth(); - $subject = $_POST['subject'] ?? ''; - $message = $_POST['message'] ?? ''; - - if (empty($subject) || empty($message)) { - $this->view('admin/newsletter/send', ['error' => 'Subject and message are required.']); - return; - } - - $db = db_pdo(); - $subscribers = $db->query("SELECT email FROM newsletter_subscribers")->fetchAll(\PDO::FETCH_COLUMN); - - if (empty($subscribers)) { - $this->view('admin/newsletter/send', ['error' => 'No subscribers found.']); - return; - } - - require_once __DIR__ . '/../../mail/MailService.php'; - - // We use BCC to prevent subscribers from seeing each other's emails - $results = \MailService::sendMail(null, $subject, $message, null, ['bcc' => $subscribers]); - - if ($results['success']) { - $this->view('admin/newsletter/send', ['success' => 'Email sent to ' . count($subscribers) . ' subscribers.']); - } else { - $this->view('admin/newsletter/send', ['error' => 'Failed to send email: ' . $results['error']]); - } - } - private function slugify($text) { $text = preg_replace('~[^\pL\d]+~u', '-', $text); $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); diff --git a/index.php b/index.php index b8cf1b6..16a30a3 100644 --- a/index.php +++ b/index.php @@ -1,32 +1,74 @@ post('/api/newsletter/subscribe', 'NewsletterController@subscribe'); +$router->post('/api/report', 'ContactController@ajaxReport'); +$router->post('/api/ai/chat', 'AIController@chat'); + +// Sitemap +$router->get('/sitemap.xml', 'SitemapController@index'); + +// Language Switch +$router->get('/lang/:code', function($params) { + $code = $params['code']; + \App\Services\LanguageService::setLang($code); + header('Location: ' . ($_SERVER['HTTP_REFERER'] ?? '/')); + exit; +}); + +// Home & APKs $router->get('/', 'HomeController@index'); -$router->get('/apk/:slug', 'ApkController@detail'); -$router->get('/download/:slug', 'ApkController@download'); +$router->get('/apk/:slug', 'HomeController@apkDetail'); +$router->get('/download/:slug', 'HomeController@download'); + +// Blog +$router->get('/blog', 'BlogController@index'); +$router->get('/blog/:slug', 'BlogController@detail'); + +// Static Pages +$router->get('/contact', 'ContactController@index'); +$router->post('/contact', 'ContactController@submit'); +$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'); @@ -35,40 +77,36 @@ $router->get('/register', 'AuthController@registerForm'); $router->post('/register', 'AuthController@register'); $router->get('/logout', 'AuthController@logout'); $router->get('/profile', 'AuthController@profile'); -$router->post('/profile', 'AuthController@updateProfile'); +$router->post('/withdraw', 'AuthController@requestWithdrawal'); -// Admin Routes -$router->get('/admin', 'AdminController@dashboard'); +// Admin Auth $router->get('/admin/login', 'AdminController@loginForm'); $router->post('/admin/login', 'AdminController@login'); $router->get('/admin/logout', 'AdminController@logout'); -// Admin APKs -$router->get('/admin/apks', 'AdminController@apks'); -$router->get('/admin/apks/add', 'AdminController@addApkForm'); -$router->post('/admin/apks/add', 'AdminController@addApk'); -$router->get('/admin/apks/edit/:id', 'AdminController@editApkForm'); -$router->post('/admin/apks/edit/:id', 'AdminController@editApk'); -$router->get('/admin/apks/delete/:id', 'AdminController@deleteApk'); - -// Admin Categories -$router->get('/admin/categories', 'AdminController@categories'); -$router->post('/admin/categories/add', 'AdminController@addCategory'); -$router->get('/admin/categories/delete/:id', 'AdminController@deleteCategory'); - -// Admin Users -$router->get('/admin/users', 'AdminController@users'); -$router->get('/admin/users/delete/:id', 'AdminController@deleteUser'); +// Admin Dashboard +$router->get('/admin/dashboard', 'AdminController@dashboard'); // Admin Settings $router->get('/admin/settings', 'AdminController@settingsForm'); $router->post('/admin/settings', 'AdminController@saveSettings'); -// Blog -$router->get('/blog', 'BlogController@index'); -$router->get('/blog/:slug', 'BlogController@detail'); +// Admin Users +$router->get('/admin/users', 'AdminController@users'); +$router->post('/admin/users/toggle-ban/:id', 'AdminController@toggleBan'); -// Admin Blog +// Admin APKs +$router->get('/admin/apks', 'AdminController@apks'); +$router->get('/admin/apks/mass-upload', 'AdminController@massUploadForm'); +$router->post('/admin/apks/mass-upload', 'AdminController@massUpload'); +$router->get('/admin/apks/add', 'AdminController@addApkForm'); +$router->post('/admin/apks/add', 'AdminController@addApk'); +$router->get('/admin/apks/edit/:id', 'AdminController@editApkForm'); +$router->post('/admin/apks/edit/:id', 'AdminController@editApk'); +$router->get('/admin/apks/delete/:id', 'AdminController@deleteApk'); +$router->post('/admin/apks/reorder', 'AdminController@updateOrder'); + +// Admin Posts (Blog) $router->get('/admin/posts', 'AdminController@posts'); $router->get('/admin/posts/add', 'AdminController@addPostForm'); $router->post('/admin/posts/add', 'AdminController@addPost'); @@ -76,19 +114,14 @@ $router->get('/admin/posts/edit/:id', 'AdminController@editPostForm'); $router->post('/admin/posts/edit/:id', 'AdminController@editPost'); $router->get('/admin/posts/delete/:id', 'AdminController@deletePost'); -// Newsletter -$router->post('/newsletter/subscribe', 'NewsletterController@subscribe'); -$router->get('/admin/newsletter', 'AdminController@newsletter'); -$router->get('/admin/newsletter/delete/:id', 'AdminController@deleteSubscriber'); -$router->get('/admin/newsletter/export', 'AdminController@exportSubscribers'); -$router->get('/admin/newsletter/send', 'AdminController@sendNewsletterForm'); -$router->post('/admin/newsletter/send', 'AdminController@sendNewsletter'); +// Admin Categories +$router->get('/admin/categories', 'AdminController@categories'); +$router->post('/admin/categories/add', 'AdminController@addCategory'); +$router->get('/admin/categories/delete/:id', 'AdminController@deleteCategory'); -// Contact -$router->get('/contact', 'ContactController@index'); -$router->post('/contact', 'ContactController@send'); - -// Sitemap -$router->get('/sitemap.xml', 'SitemapController@index'); +// Admin Withdrawals +$router->get('/admin/withdrawals', 'AdminController@withdrawals'); +$router->get('/admin/withdrawals/approve/:id', 'AdminController@approveWithdrawal'); +$router->get('/admin/withdrawals/reject/:id', 'AdminController@rejectWithdrawal'); $router->dispatch(); \ No newline at end of file diff --git a/views/admin/header.php b/views/admin/header.php index 03eb8a9..a530bf6 100644 --- a/views/admin/header.php +++ b/views/admin/header.php @@ -194,9 +194,6 @@ - @@ -257,4 +254,4 @@ -
\ No newline at end of file +
diff --git a/views/admin/newsletter/index.php b/views/admin/newsletter/index.php deleted file mode 100644 index 74357b7..0000000 --- a/views/admin/newsletter/index.php +++ /dev/null @@ -1,66 +0,0 @@ - - -
-
-
-
-
-
Newsletter Subscribers
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - -
EmailSubscribed At
-
-
-
-
-
-
-

-
- - Delete - -
-

No subscribers found.

-
-
-
-
-
-
-
- - \ No newline at end of file diff --git a/views/admin/newsletter/send.php b/views/admin/newsletter/send.php deleted file mode 100644 index 763ce29..0000000 --- a/views/admin/newsletter/send.php +++ /dev/null @@ -1,52 +0,0 @@ - - -
-
-
-
-
-
Send Newsletter
- Back to List -
-
- -
- -
- - - -
- -
- - -
- - This email will be sent to all subscribers via BCC. -
- -
-
- - -
- -
- - -
- -
- -
-
-
-
-
-
-
- - \ No newline at end of file