203 lines
11 KiB
PHP
203 lines
11 KiB
PHP
<?php
|
|
session_start();
|
|
require_once __DIR__ . '/../db/config.php';
|
|
|
|
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
|
|
header('Location: ' . APP_URL . 'login.php');
|
|
exit;
|
|
}
|
|
|
|
$pdo = db();
|
|
|
|
// Handle Actions
|
|
if (isset($_GET['action'])) {
|
|
$id = $_GET['id'];
|
|
$action = $_GET['action'];
|
|
|
|
if ($action === 'approve_car') {
|
|
$pdo->prepare("UPDATE cars SET status = 'approved' WHERE id = ?")->execute([$id]);
|
|
} elseif ($action === 'reject_car') {
|
|
$pdo->prepare("UPDATE cars SET status = 'rejected' WHERE id = ?")->execute([$id]);
|
|
} elseif ($action === 'delete_car') {
|
|
$pdo->prepare("DELETE FROM cars WHERE id = ?")->execute([$id]);
|
|
} elseif ($action === 'mark_sold') {
|
|
$pdo->prepare("UPDATE cars SET status = 'sold' WHERE id = ?")->execute([$id]);
|
|
} elseif ($action === 'mark_available') {
|
|
$pdo->prepare("UPDATE cars SET status = 'approved' WHERE id = ?")->execute([$id]);
|
|
} elseif ($action === 'toggle_hot') {
|
|
$stmt = $pdo->prepare("SELECT badge FROM cars WHERE id = ?");
|
|
$stmt->execute([$id]);
|
|
$current = $stmt->fetchColumn();
|
|
$new = ($current === 'Hot Deal') ? NULL : 'Hot Deal';
|
|
$pdo->prepare("UPDATE cars SET badge = ? WHERE id = ?")->execute([$new, $id]);
|
|
} elseif ($action === 'delete_user') {
|
|
$pdo->prepare("DELETE FROM users WHERE id = ? AND role != 'admin'")->execute([$id]);
|
|
} elseif ($action === 'read_notif') {
|
|
$pdo->prepare("UPDATE notifications SET status = 'read' WHERE id = ?")->execute([$id]);
|
|
}
|
|
header('Location: dashboard.php?tab=' . ($_GET['tab'] ?? 'overview'));
|
|
exit;
|
|
}
|
|
|
|
$tab = $_GET['tab'] ?? 'overview';
|
|
|
|
// Stats
|
|
$stats = [
|
|
'total_cars' => $pdo->query("SELECT COUNT(*) FROM cars")->fetchColumn(),
|
|
'pending_cars' => $pdo->query("SELECT COUNT(*) FROM cars WHERE status = 'pending'")->fetchColumn(),
|
|
'total_users' => $pdo->query("SELECT COUNT(*) FROM users")->fetchColumn(),
|
|
'total_sales' => $pdo->query("SELECT SUM(total_amount) FROM purchases")->fetchColumn() ?: 0,
|
|
];
|
|
|
|
// Data fetching
|
|
$pending_cars = $pdo->query("SELECT c.*, u.name as owner_name FROM cars c LEFT JOIN users u ON c.user_id = u.id WHERE c.status = 'pending' ORDER BY c.created_at DESC")->fetchAll();
|
|
$all_cars = $pdo->query("SELECT c.*, u.name as owner_name FROM cars c LEFT JOIN users u ON c.user_id = u.id ORDER BY c.created_at DESC")->fetchAll();
|
|
$all_users = $pdo->query("SELECT * FROM users ORDER BY created_at DESC")->fetchAll();
|
|
$notifications = $pdo->query("SELECT * FROM notifications ORDER BY created_at DESC LIMIT 20")->fetchAll();
|
|
$recent_purchases = $pdo->query("SELECT p.*, u.name, c.title FROM purchases p JOIN users u ON p.buyer_id = u.id JOIN cars c ON p.car_id = c.id ORDER BY p.created_at DESC LIMIT 10")->fetchAll();
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Admin Panel - AFG CARS</title>
|
|
<link href="<?php echo APP_URL; ?>assets/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
|
<link rel="stylesheet" href="<?php echo APP_URL; ?>assets/bootstrap/css/bootstrap-icons.css">
|
|
<style>
|
|
:root { --sidebar-width: 260px; --primary: #2563eb; }
|
|
body { background: #f8fafc; font-family: sans-serif; }
|
|
.sidebar { width: var(--sidebar-width); background: #0f172a; min-height: 100vh; position: fixed; left: 0; top: 0; padding: 20px; color: white; z-index: 1000; }
|
|
.main-content { margin-left: var(--sidebar-width); padding: 40px; }
|
|
.nav-link { color: #94a3b8; border-radius: 8px; margin-bottom: 5px; padding: 12px 15px; transition: all 0.3s; border: none; background: none; width: 100%; text-align: left; text-decoration: none; display: block; }
|
|
.nav-link:hover, .nav-link.active { background: #1e293b; color: white; }
|
|
.nav-link.active { background: var(--primary); color: white; }
|
|
.stat-card { background: white; border: none; border-radius: 16px; padding: 25px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
|
|
.table-card { background: white; border: none; border-radius: 16px; overflow: hidden; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<div class="sidebar">
|
|
<h4 class="fw-bold mb-5 text-white">AFG CARS</h4>
|
|
<nav class="nav flex-column">
|
|
<a class="nav-link <?php echo $tab === 'overview' ? 'active' : ''; ?>" href="?tab=overview">Overview</a>
|
|
<a class="nav-link <?php echo $tab === 'approvals' ? 'active' : ''; ?>" href="?tab=approvals">
|
|
Approvals <?php if ($stats['pending_cars'] > 0): ?>(<?php echo $stats['pending_cars']; ?>)<?php endif; ?>
|
|
</a>
|
|
<a class="nav-link <?php echo $tab === 'inventory' ? 'active' : ''; ?>" href="?tab=inventory">Inventory</a>
|
|
<a class="nav-link <?php echo $tab === 'users' ? 'active' : ''; ?>" href="?tab=users">Users</a>
|
|
<a class="nav-link <?php echo $tab === 'sales' ? 'active' : ''; ?>" href="?tab=sales">Sales</a>
|
|
<a class="nav-link <?php echo $tab === 'notifications' ? 'active' : ''; ?>" href="?tab=notifications">Notifications</a>
|
|
<hr class="my-4 opacity-25">
|
|
<a class="nav-link text-danger" href="<?php echo APP_URL; ?>logout.php">Logout</a>
|
|
</nav>
|
|
</div>
|
|
|
|
<div class="main-content">
|
|
<div class="d-flex justify-content-between align-items-center mb-5">
|
|
<div>
|
|
<h2 class="fw-bold"><?php echo ucfirst($tab); ?></h2>
|
|
<p class="text-muted mb-0">Marketplace Administration (Offline Mode)</p>
|
|
</div>
|
|
<?php if ($tab === 'inventory'): ?>
|
|
<a href="add-car.php" class="btn btn-primary px-4 py-2 rounded-3">Add New Car</a>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<?php if ($tab === 'overview'): ?>
|
|
<div class="row g-4 mb-5">
|
|
<div class="col-md-3"><div class="stat-card"><div class="text-muted small mb-1">Inventory</div><h2 class="fw-bold mb-0"><?php echo $stats['total_cars']; ?></h2></div></div>
|
|
<div class="col-md-3"><div class="stat-card"><div class="text-muted small mb-1">Pending</div><h2 class="fw-bold mb-0 text-warning"><?php echo $stats['pending_cars']; ?></h2></div></div>
|
|
<div class="col-md-3"><div class="stat-card"><div class="text-muted small mb-1">Users</div><h2 class="fw-bold mb-0"><?php echo $stats['total_users']; ?></h2></div></div>
|
|
<div class="col-md-3"><div class="stat-card"><div class="text-muted small mb-1">Revenue</div><h2 class="fw-bold mb-0 text-success">$<?php echo number_format($stats['total_sales']); ?></h2></div></div>
|
|
</div>
|
|
<?php elseif ($tab === 'approvals'): ?>
|
|
<div class="table-card">
|
|
<div class="table-responsive">
|
|
<table class="table mb-0 align-middle">
|
|
<thead class="bg-light"><tr><th>Car</th><th>Owner</th><th>Price</th><th>Action</th></tr></thead>
|
|
<tbody>
|
|
<?php foreach ($pending_cars as $c): ?>
|
|
<tr>
|
|
<td><div class="fw-bold"><?php echo $c['title']; ?></div></td>
|
|
<td><?php echo $c['owner_name'] ?? 'Admin'; ?></td>
|
|
<td>$<?php echo number_format($c['price']); ?></td>
|
|
<td>
|
|
<a href="?tab=approvals&action=approve_car&id=<?php echo $c['id']; ?>" class="btn btn-sm btn-success px-3">Approve</a>
|
|
<a href="?tab=approvals&action=reject_car&id=<?php echo $c['id']; ?>" class="btn btn-sm btn-danger px-3">Reject</a>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<?php elseif ($tab === 'inventory'): ?>
|
|
<div class="table-card">
|
|
<div class="table-responsive">
|
|
<table class="table mb-0 align-middle">
|
|
<thead class="bg-light"><tr><th>Car</th><th>Status</th><th>Badge</th><th>Action</th></tr></thead>
|
|
<tbody>
|
|
<?php foreach ($all_cars as $c): ?>
|
|
<tr>
|
|
<td><div class="fw-bold"><?php echo $c['title']; ?></div></td>
|
|
<td><span class="badge <?php echo $c['status'] === 'sold' ? 'bg-danger' : 'bg-success'; ?>"><?php echo strtoupper($c['status']); ?></span></td>
|
|
<td><?php echo $c['badge'] ?: '-'; ?></td>
|
|
<td>
|
|
<a href="?tab=inventory&action=toggle_hot&id=<?php echo $c['id']; ?>" class="btn btn-sm btn-outline-primary">Hot</a>
|
|
<a href="?tab=inventory&action=delete_car&id=<?php echo $c['id']; ?>" class="btn btn-sm btn-outline-danger" onclick="return confirm('Delete?')">Delete</a>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<?php elseif ($tab === 'users'): ?>
|
|
<div class="table-card">
|
|
<div class="table-responsive">
|
|
<table class="table mb-0 align-middle">
|
|
<thead class="bg-light"><tr><th>Name</th><th>Email</th><th>Role</th><th>Action</th></tr></thead>
|
|
<tbody>
|
|
<?php foreach ($all_users as $u): ?>
|
|
<tr>
|
|
<td><?php echo htmlspecialchars($u['name']); ?></td>
|
|
<td><?php echo $u['email']; ?></td>
|
|
<td><?php echo strtoupper($u['role']); ?></td>
|
|
<td>
|
|
<?php if ($u['role'] !== 'admin'): ?>
|
|
<a href="?tab=users&action=delete_user&id=<?php echo $u['id']; ?>" class="btn btn-sm btn-outline-danger" onclick="return confirm('Delete?')">Delete</a>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<?php elseif ($tab === 'sales'): ?>
|
|
<div class="table-card">
|
|
<div class="table-responsive">
|
|
<table class="table mb-0 align-middle">
|
|
<thead class="bg-light"><tr><th>Customer</th><th>Car</th><th>Amount</th><th>Date</th></tr></thead>
|
|
<tbody>
|
|
<?php foreach ($recent_purchases as $p): ?>
|
|
<tr>
|
|
<td><?php echo htmlspecialchars($p['name']); ?></td>
|
|
<td><?php echo htmlspecialchars($p['title']); ?></td>
|
|
<td class="fw-bold">$<?php echo number_format($p['total_amount']); ?></td>
|
|
<td><?php echo date('Y-m-d', strtotime($p['created_at'])); ?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
</div>
|
|
|
|
<script src="<?php echo APP_URL; ?>assets/bootstrap/js/bootstrap.bundle.min.js"></script>
|
|
</body>
|
|
</html>
|