| | <?php |
| | session_start(); |
| | if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true || $_SESSION['user_type'] !== 'admin') { |
| | header('Location: ../../index.php'); |
| | exit; |
| | } |
| |
|
| | require_once '../api/agent-functions.php'; |
| |
|
| | |
| | if ($_SERVER['REQUEST_METHOD'] === 'POST') { |
| | if (isset($_POST['action'])) { |
| | if ($_POST['action'] === 'review_agent') { |
| | $agentId = $_POST['agent_id']; |
| | $status = $_POST['status']; |
| | $notes = $_POST['notes'] ?? ''; |
| | |
| | if (reviewAgentApplication($agentId, $_SESSION['user_id'], $status, $notes)) { |
| | $message = "Agent application " . ($status === 'approved' ? 'approved' : 'rejected') . " successfully!"; |
| | } else { |
| | $error = "Failed to update agent application."; |
| | } |
| | } elseif ($_POST['action'] === 'review_advertisement') { |
| | $adId = $_POST['advertisement_id']; |
| | $status = $_POST['status']; |
| | $notes = $_POST['notes'] ?? ''; |
| | |
| | if (reviewAdvertisement($adId, $_SESSION['user_id'], $status, $notes)) { |
| | $message = "Advertisement " . ($status === 'approved' ? 'approved' : 'rejected') . " successfully!"; |
| | } else { |
| | $error = "Failed to update advertisement."; |
| | } |
| | } |
| | } |
| | } |
| |
|
| | |
| | $pendingAgents = getPendingAgents(0); |
| | $pendingAds = getAdvertisementsForApproval('pending'); |
| | $adStats = getAdvertisementStats(); |
| | ?> |
| |
|
| | <!DOCTYPE html> |
| | <html lang="en"> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | <title>Admin - Approval System</title> |
| | <script src="https://cdn.tailwindcss.com"></script> |
| | <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700;800&display=swap" rel="stylesheet"> |
| | <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> |
| | </head> |
| | <body class="bg-gray-100 font-sans"> |
| | <div class="container mx-auto p-4"> |
| | <h1 class="text-3xl font-bold mb-6">Admin Approval System</h1> |
| | |
| | <?php if (isset($message)): ?> |
| | <div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded mb-4"> |
| | <?php echo $message; ?> |
| | </div> |
| | <?php endif; ?> |
| | |
| | <?php if (isset($error)): ?> |
| | <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded mb-4"> |
| | <?php echo $error; ?> |
| | </div> |
| | <?php endif; ?> |
| | |
| | <!-- Statistics --> |
| | <div class="grid grid-cols-1 md:grid-cols-4 gap-4 mb-6"> |
| | <div class="bg-white p-4 rounded shadow"> |
| | <h3 class="font-bold">Pending Agents</h3> |
| | <p class="text-2xl"><?php echo count($pendingAgents); ?></p> |
| | </div> |
| | <div class="bg-white p-4 rounded shadow"> |
| | <h3 class="font-bold">Pending Ads</h3> |
| | <p class="text-2xl"><?php echo count($pendingAds); ?></p> |
| | </div> |
| | <div class="bg-white p-4 rounded shadow"> |
| | <h3 class="font-bold">Total Revenue</h3> |
| | <p class="text-2xl">KES <?php echo number_format($adStats['total_revenue'], 2); ?></p> |
| | </div> |
| | <div class="bg-white p-4 rounded shadow"> |
| | <h3 class="font-bold">Pending Revenue</h3> |
| | <p class="text-2xl">KES <?php echo number_format($adStats['pending_revenue'], 2); ?></p> |
| | </div> |
| | </div> |
| | |
| | <!-- Pending Advertisements --> |
| | <div class="bg-white rounded shadow mb-6"> |
| | <div class="p-4 border-b"> |
| | <h2 class="text-xl font-bold">Pending Advertisements</h2> |
| | </div> |
| | <div class="p-4"> |
| | <?php if (empty($pendingAds)): ?> |
| | <p class="text-gray-500">No pending advertisements</p> |
| | <?php else: ?> |
| | <?php foreach ($pendingAds as $ad): ?> |
| | <div class="border rounded p-4 mb-4"> |
| | <div class="flex justify-between items-start"> |
| | <div> |
| | <h3 class="font-bold"><?php echo htmlspecialchars($ad['title']); ?></h3> |
| | <p class="text-gray-600">By: <?php echo htmlspecialchars($ad['advertiser_name']); ?></p> |
| | <p class="text-gray-600">Budget: KES <?php echo number_format($ad['budget'], 2); ?></p> |
| | <p class="text-gray-600">Platform: <?php echo ucfirst($ad['target_platform']); ?></p> |
| | <?php if ($ad['agent_name']): ?> |
| | <p class="text-gray-600">Agent: <?php echo htmlspecialchars($ad['agent_name']); ?></p> |
| | <?php endif; ?> |
| | </div> |
| | <div class="flex gap-2"> |
| | <button onclick="reviewAd(<?php echo $ad['id']; ?>, 'approved')" |
| | class="bg-green-500 text-white px-3 py-1 rounded">Approve</button> |
| | <button onclick="reviewAd(<?php echo $ad['id']; ?>, 'rejected')" |
| | class="bg-red-500 text-white px-3 py-1 rounded">Reject</button> |
| | </div> |
| | </div> |
| | </div> |
| | <?php endforeach; ?> |
| | <?php endif; ?> |
| | </div> |
| | </div> |
| | |
| | <!-- Pending Agents --> |
| | <div class="bg-white rounded shadow"> |
| | <div class="p-4 border-b"> |
| | <h2 class="text-xl font-bold">Pending Agent Applications</h2> |
| | </div> |
| | <div class="p-4"> |
| | <?php if (empty($pendingAgents)): ?> |
| | <p class="text-gray-500">No pending agent applications</p> |
| | <?php else: ?> |
| | <?php foreach ($pendingAgents as $agent): ?> |
| | <div class="border rounded p-4 mb-4"> |
| | <div class="flex justify-between items-start"> |
| | <div> |
| | <h3 class="font-bold"><?php echo htmlspecialchars($agent['full_name']); ?></h3> |
| | <p class="text-gray-600">Phone: <?php echo htmlspecialchars($agent['phone']); ?></p> |
| | <p class="text-gray-600">Location: <?php echo htmlspecialchars($agent['location']); ?></p> |
| | <p class="text-gray-600">Sponsor: <?php echo htmlspecialchars($agent['username']); ?></p> |
| | </div> |
| | <div class="flex gap-2"> |
| | <button onclick="reviewAgent(<?php echo $agent['id']; ?>, 'approved')" |
| | class="bg-green-500 text-white px-3 py-1 rounded">Approve</button> |
| | <button onclick="reviewAgent(<?php echo $agent['id']; ?>, 'rejected')" |
| | class="bg-red-500 text-white px-3 py-1 rounded">Reject</button> |
| | </div> |
| | </div> |
| | </div> |
| | <?php endforeach; ?> |
| | <?php endif; ?> |
| | </div> |
| | </div> |
| | </div> |
| | |
| | <!-- Review Forms --> |
| | <form id="agent-review-form" method="POST" class="hidden"> |
| | <input type="hidden" name="action" value="review_agent"> |
| | <input type="hidden" id="agent-id" name="agent_id"> |
| | <input type="hidden" id="agent-status" name="status"> |
| | <textarea id="agent-notes" name="notes" placeholder="Review notes..."></textarea> |
| | </form> |
| | |
| | <form id="ad-review-form" method="POST" class="hidden"> |
| | <input type="hidden" name="action" value="review_advertisement"> |
| | <input type="hidden" id="ad-id" name="advertisement_id"> |
| | <input type="hidden" id="ad-status" name="status"> |
| | <textarea id="ad-notes" name="notes" placeholder="Review notes..."></textarea> |
| | </form> |
| | |
| | <script> |
| | function reviewAgent(agentId, status) { |
| | if (confirm(`Are you sure you want to ${status} this agent application?`)) { |
| | document.getElementById('agent-id').value = agentId; |
| | document.getElementById('agent-status').value = status; |
| | document.getElementById('agent-review-form').submit(); |
| | } |
| | } |
| |
|
| | function reviewAd(adId, status) { |
| | if (confirm(`Are you sure you want to ${status} this advertisement?`)) { |
| | document.getElementById('ad-id').value = adId; |
| | document.getElementById('ad-status').value = status; |
| | document.getElementById('ad-review-form').submit(); |
| | } |
| | } |
| |
|
| | feather.replace(); |
| | </script> |
| | </body> |
| | </html> |