This commit is contained in:
Flatlogic Bot 2026-02-13 08:34:16 +00:00
parent 052b28ea67
commit 4ad8ad11c8
22 changed files with 2230 additions and 466 deletions

95
README.md Normal file
View File

@ -0,0 +1,95 @@
# AFG CARS - Premium Car Marketplace Afghanistan
Welcome to **AFG CARS**, an enterprise-level automotive marketplace platform specifically designed for the Afghanistan market (2026 Edition). This application provides a seamless experience for buying, selling, and managing vehicle listings with a modern, high-end UI and robust administrative features.
---
## 🚀 Key Features
### 1. Advanced Marketplace
* **Verified Listings:** High-quality vehicle listings with detailed specifications.
* **Smart Search:** Filter by Brand, Model, Year, Location (Kabul, Herat, etc.), and Price range.
* **Badging System:** Visual indicators for "Hot Deals" and "SOLD" status.
### 2. Role-Based Access Control (RBAC)
* **Guests:** Browse cars, search the market, and view company information.
* **Registered Users:** List their own cars for sale, manage favorites, track purchases, and submit reviews.
* **Administrators:** Full control over listing approvals, user management, sales tracking, and system notifications.
### 3. User & Admin Dashboards
* **User Hub:** Track pending/approved listings, manage personal car ads, and view purchase history.
* **Admin Command Center:** Review user-submitted cars for approval, view total revenue, manage users, and receive real-time alerts.
### 4. Enterprise-Grade Systems
* **Review & Rating System:** Users can rate vehicles and leave feedback for sold items.
* **Simulated Purchase System:** Integrated "Buy Now" flow featuring major Afghanistan banks (DAB, Azizi, AIB, etc.).
* **Contact & Mail Integration:** Functional contact forms using the platform's internal mail service.
### 5. Physical Presence
* Detailed information about physical showrooms in **Kabul, Herat, Mazar-i-Sharif, and Kandahar**.
---
## 🛠 Tech Stack
* **Language:** PHP 8.x (Vanilla)
* **Database:** MariaDB / MySQL (via PDO)
* **Frontend:** Bootstrap 5, Inter Typography, Bi-Icons
* **Styling:** Custom CSS with modern glassmorphism and soft gradient effects
* **AI Integration:** Local AI Proxy for advanced processing
* **Mail Service:** PHPMailer-based `MailService`
---
## ⚙️ Installation & How to Run
### Prerequisites
* A web server (Apache/Nginx) with PHP 8.x support.
* MariaDB or MySQL database server.
### Setup Steps
1. **Clone the Repository:**
Place the project files into your web server's document root (e.g., `/var/www/html` or `htdocs`).
2. **Database Configuration:**
* Open `db/config.php` and update the `DB_HOST`, `DB_NAME`, `DB_USER`, and `DB_PASS` constants to match your local environment.
* Run the database initialization script by visiting `http://your-domain/db/setup.php` in your browser. This will create the necessary tables and seed the initial admin user.
* Alternatively, run `php db/run_migrations.php` from the terminal.
3. **Environment Variables:**
Ensure your `.env` file (if applicable) contains the necessary mail and AI configuration as described in the system documentation.
4. **Access the Site:**
Open your browser and navigate to the project root (e.g., `http://localhost`).
---
## 🔐 Default Credentials (Enterprise Edition)
| Role | Email | Password |
| :--- | :--- | :--- |
| **Admin** | `admin@gmail.com` | `12345678` |
---
## 📁 Project Structure
* `index.php` - Enterprise landing page with "Hot Deals" and Hero section.
* `cars.php` - Marketplace search and listing page.
* `admin/` - Administrative dashboard and management scripts.
* `user/` - Registered user dashboard and car submission area.
* `db/` - Database configuration, setup scripts, and migrations.
* `includes/` - Reusable UI components (Header, Footer).
* `assets/` - CSS, JS, and image assets.
* `mail/` - Integrated mail service logic.
---
## 📄 License & Notes
This project is built for the **Flatlogic LAMP VM**.
* **Reminder:** Always click **Save** in the Flatlogic editor to sync changes to the platform.
* **SEO:** Every page is optimized with unique meta titles and descriptions for maximum visibility.
---
*Last Updated: February 13, 2026*

43
about.php Normal file
View File

@ -0,0 +1,43 @@
<?php
$page_title = "About Us - AFG CARS";
include 'includes/header.php';
?>
<div class="container py-5">
<div class="row align-items-center mb-5">
<div class="col-lg-6">
<h1 class="display-4 fw-bold mb-4">Driving the Future of Afghanistan</h1>
<p class="lead text-muted">AFG CARS is the premier destination for buying and selling vehicles in Afghanistan. Founded in 2026, we aim to modernize the automotive market through transparency, technology, and trust.</p>
<p>Our platform connects thousands of buyers and sellers across Kabul, Herat, Mazar-i-Sharif, and beyond. Whether you're looking for a luxury SUV or a reliable daily driver, we have the perfect match for you.</p>
</div>
<div class="col-lg-6">
<img src="https://images.pexels.com/photos/3183150/pexels-photo-3183150.jpeg?auto=compress&cs=tinysrgb&w=800" alt="About Us" class="img-fluid rounded-4 shadow-lg">
</div>
</div>
<div class="row g-4 mb-5">
<div class="col-md-4">
<div class="p-4 bg-white rounded-4 shadow-sm h-100">
<i class="bi bi-shield-check text-primary fs-1 mb-3"></i>
<h3>Verified Listings</h3>
<p class="text-muted">Every car submitted by users goes through a strict approval process by our expert team.</p>
</div>
</div>
<div class="col-md-4">
<div class="p-4 bg-white rounded-4 shadow-sm h-100">
<i class="bi bi-cash-stack text-primary fs-1 mb-3"></i>
<h3>Best Prices</h3>
<p class="text-muted">We ensure fair market value for both buyers and sellers with our data-driven pricing tools.</p>
</div>
</div>
<div class="col-md-4">
<div class="p-4 bg-white rounded-4 shadow-sm h-100">
<i class="bi bi-geo-alt text-primary fs-1 mb-3"></i>
<h3>National Reach</h3>
<p class="text-muted">With physical locations and representatives in all major Afghan provinces.</p>
</div>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>

140
admin/add-car.php Normal file
View File

@ -0,0 +1,140 @@
<?php
session_start();
require_once __DIR__ . '/../db/config.php';
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
header('Location: /login.php');
exit;
}
$message = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = $_POST['title'] ?? '';
$brand = $_POST['brand'] ?? '';
$model = $_POST['model'] ?? '';
$year = $_POST['year'] ?? '';
$price = $_POST['price'] ?? '';
$location = $_POST['location'] ?? '';
$fuel_type = $_POST['fuel_type'] ?? '';
$transmission = $_POST['transmission'] ?? '';
$mileage = $_POST['mileage'] ?? '';
$description = $_POST['description'] ?? '';
$image_url = $_POST['image_url'] ?? '';
$badge = $_POST['badge'] ?? NULL;
$pdo = db();
$stmt = $pdo->prepare("INSERT INTO cars (owner_id, title, brand, model, year, price, location, fuel_type, transmission, mileage, description, image_url, approval_status, badge) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'approved', ?)");
if ($stmt->execute([$_SESSION['user_id'], $title, $brand, $model, $year, $price, $location, $fuel_type, $transmission, $mileage, $description, $image_url, $badge])) {
$message = "success";
} else {
$message = "error";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add New Car - Admin</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
<style>
body { background: #f1f5f9; font-family: 'Inter', sans-serif; }
.form-card { background: white; border: none; border-radius: 20px; padding: 40px; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05); }
</style>
</head>
<body class="py-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="d-flex justify-content-between align-items-center mb-4">
<a href="dashboard.php" class="btn btn-light border rounded-3"><i class="bi bi-arrow-left me-2"></i>Back to Dashboard</a>
<h3 class="fw-bold mb-0">Add New Vehicle</h3>
</div>
<?php if ($message === 'success'): ?>
<div class="alert alert-success rounded-4 p-3 mb-4"><i class="bi bi-check-circle me-2"></i>Car added successfully!</div>
<?php endif; ?>
<div class="form-card">
<form method="POST">
<div class="row g-3">
<div class="col-md-12">
<label class="form-label fw-bold small">Listing Title</label>
<input type="text" name="title" class="form-control py-2" placeholder="e.g. Toyota Corolla 2024 Hybrid" required>
</div>
<div class="col-md-4">
<label class="form-label fw-bold small">Brand</label>
<input type="text" name="brand" class="form-control py-2" placeholder="Toyota" required>
</div>
<div class="col-md-4">
<label class="form-label fw-bold small">Model</label>
<input type="text" name="model" class="form-control py-2" placeholder="Corolla" required>
</div>
<div class="col-md-4">
<label class="form-label fw-bold small">Year</label>
<input type="number" name="year" class="form-control py-2" placeholder="2024" required>
</div>
<div class="col-md-6">
<label class="form-label fw-bold small">Price ($)</label>
<input type="number" name="price" class="form-control py-2" placeholder="25000" required>
</div>
<div class="col-md-6">
<label class="form-label fw-bold small">Location</label>
<select name="location" class="form-select py-2">
<option>Kabul</option>
<option>Herat</option>
<option>Mazar-i-Sharif</option>
<option>Kandahar</option>
<option>Jalalabad</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label fw-bold small">Fuel Type</label>
<select name="fuel_type" class="form-select py-2">
<option>Petrol</option>
<option>Diesel</option>
<option>Hybrid</option>
<option>Electric</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label fw-bold small">Transmission</label>
<select name="transmission" class="form-select py-2">
<option>Automatic</option>
<option>Manual</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label fw-bold small">Badge</label>
<select name="badge" class="form-select py-2">
<option value="">None</option>
<option value="Hot Deal">Hot Deal</option>
<option value="New Arrival">New Arrival</option>
<option value="Premium">Premium</option>
</select>
</div>
<div class="col-md-12">
<label class="form-label fw-bold small">Image URL</label>
<input type="url" name="image_url" class="form-control py-2" placeholder="https://..." required>
</div>
<div class="col-md-12">
<label class="form-label fw-bold small">Description</label>
<textarea name="description" class="form-control" rows="4"></textarea>
</div>
<div class="col-md-12 mt-4">
<button type="submit" class="btn btn-primary w-100 py-3 fw-bold rounded-4 shadow">
<i class="bi bi-cloud-upload me-2"></i>Publish Listing
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>

297
admin/dashboard.php Normal file
View File

@ -0,0 +1,297 @@
<?php
session_start();
require_once __DIR__ . '/../db/config.php';
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
header('Location: /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 approval_status = 'approved' WHERE id = ?")->execute([$id]);
} elseif ($action === 'reject_car') {
$pdo->prepare("UPDATE cars SET approval_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 = 'available' 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 is_read = 1 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 approval_status = 'pending'")->fetchColumn(),
'total_users' => $pdo->query("SELECT COUNT(*) FROM users")->fetchColumn(),
'total_sales' => $pdo->query("SELECT SUM(amount) FROM purchases")->fetchColumn() ?: 0,
];
// Data fetching
$pending_cars = $pdo->query("SELECT c.*, u.full_name as owner_name FROM cars c LEFT JOIN users u ON c.owner_id = u.id WHERE c.approval_status = 'pending' ORDER BY c.created_at DESC")->fetchAll();
$all_cars = $pdo->query("SELECT c.*, u.full_name as owner_name FROM cars c LEFT JOIN users u ON c.owner_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.full_name, c.title FROM purchases p JOIN users u ON p.user_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="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
<style>
:root { --sidebar-width: 260px; --primary: #2563eb; }
body { background: #f8fafc; font-family: 'Inter', 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; }
.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); }
.badge-pending { background: #fef3c7; color: #92400e; }
.badge-approved { background: #dcfce7; color: #166534; }
.badge-sold { background: #fee2e2; color: #991b1b; }
</style>
</head>
<body>
<div class="sidebar">
<h4 class="fw-bold mb-5 text-white"><i class="bi bi-lightning-charge-fill text-primary me-2"></i>AFG CARS</h4>
<nav class="nav flex-column">
<a class="nav-link <?php echo $tab === 'overview' ? 'active' : ''; ?>" href="?tab=overview"><i class="bi bi-grid-1x2 me-3"></i>Overview</a>
<a class="nav-link <?php echo $tab === 'approvals' ? 'active' : ''; ?>" href="?tab=approvals">
<i class="bi bi-patch-check me-3"></i>Approvals
<?php if ($stats['pending_cars'] > 0): ?>
<span class="badge bg-danger ms-auto"><?php echo $stats['pending_cars']; ?></span>
<?php endif; ?>
</a>
<a class="nav-link <?php echo $tab === 'inventory' ? 'active' : ''; ?>" href="?tab=inventory"><i class="bi bi-car-front me-3"></i>Inventory</a>
<a class="nav-link <?php echo $tab === 'users' ? 'active' : ''; ?>" href="?tab=users"><i class="bi bi-people me-3"></i>Users</a>
<a class="nav-link <?php echo $tab === 'sales' ? 'active' : ''; ?>" href="?tab=sales"><i class="bi bi-cart-check me-3"></i>Sales</a>
<a class="nav-link <?php echo $tab === 'notifications' ? 'active' : ''; ?>" href="?tab=notifications"><i class="bi bi-bell me-3"></i>Notifications</a>
<hr class="my-4 opacity-25">
<a class="nav-link text-danger" href="/logout.php"><i class="bi bi-box-arrow-left me-3"></i>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">Manage your enterprise car marketplace.</p>
</div>
<?php if ($tab === 'inventory'): ?>
<a href="add-car.php" class="btn btn-primary px-4 py-2 rounded-3"><i class="bi bi-plus-lg me-2"></i>Add 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 fw-medium mb-1">Total 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 fw-medium mb-1">Pending Approvals</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 fw-medium mb-1">Registered 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 fw-medium mb-1">Total Revenue</div>
<h2 class="fw-bold mb-0 text-success">$<?php echo number_format($stats['total_sales']); ?></h2>
</div>
</div>
</div>
<div class="row g-4">
<div class="col-lg-8">
<div class="table-card">
<div class="p-4 border-bottom d-flex justify-content-between align-items-center">
<h5 class="fw-bold mb-0">Recent Sales</h5>
<a href="?tab=sales" class="small text-decoration-none">View All</a>
</div>
<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>Bank</th></tr>
</thead>
<tbody>
<?php foreach ($recent_purchases as $p): ?>
<tr>
<td><div class="fw-bold"><?php echo htmlspecialchars($p['full_name']); ?></div></td>
<td><?php echo htmlspecialchars($p['title']); ?></td>
<td class="fw-bold">$<?php echo number_format($p['amount']); ?></td>
<td><span class="small text-muted"><?php echo $p['bank_name']; ?></span></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="table-card">
<div class="p-4 border-bottom"><h5 class="fw-bold mb-0">Quick Notifications</h5></div>
<div class="p-4">
<?php foreach (array_slice($notifications, 0, 5) as $n): ?>
<div class="d-flex gap-3 mb-4 <?php echo $n['is_read'] ? 'opacity-50' : ''; ?>">
<div class="bg-light p-2 rounded-3 h-100"><i class="bi bi-info-circle text-primary"></i></div>
<div>
<p class="small mb-0"><?php echo htmlspecialchars($n['message']); ?></p>
<span class="smaller text-muted" style="font-size: 0.7rem;"><?php echo date('H:i', strtotime($n['created_at'])); ?></span>
</div>
</div>
<?php endforeach; ?>
</div>
</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="d-flex align-items-center gap-3">
<img src="<?php echo $c['image_url']; ?>" class="rounded" style="width: 50px; height: 50px; object-fit: cover;">
<div><div class="fw-bold"><?php echo $c['title']; ?></div><div class="small text-muted"><?php echo $c['brand']; ?></div></div>
</div>
</td>
<td><?php echo $c['owner_name'] ?? 'Admin'; ?></td>
<td>$<?php echo number_format($c['price']); ?></td>
<td>
<div class="d-flex gap-2">
<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>
</div>
</td>
</tr>
<?php endforeach; if(empty($pending_cars)) echo "<tr><td colspan='4' class='text-center py-5 text-muted'>No pending approvals.</td></tr>"; ?>
</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>Views</th><th>Action</th></tr>
</thead>
<tbody>
<?php foreach ($all_cars as $c): ?>
<tr>
<td>
<div class="d-flex align-items-center gap-3">
<img src="<?php echo $c['image_url']; ?>" class="rounded" style="width: 40px; height: 40px; object-fit: cover;">
<div><div class="fw-bold small"><?php echo $c['title']; ?></div><div class="smaller text-muted" style="font-size:0.7rem">$<?php echo number_format($c['price']); ?></div></div>
</div>
</td>
<td>
<span class="badge <?php echo $c['status'] === 'sold' ? 'badge-sold' : 'badge-approved'; ?> px-2">
<?php echo strtoupper($c['status']); ?>
</span>
</td>
<td>
<?php if ($c['badge']): ?>
<span class="badge bg-warning text-dark"><?php echo $c['badge']; ?></span>
<?php else: ?>
<span class="text-muted smaller">-</span>
<?php endif; ?>
</td>
<td><small><?php echo $c['view_count']; ?></small></td>
<td>
<div class="dropdown">
<button class="btn btn-sm btn-light border dropdown-toggle" data-bs-toggle="dropdown">Action</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="?tab=inventory&action=toggle_hot&id=<?php echo $c['id']; ?>">Toggle Hot Deal</a></li>
<li><a class="dropdown-item" href="?tab=inventory&action=<?php echo $c['status'] === 'sold' ? 'mark_available' : 'mark_sold'; ?>&id=<?php echo $c['id']; ?>">
Mark as <?php echo $c['status'] === 'sold' ? 'Available' : 'Sold'; ?>
</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item text-danger" href="?tab=inventory&action=delete_car&id=<?php echo $c['id']; ?>" onclick="return confirm('Delete this car?')">Delete</a></li>
</ul>
</div>
</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>Joined</th><th>Action</th></tr>
</thead>
<tbody>
<?php foreach ($all_users as $u): ?>
<tr>
<td><div class="fw-bold"><?php echo htmlspecialchars($u['full_name']); ?></div></td>
<td><?php echo $u['email']; ?></td>
<td><span class="badge <?php echo $u['role'] === 'admin' ? 'bg-primary' : 'bg-secondary'; ?>"><?php echo strtoupper($u['role']); ?></span></td>
<td><small class="text-muted"><?php echo date('Y-m-d', strtotime($u['created_at'])); ?></small></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 this user?')">Delete</a>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<?php endif; ?>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

View File

@ -1,346 +1,76 @@
:root {
--color-bg: #ffffff;
--color-text: #1a1a1a;
--color-primary: #2563EB; /* Vibrant Blue */
--color-secondary: #000000;
--color-accent: #A3E635; /* Lime Green */
--color-surface: #f8f9fa;
--font-heading: 'Space Grotesk', sans-serif;
--font-body: 'Inter', sans-serif;
--border-width: 2px;
--shadow-hard: 5px 5px 0px #000;
--shadow-hover: 8px 8px 0px #000;
--radius-pill: 50rem;
--radius-card: 1rem;
--primary-color: #1e293b;
--accent-color: #3b82f6;
--bg-color: #f8fafc;
--surface-color: #ffffff;
--text-main: #0f172a;
--text-muted: #64748b;
--border-radius: 0.375rem;
}
body {
font-family: var(--font-body);
background-color: var(--color-bg);
color: var(--color-text);
overflow-x: hidden;
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background-color: var(--bg-color);
color: var(--text-main);
}
h1, h2, h3, h4, h5, h6, .navbar-brand {
font-family: var(--font-heading);
letter-spacing: -0.03em;
}
/* Utilities */
.text-primary { color: var(--color-primary) !important; }
.bg-black { background-color: #000 !important; }
.text-white { color: #fff !important; }
.shadow-hard { box-shadow: var(--shadow-hard); }
.border-2-black { border: var(--border-width) solid #000; }
.py-section { padding-top: 5rem; padding-bottom: 5rem; }
/* Navbar */
.navbar {
background: rgba(255, 255, 255, 0.9);
backdrop-filter: blur(10px);
border-bottom: var(--border-width) solid transparent;
transition: all 0.3s;
padding-top: 1rem;
padding-bottom: 1rem;
background-color: var(--surface-color);
border-bottom: 1px solid #e2e8f0;
}
.navbar.scrolled {
border-bottom-color: #000;
padding-top: 0.5rem;
padding-bottom: 0.5rem;
.hero-section {
padding: 100px 0;
background: linear-gradient(rgba(30, 41, 59, 0.8), rgba(30, 41, 59, 0.8)), url('https://images.pexels.com/photos/116675/pexels-photo-116675.jpeg?auto=compress&cs=tinysrgb&w=1600') center/cover;
color: white;
}
.brand-text {
font-size: 1.5rem;
font-weight: 800;
.search-container {
background: var(--surface-color);
padding: 20px;
border-radius: var(--border-radius);
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
margin-top: -50px;
}
.nav-link {
font-weight: 500;
color: var(--color-text);
margin-left: 1rem;
position: relative;
.car-card {
background: var(--surface-color);
border: 1px solid #e2e8f0;
border-radius: var(--border-radius);
transition: transform 0.2s;
overflow: hidden;
}
.nav-link:hover, .nav-link.active {
color: var(--color-primary);
.car-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
}
/* Buttons */
.btn {
.car-card img {
height: 200px;
object-fit: cover;
}
.car-price {
font-size: 1.25rem;
font-weight: 700;
font-family: var(--font-heading);
padding: 0.8rem 2rem;
border-radius: var(--radius-pill);
border: var(--border-width) solid #000;
transition: all 0.2s cubic-bezier(0.25, 1, 0.5, 1);
box-shadow: var(--shadow-hard);
}
.btn:hover {
transform: translate(-2px, -2px);
box-shadow: var(--shadow-hover);
}
.btn:active {
transform: translate(2px, 2px);
box-shadow: 0 0 0 #000;
color: var(--accent-color);
}
.btn-primary {
background-color: var(--color-primary);
border-color: #000;
color: #fff;
background-color: var(--accent-color);
border-color: var(--accent-color);
border-radius: var(--border-radius);
padding: 0.5rem 1.5rem;
}
.btn-primary:hover {
background-color: #1d4ed8;
border-color: #000;
color: #fff;
background-color: #2563eb;
border-color: #2563eb;
}
.btn-outline-dark {
background-color: #fff;
color: #000;
}
.btn-cta {
background-color: var(--color-accent);
color: #000;
}
.btn-cta:hover {
background-color: #8cc629;
color: #000;
}
/* Hero Section */
.hero-section {
min-height: 100vh;
padding-top: 80px;
}
.background-blob {
position: absolute;
border-radius: 50%;
filter: blur(80px);
opacity: 0.6;
z-index: 1;
}
.blob-1 {
top: -10%;
right: -10%;
width: 600px;
height: 600px;
background: radial-gradient(circle, var(--color-accent), transparent);
}
.blob-2 {
bottom: 10%;
left: -10%;
width: 500px;
height: 500px;
background: radial-gradient(circle, var(--color-primary), transparent);
}
.highlight-text {
background: linear-gradient(120deg, transparent 0%, transparent 40%, var(--color-accent) 40%, var(--color-accent) 100%);
background-repeat: no-repeat;
background-size: 100% 40%;
background-position: 0 88%;
padding: 0 5px;
}
.dot { color: var(--color-primary); }
.badge-pill {
display: inline-block;
padding: 0.5rem 1rem;
border: 2px solid #000;
border-radius: 50px;
font-weight: 700;
background: #fff;
box-shadow: 4px 4px 0 #000;
font-family: var(--font-heading);
font-size: 0.9rem;
}
/* Marquee */
.marquee-container {
overflow: hidden;
white-space: nowrap;
border-top: 2px solid #000;
border-bottom: 2px solid #000;
}
.rotate-divider {
transform: rotate(-2deg) scale(1.05);
z-index: 10;
position: relative;
margin-top: -50px;
margin-bottom: 30px;
}
.marquee-content {
display: inline-block;
animation: marquee 20s linear infinite;
font-family: var(--font-heading);
font-weight: 700;
font-size: 1.5rem;
letter-spacing: 2px;
}
@keyframes marquee {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
/* Portfolio Cards */
.project-card {
border: 2px solid #000;
border-radius: var(--radius-card);
overflow: hidden;
background: #fff;
transition: transform 0.3s ease;
box-shadow: var(--shadow-hard);
height: 100%;
display: flex;
flex-direction: column;
}
.project-card:hover {
transform: translateY(-10px);
box-shadow: 8px 8px 0 #000;
}
.card-img-holder {
height: 250px;
display: flex;
align-items: center;
justify-content: center;
border-bottom: 2px solid #000;
position: relative;
font-size: 4rem;
}
.placeholder-art {
transition: transform 0.3s ease;
}
.project-card:hover .placeholder-art {
transform: scale(1.2) rotate(10deg);
}
.bg-soft-blue { background-color: #e0f2fe; }
.bg-soft-green { background-color: #dcfce7; }
.bg-soft-purple { background-color: #f3e8ff; }
.bg-soft-yellow { background-color: #fef9c3; }
.category-tag {
position: absolute;
top: 15px;
right: 15px;
background: #000;
color: #fff;
padding: 5px 12px;
border-radius: 20px;
font-size: 0.75rem;
font-weight: 700;
}
.card-body { padding: 1.5rem; }
.link-arrow {
text-decoration: none;
color: #000;
font-weight: 700;
display: inline-flex;
align-items: center;
margin-top: auto;
}
.link-arrow i { transition: transform 0.2s; margin-left: 5px; }
.link-arrow:hover i { transform: translateX(5px); }
/* About */
.about-image-stack {
position: relative;
height: 400px;
width: 100%;
}
.stack-card {
position: absolute;
width: 80%;
height: 100%;
border-radius: var(--radius-card);
border: 2px solid #000;
box-shadow: var(--shadow-hard);
left: 10%;
transform: rotate(-3deg);
background-size: cover;
}
/* Forms */
.form-control {
border: 2px solid #000;
border-radius: 0.5rem;
padding: 1rem;
font-weight: 500;
background: #f8f9fa;
}
.form-control:focus {
box-shadow: 4px 4px 0 var(--color-primary);
border-color: #000;
background: #fff;
}
/* Animations */
.animate-up {
opacity: 0;
transform: translateY(30px);
animation: fadeUp 0.8s ease forwards;
}
.delay-100 { animation-delay: 0.1s; }
.delay-200 { animation-delay: 0.2s; }
@keyframes fadeUp {
to {
opacity: 1;
transform: translateY(0);
}
}
/* Social */
.social-links a {
transition: transform 0.2s;
display: inline-block;
}
.social-links a:hover {
transform: scale(1.2) rotate(10deg);
color: var(--color-accent) !important;
}
/* Responsive */
@media (max-width: 991px) {
.rotate-divider {
transform: rotate(0);
margin-top: 0;
margin-bottom: 2rem;
}
.hero-section {
padding-top: 120px;
text-align: center;
min-height: auto;
padding-bottom: 100px;
}
.display-1 { font-size: 3.5rem; }
.blob-1 { width: 300px; height: 300px; right: -20%; }
.blob-2 { width: 300px; height: 300px; left: -20%; }
}
.footer {
background-color: var(--primary-color);
color: #94a3b8;
padding: 60px 0 30px;
}

307
car-details.php Normal file
View File

@ -0,0 +1,307 @@
<?php
require_once 'db/config.php';
session_start();
$pdo = db();
$id = $_GET['id'] ?? 0;
$user_id = $_SESSION['user_id'] ?? null;
// Increment view count
$pdo->prepare("UPDATE cars SET view_count = view_count + 1 WHERE id = ?")->execute([$id]);
$stmt = $pdo->prepare("SELECT * FROM cars WHERE id = ?");
$stmt->execute([$id]);
$car = $stmt->fetch();
if (!$car) {
header('Location: cars.php');
exit;
}
// Check approval status: only owner or admin can see pending/rejected
$is_admin = isset($_SESSION['role']) && $_SESSION['role'] === 'admin';
$is_owner = $user_id && $car['owner_id'] == $user_id;
if ($car['approval_status'] !== 'approved' && !$is_admin && !$is_owner) {
header('Location: cars.php');
exit;
}
$page_title = $car['title'] . " - AFG CARS";
include 'includes/header.php';
// Check if is favorite
$is_fav = false;
if ($is_logged_in) {
$fs = $pdo->prepare("SELECT id FROM favorites WHERE user_id = ? AND car_id = ?");
$fs->execute([$user_id, $id]);
$is_fav = (bool)$fs->fetch();
}
$message = '';
// Handle Booking
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['book_now'])) {
if (!$is_logged_in) {
header('Location: login.php');
exit;
}
$booking_message = $_POST['message'] ?? '';
$stmt = $pdo->prepare("INSERT INTO bookings (user_id, car_id, message) VALUES (?, ?, ?)");
$message = $stmt->execute([$user_id, $id, $booking_message]) ? "success" : "error";
}
// Handle Purchase Simulation
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['purchase_now'])) {
if (!$is_logged_in) {
header('Location: login.php');
exit;
}
$bank = $_POST['bank_name'] ?? 'Unknown Bank';
$transaction_id = 'AFG-' . strtoupper(uniqid());
$pdo->beginTransaction();
try {
$stmt = $pdo->prepare("INSERT INTO purchases (user_id, car_id, amount, bank_name, transaction_id, status) VALUES (?, ?, ?, ?, ?, 'completed')");
$stmt->execute([$user_id, $id, $car['price'], $bank, $transaction_id]);
$stmt = $pdo->prepare("UPDATE cars SET status = 'sold' WHERE id = ?");
$stmt->execute([$id]);
$pdo->commit();
$message = "purchase_success";
$car['status'] = 'sold'; // Update local state
} catch (Exception $e) {
$pdo->rollBack();
$message = "error";
}
}
// Handle Review
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit_review'])) {
if (!$is_logged_in) {
header('Location: login.php');
exit;
}
$rating = $_POST['rating'] ?? 5;
$comment = $_POST['comment'] ?? '';
$stmt = $pdo->prepare("INSERT INTO reviews (user_id, car_id, rating, comment) VALUES (?, ?, ?, ?)");
$stmt->execute([$user_id, $id, $rating, $comment]);
header("Location: car-details.php?id=$id&review=success");
exit;
}
// Fetch Reviews
$stmt = $pdo->prepare("SELECT r.*, u.full_name FROM reviews r JOIN users u ON r.user_id = u.id WHERE r.car_id = ? ORDER BY r.created_at DESC");
$stmt->execute([$id]);
$reviews = $stmt->fetchAll();
?>
<div class="container py-5">
<div class="row g-5">
<!-- Image Gallery -->
<div class="col-lg-8">
<div class="position-relative">
<div class="card border-0 shadow-sm overflow-hidden mb-4 position-relative" style="border-radius: 24px;">
<img src="<?php echo htmlspecialchars($car['image_url']); ?>" class="img-fluid w-100 <?php echo $car['status'] === 'sold' ? 'opacity-75' : ''; ?>" style="max-height: 500px; object-fit: cover;">
<?php if ($car['status'] === 'sold'): ?>
<div class="position-absolute top-50 start-50 translate-middle">
<h1 class="display-1 fw-bold text-white shadow-lg bg-danger px-5 py-3 rounded-pill opacity-75" style="transform: rotate(-10deg);">SOLD</h1>
</div>
<?php endif; ?>
</div>
<?php if ($is_logged_in): ?>
<a href="toggle-favorite.php?id=<?php echo $id; ?>&action=<?php echo $is_fav ? 'remove' : 'add'; ?>"
class="btn <?php echo $is_fav ? 'btn-danger' : 'btn-white'; ?> position-absolute top-0 end-0 m-4 shadow rounded-circle d-flex align-items-center justify-content-center"
style="width: 50px; height: 50px; background: white; z-index: 10;">
<i class="bi <?php echo $is_fav ? 'bi-heart-fill' : 'bi-heart text-danger'; ?> fs-4"></i>
</a>
<?php endif; ?>
</div>
<div class="card border-0 shadow-sm p-4 mb-4" style="border-radius: 24px;">
<div class="d-flex flex-wrap justify-content-between align-items-center mb-4 gap-3">
<div>
<h2 class="fw-bold mb-1"><?php echo htmlspecialchars($car['title']); ?></h2>
<span class="badge bg-light text-muted"><i class="bi bi-eye me-1"></i><?php echo $car['view_count']; ?> views</span>
<?php if ($car['approval_status'] !== 'approved'): ?>
<span class="badge bg-warning text-dark ms-2"><?php echo strtoupper($car['approval_status']); ?></span>
<?php endif; ?>
</div>
<span class="price-tag fs-2">$<?php echo number_format($car['price']); ?></span>
</div>
<div class="row g-3 mb-5">
<div class="col-6 col-md-3">
<div class="p-3 bg-light rounded-4 text-center">
<i class="bi bi-calendar-event text-primary mb-2 d-block"></i>
<span class="text-muted small">Year</span>
<div class="fw-bold"><?php echo $car['year']; ?></div>
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 bg-light rounded-4 text-center">
<i class="bi bi-fuel-pump text-primary mb-2 d-block"></i>
<span class="text-muted small">Fuel Type</span>
<div class="fw-bold"><?php echo $car['fuel_type']; ?></div>
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 bg-light rounded-4 text-center">
<i class="bi bi-gear-wide-connected text-primary mb-2 d-block"></i>
<span class="text-muted small">Transmission</span>
<div class="fw-bold"><?php echo $car['transmission']; ?></div>
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 bg-light rounded-4 text-center">
<i class="bi bi-speedometer2 text-primary mb-2 d-block"></i>
<span class="text-muted small">Mileage</span>
<div class="fw-bold"><?php echo number_format($car['mileage']); ?> km</div>
</div>
</div>
</div>
<h5 class="fw-bold mb-3">Description</h5>
<p class="text-muted lead mb-0"><?php echo nl2br(htmlspecialchars($car['description'])); ?></p>
</div>
<!-- Reviews Section -->
<div class="card border-0 shadow-sm p-4" style="border-radius: 24px;">
<h4 class="fw-bold mb-4">Reviews (<?php echo count($reviews); ?>)</h4>
<?php if ($is_logged_in && $car['status'] === 'sold'): ?>
<form method="POST" class="mb-5 bg-light p-4 rounded-4">
<h6 class="fw-bold mb-3">Leave a Review</h6>
<div class="mb-3">
<label class="form-label small">Rating</label>
<select name="rating" class="form-select w-auto">
<option value="5">⭐⭐⭐⭐⭐ (5/5)</option>
<option value="4">⭐⭐⭐⭐ (4/5)</option>
<option value="3">⭐⭐⭐ (3/5)</option>
<option value="2">⭐⭐ (2/5)</option>
<option value="1"> (1/5)</option>
</select>
</div>
<div class="mb-3">
<textarea name="comment" class="form-control" rows="3" placeholder="Share your experience..."></textarea>
</div>
<button type="submit" name="submit_review" class="btn btn-primary btn-sm px-4">Post Review</button>
</form>
<?php endif; ?>
<div class="review-list">
<?php foreach ($reviews as $review): ?>
<div class="mb-4 pb-4 border-bottom last-child-no-border">
<div class="d-flex justify-content-between mb-2">
<h6 class="fw-bold mb-0"><?php echo htmlspecialchars($review['full_name']); ?></h6>
<span class="text-warning"><?php echo str_repeat('⭐', $review['rating']); ?></span>
</div>
<p class="text-muted small mb-0"><?php echo htmlspecialchars($review['comment']); ?></p>
<span class="text-muted smaller" style="font-size: 0.75rem;"><?php echo date('M d, Y', strtotime($review['created_at'])); ?></span>
</div>
<?php endforeach; if(empty($reviews)) echo "<p class='text-muted italic'>No reviews yet.</p>"; ?>
</div>
</div>
</div>
<!-- Sidebar -->
<div class="col-lg-4">
<div class="sticky-top" style="top: 100px;">
<?php if ($message === 'success'): ?>
<div class="alert alert-success border-0 shadow-sm rounded-4 p-4 mb-4 text-center">
<i class="bi bi-check-circle-fill display-4 d-block mb-3"></i>
<h5 class="fw-bold">Request Sent!</h5>
<p class="mb-0 small">Our team will contact you within 24 hours.</p>
</div>
<?php endif; ?>
<?php if ($message === 'purchase_success'): ?>
<div class="alert alert-primary border-0 shadow-sm rounded-4 p-4 mb-4 text-center">
<i class="bi bi-trophy display-4 d-block mb-3"></i>
<h5 class="fw-bold">Congratulation!</h5>
<p class="mb-0 small">You have successfully purchased this car. Our delivery team will contact you soon.</p>
</div>
<?php endif; ?>
<div class="card border-0 shadow-sm p-4 mb-4" style="border-radius: 24px;">
<h5 class="fw-bold mb-4">Interested in this car?</h5>
<?php if ($car['status'] === 'available'): ?>
<form method="POST">
<div class="mb-3">
<label class="form-label small fw-bold">Message</label>
<textarea name="message" class="form-control rounded-3" rows="3" placeholder="I'm interested in this car..."></textarea>
</div>
<button type="submit" name="book_now" class="btn btn-outline-primary w-100 py-3 rounded-4 fw-bold mb-3">
<i class="bi bi-calendar-plus me-2"></i>Schedule Viewing
</button>
</form>
<button class="btn btn-primary w-100 py-3 rounded-4 fw-bold shadow-primary" data-bs-toggle="modal" data-bs-target="#purchaseModal">
<i class="bi bi-bag-check me-2"></i>Buy Now
</button>
<?php else: ?>
<div class="bg-light p-4 rounded-4 text-center">
<i class="bi bi-lock fs-1 text-muted mb-3 d-block"></i>
<h6 class="fw-bold">Listing Inactive</h6>
<p class="text-muted small mb-0">This car has already been sold and is no longer available for booking or purchase.</p>
</div>
<?php endif; ?>
</div>
<div class="card border-0 shadow-sm p-4 bg-primary text-white overflow-hidden position-relative" style="border-radius: 24px;">
<h6 class="fw-bold mb-3">Contact Dealer</h6>
<div class="d-flex align-items-center gap-3">
<div class="bg-white text-primary rounded-circle p-2 px-3"><i class="bi bi-telephone"></i></div>
<div>
<div class="small opacity-75">Phone</div>
<div class="fw-bold fs-5">+93 700 123 456</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Purchase Modal -->
<div class="modal fade" id="purchaseModal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content border-0 rounded-4">
<div class="modal-header border-0 p-4">
<h5 class="modal-title fw-bold">Complete Purchase</h5>
<button type="button" class="btn-close" data-bs-target="#purchaseModal" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body p-4">
<div class="d-flex align-items-center mb-4 p-3 bg-light rounded-4">
<img src="<?php echo $car['image_url']; ?>" class="rounded-3 me-3" style="width: 60px; height: 60px; object-fit: cover;">
<div>
<h6 class="fw-bold mb-0"><?php echo $car['title']; ?></h6>
<span class="price-tag">$<?php echo number_format($car['price']); ?></span>
</div>
</div>
<form method="POST">
<div class="mb-4">
<label class="form-label fw-bold small">Select Afghanistan Bank</label>
<select name="bank_name" class="form-select py-3 rounded-3" required>
<option value="Da Afghanistan Bank">Da Afghanistan Bank (DAB)</option>
<option value="Azizi Bank">Azizi Bank</option>
<option value="Pashtany Bank">Pashtany Bank</option>
<option value="New Kabul Bank">New Kabul Bank</option>
<option value="AIB">Afghanistan International Bank (AIB)</option>
<option value="Ghazanfar Bank">Ghazanfar Bank</option>
</select>
<div class="form-text small">This is a simulation. No real money will be charged.</div>
</div>
<button type="submit" name="purchase_now" class="btn btn-primary w-100 py-3 rounded-4 fw-bold">Confirm Purchase</button>
</form>
</div>
</div>
</div>
</div>
<style>
.last-child-no-border:last-child { border-bottom: none !important; }
.shadow-primary { box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.4); }
</style>
<?php include 'includes/footer.php'; ?>

56
careers.php Normal file
View File

@ -0,0 +1,56 @@
<?php
$page_title = "Careers - AFG CARS";
include 'includes/header.php';
?>
<div class="container py-5">
<div class="text-center mb-5">
<h1 class="display-5 fw-bold">Join the AFG CARS Team</h1>
<p class="lead text-muted">Be part of the digital revolution in Afghanistan's automotive industry.</p>
</div>
<div class="row g-4 mb-5">
<div class="col-md-6 col-lg-4">
<div class="card border-0 shadow-sm p-4 h-100">
<span class="badge bg-soft-primary text-primary mb-3 w-fit-content">Engineering</span>
<h4>Senior PHP Developer</h4>
<p class="text-muted small">Kabul / Remote | Full-time</p>
<p>Help us build the most advanced car marketplace in the region.</p>
<a href="#" class="btn btn-outline-primary btn-sm mt-auto">Apply Now</a>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="card border-0 shadow-sm p-4 h-100">
<span class="badge bg-soft-success text-success mb-3 w-fit-content">Sales</span>
<h4>Business Development Manager</h4>
<p class="text-muted small">Herat | Full-time</p>
<p>Expand our dealership network and drive growth in Western Afghanistan.</p>
<a href="#" class="btn btn-outline-primary btn-sm mt-auto">Apply Now</a>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="card border-0 shadow-sm p-4 h-100">
<span class="badge bg-soft-warning text-warning mb-3 w-fit-content">Operations</span>
<h4>Vehicle Inspection Specialist</h4>
<p class="text-muted small">Kandahar | Part-time</p>
<p>Ensure the quality and authenticity of every car listed on our platform.</p>
<a href="#" class="btn btn-outline-primary btn-sm mt-auto">Apply Now</a>
</div>
</div>
</div>
<div class="bg-primary text-white p-5 rounded-4 text-center mt-5">
<h2 class="fw-bold mb-3">Don't see a perfect fit?</h2>
<p class="mb-4">We're always looking for talented individuals. Send your CV to careers@afgcars.af</p>
<a href="mailto:careers@afgcars.af" class="btn btn-light px-5 py-3 fw-bold">General Application</a>
</div>
</div>
<style>
.bg-soft-primary { background-color: #e0e7ff; }
.bg-soft-success { background-color: #dcfce7; }
.bg-soft-warning { background-color: #fef9c3; }
.w-fit-content { width: fit-content; }
</style>
<?php include 'includes/footer.php'; ?>

138
cars.php Normal file
View File

@ -0,0 +1,138 @@
<?php
$page_title = "Browse Cars - AFG CARS";
include 'includes/header.php';
$pdo = db();
// Filter parameters
$search = $_GET['q'] ?? '';
$location = $_GET['location'] ?? '';
$max_price = $_GET['max_price'] ?? '';
$sort = $_GET['sort'] ?? 'newest';
// Only show approved cars
$sql = "SELECT * FROM cars WHERE approval_status = 'approved'";
$params = [];
if ($search) {
$sql .= " AND (title LIKE ? OR brand LIKE ? OR model LIKE ?)";
$params[] = "%$search%";
$params[] = "%$search%";
$params[] = "%$search%";
}
if ($location && $location !== 'All Locations') {
$sql .= " AND location = ?";
$params[] = $location;
}
if ($max_price) {
$sql .= " AND price <= ?";
$params[] = $max_price;
}
switch ($sort) {
case 'price_low': $sql .= " ORDER BY price ASC"; break;
case 'price_high': $sql .= " ORDER BY price DESC"; break;
case 'oldest': $sql .= " ORDER BY year ASC"; break;
default: $sql .= " ORDER BY created_at DESC"; break;
}
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$cars = $stmt->fetchAll();
?>
<div class="container py-5">
<div class="row g-4">
<!-- Sidebar Filters -->
<div class="col-lg-3">
<div class="card border-0 shadow-sm p-4 sticky-top" style="top: 100px; border-radius: 20px;">
<h5 class="fw-bold mb-4">Filters</h5>
<form method="GET">
<div class="mb-3">
<label class="form-label small fw-bold">Search</label>
<input type="text" name="q" class="form-control" placeholder="Brand, model..." value="<?php echo htmlspecialchars($search); ?>">
</div>
<div class="mb-3">
<label class="form-label small fw-bold">Location</label>
<select name="location" class="form-select">
<option>All Locations</option>
<?php
$locs = $pdo->query("SELECT DISTINCT location FROM cars WHERE approval_status = 'approved'")->fetchAll(PDO::FETCH_COLUMN);
foreach($locs as $loc) {
$sel = ($location == $loc) ? 'selected' : '';
echo "<option $sel>$loc</option>";
}
?>
</select>
</div>
<div class="mb-3">
<label class="form-label small fw-bold">Max Price ($)</label>
<input type="number" name="max_price" class="form-control" placeholder="Any" value="<?php echo htmlspecialchars($max_price); ?>">
</div>
<div class="mb-4">
<label class="form-label small fw-bold">Sort By</label>
<select name="sort" class="form-select">
<option value="newest" <?php echo $sort == 'newest' ? 'selected' : ''; ?>>Newest First</option>
<option value="price_low" <?php echo $sort == 'price_low' ? 'selected' : ''; ?>>Price: Low to High</option>
<option value="price_high" <?php echo $sort == 'price_high' ? 'selected' : ''; ?>>Price: High to Low</option>
</select>
</div>
<button type="submit" class="btn btn-primary w-100">Apply Filters</button>
<a href="cars.php" class="btn btn-link w-100 mt-2 text-decoration-none text-muted small">Clear All</a>
</form>
</div>
</div>
<!-- Car Listings -->
<div class="col-lg-9">
<div class="d-flex justify-content-between align-items-center mb-4">
<h4 class="fw-bold mb-0"><?php echo count($cars); ?> Approved Vehicles</h4>
</div>
<div class="row g-4">
<?php if (empty($cars)): ?>
<div class="col-12 text-center py-5">
<i class="bi bi-search display-1 text-muted opacity-25 mb-4 d-block"></i>
<h5>No cars matching your criteria</h5>
<p class="text-muted">Try adjusting your filters or search terms.</p>
</div>
<?php else: ?>
<?php foreach ($cars as $car): ?>
<div class="col-md-6 col-xl-4">
<div class="car-card bg-white h-100 d-flex flex-column position-relative">
<?php if ($car['status'] === 'sold'): ?>
<div class="sold-badge">SOLD</div>
<?php endif; ?>
<?php if ($car['badge']): ?>
<div class="badge bg-warning text-dark position-absolute top-0 start-0 m-3 z-3 shadow-sm"><?php echo htmlspecialchars($car['badge']); ?></div>
<?php endif; ?>
<div class="position-relative">
<img src="<?php echo htmlspecialchars($car['image_url']); ?>" class="card-img-top <?php echo $car['status'] === 'sold' ? 'opacity-75' : ''; ?>" alt="...">
<div class="position-absolute top-0 end-0 m-3 z-3">
<span class="badge bg-white text-dark shadow-sm border-0 py-2 px-3"><?php echo $car['year']; ?></span>
</div>
</div>
<div class="card-body p-4 flex-grow-1 d-flex flex-column">
<h5 class="fw-bold mb-2"><?php echo htmlspecialchars($car['title']); ?></h5>
<div class="d-flex align-items-center gap-3 text-muted small mb-4">
<span><i class="bi bi-geo-alt me-1"></i><?php echo htmlspecialchars($car['location']); ?></span>
<span><i class="bi bi-speedometer2 me-1"></i><?php echo number_format($car['mileage']); ?> km</span>
</div>
<div class="mt-auto d-flex justify-content-between align-items-center">
<span class="price-tag">$<?php echo number_format($car['price']); ?></span>
<a href="car-details.php?id=<?php echo $car['id']; ?>" class="btn btn-primary btn-sm px-4">Details</a>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>

74
contact.php Normal file
View File

@ -0,0 +1,74 @@
<?php
$page_title = "Contact Us - AFG CARS";
include 'includes/header.php';
?>
<div class="container py-5">
<div class="row g-5">
<div class="col-lg-5">
<h1 class="fw-bold mb-4">Get in Touch</h1>
<p class="text-muted mb-5">Have questions about a listing or want to partner with us? Our team is here to help you 24/7.</p>
<div class="d-flex mb-4">
<div class="bg-primary text-white p-3 rounded-3 me-3">
<i class="bi bi-geo-alt fs-4"></i>
</div>
<div>
<h5 class="mb-1">Our Office</h5>
<p class="text-muted">Main Road, Shar-e-Naw, Kabul, Afghanistan</p>
</div>
</div>
<div class="d-flex mb-4">
<div class="bg-primary text-white p-3 rounded-3 me-3">
<i class="bi bi-telephone fs-4"></i>
</div>
<div>
<h5 class="mb-1">Phone</h5>
<p class="text-muted">+93 700 123 456</p>
</div>
</div>
<div class="d-flex">
<div class="bg-primary text-white p-3 rounded-3 me-3">
<i class="bi bi-envelope fs-4"></i>
</div>
<div>
<h5 class="mb-1">Email</h5>
<p class="text-muted">info@afgcars.af</p>
</div>
</div>
</div>
<div class="col-lg-7">
<div class="bg-white p-5 rounded-4 shadow-sm">
<h3 class="fw-bold mb-4">Send us a Message</h3>
<form action="#" method="POST">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">Full Name</label>
<input type="text" class="form-control" placeholder="John Doe" required>
</div>
<div class="col-md-6">
<label class="form-label">Email Address</label>
<input type="email" class="form-control" placeholder="john@example.com" required>
</div>
<div class="col-12">
<label class="form-label">Subject</label>
<input type="text" class="form-control" placeholder="How can we help?" required>
</div>
<div class="col-12">
<label class="form-label">Message</label>
<textarea class="form-control" rows="5" placeholder="Your message here..." required></textarea>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary w-100 py-3">Send Message</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>

View File

@ -0,0 +1,45 @@
-- Update Users table: add status and possibly other fields if needed
-- Users already has 'role' ENUM('admin', 'user')
-- Update Cars table
ALTER TABLE cars ADD COLUMN owner_id INT NULL AFTER id;
ALTER TABLE cars ADD COLUMN approval_status ENUM('pending', 'approved', 'rejected') DEFAULT 'approved' AFTER status;
ALTER TABLE cars ADD COLUMN view_count INT DEFAULT 0 AFTER approval_status;
ALTER TABLE cars ADD COLUMN badge VARCHAR(50) NULL AFTER view_count;
ALTER TABLE cars ADD CONSTRAINT fk_cars_owner FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE SET NULL;
-- Reviews Table
CREATE TABLE IF NOT EXISTS reviews (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
car_id INT NOT NULL,
rating INT NOT NULL CHECK (rating >= 1 AND rating <= 5),
comment TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (car_id) REFERENCES cars(id) ON DELETE CASCADE
) ENGINE=InnoDB;
-- Notifications Table
CREATE TABLE IF NOT EXISTS notifications (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NULL, -- NULL means it might be for all admins or system-wide
message TEXT NOT NULL,
type VARCHAR(50) DEFAULT 'info', -- 'new_car', 'new_booking', 'new_purchase'
is_read TINYINT(1) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- Purchases Table (Simulation)
CREATE TABLE IF NOT EXISTS purchases (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
car_id INT NOT NULL,
amount DECIMAL(12, 2) NOT NULL,
bank_name VARCHAR(100) NOT NULL,
transaction_id VARCHAR(100) NOT NULL,
status ENUM('pending', 'completed', 'failed') DEFAULT 'completed',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (car_id) REFERENCES cars(id) ON DELETE CASCADE
) ENGINE=InnoDB;

18
db/run_migrations.php Normal file
View File

@ -0,0 +1,18 @@
<?php
require_once __DIR__ . '/config.php';
try {
$pdo = db();
$migrationFile = __DIR__ . '/migrations/2026_02_13_v2_enterprise.sql';
if (file_exists($migrationFile)) {
$sql = file_get_contents($migrationFile);
$pdo->exec($sql);
echo "Migration executed successfully.\n";
} else {
echo "Migration file not found.\n";
}
} catch (PDOException $e) {
echo "Migration Error: " . $e->getMessage() . "\n";
}

111
db/setup.php Normal file
View File

@ -0,0 +1,111 @@
<?php
require_once __DIR__ . '/config.php';
try {
$pdo = db();
// Users Table
$pdo->exec("CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
phone VARCHAR(20),
role ENUM('admin', 'user') DEFAULT 'user',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;");
// Cars Table
$pdo->exec("CREATE TABLE IF NOT EXISTS cars (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
brand VARCHAR(100) NOT NULL,
model VARCHAR(100) NOT NULL,
year INT NOT NULL,
price DECIMAL(12, 2) NOT NULL,
location VARCHAR(100) NOT NULL,
fuel_type VARCHAR(50),
transmission VARCHAR(50),
mileage INT,
description TEXT,
image_url VARCHAR(255),
status ENUM('available', 'sold') DEFAULT 'available',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;");
// Bookings Table
$pdo->exec("CREATE TABLE IF NOT EXISTS bookings (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
car_id INT NOT NULL,
message TEXT,
status ENUM('pending', 'confirmed', 'cancelled') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (car_id) REFERENCES cars(id) ON DELETE CASCADE
) ENGINE=InnoDB;");
// Favorites Table
$pdo->exec("CREATE TABLE IF NOT EXISTS favorites (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
car_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY user_car (user_id, car_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (car_id) REFERENCES cars(id) ON DELETE CASCADE
) ENGINE=InnoDB;");
// Create Admin if not exists
$adminEmail = 'admin@gmail.com';
$stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
$stmt->execute([$adminEmail]);
if (!$stmt->fetch()) {
$pass = password_hash('12345678', PASSWORD_DEFAULT);
$pdo->prepare("INSERT INTO users (full_name, email, password, role) VALUES (?, ?, ?, ?)")
->execute(['Admin User', $adminEmail, $pass, 'admin']);
echo "Admin user created (admin@gmail.com / 12345678)\n";
}
// Insert 20 cars if empty
$stmt = $pdo->query("SELECT COUNT(*) FROM cars");
if ($stmt->fetchColumn() < 20) {
$pdo->exec("SET FOREIGN_KEY_CHECKS = 0");
$pdo->exec("TRUNCATE TABLE cars");
$pdo->exec("TRUNCATE TABLE bookings");
$pdo->exec("TRUNCATE TABLE favorites");
$pdo->exec("SET FOREIGN_KEY_CHECKS = 1");
$sampleCars = [
['Toyota Corolla 2022', 'Toyota', 'Corolla', 2022, 18500, 'Kabul', 'Petrol', 'Automatic', 12000, 'Like new condition, full options.', 'https://images.pexels.com/photos/3311574/pexels-photo-3311574.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Lexus LX570 2018', 'Lexus', 'LX570', 2018, 75000, 'Herat', 'Petrol', 'Automatic', 45000, 'Powerful SUV, VIP interior.', 'https://images.pexels.com/photos/170811/pexels-photo-170811.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Mercedes-Benz C300', 'Mercedes-Benz', 'C300', 2020, 32000, 'Mazar-i-Sharif', 'Petrol', 'Automatic', 25000, 'Excellent fuel efficiency and comfort.', 'https://images.pexels.com/photos/120049/pexels-photo-120049.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Toyota Land Cruiser Prado', 'Toyota', 'Prado', 2019, 55000, 'Kabul', 'Diesel', 'Automatic', 30000, 'Perfect for off-road and city driving.', 'https://images.pexels.com/photos/112460/pexels-photo-112460.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Hyundai Elantra', 'Hyundai', 'Elantra', 2021, 21000, 'Kabul', 'Petrol', 'Automatic', 15000, 'Modern design and great fuel economy.', 'https://images.pexels.com/photos/3752162/pexels-photo-3752162.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Kia Sportage', 'Kia', 'Sportage', 2022, 28000, 'Herat', 'Petrol', 'Automatic', 8000, 'Latest model, panoramic sunroof.', 'https://images.pexels.com/photos/358070/pexels-photo-358070.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Toyota Hilux', 'Toyota', 'Hilux', 2020, 35000, 'Kandahar', 'Diesel', 'Manual', 40000, 'Reliable workhorse, 4x4.', 'https://images.pexels.com/photos/1035108/pexels-photo-1035108.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Honda Civic', 'Honda', 'Civic', 2017, 15000, 'Mazar-i-Sharif', 'Petrol', 'Automatic', 60000, 'Sporty look, well maintained.', 'https://images.pexels.com/photos/1149137/pexels-photo-1149137.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Lexus RX350', 'Lexus', 'RX350', 2016, 28000, 'Kabul', 'Petrol', 'Automatic', 75000, 'Luxury SUV, smooth ride.', 'https://images.pexels.com/photos/116675/pexels-photo-116675.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Nissan Patrol', 'Nissan', 'Patrol', 2015, 42000, 'Jalalabad', 'Petrol', 'Automatic', 90000, 'Desert king, powerful V8 engine.', 'https://images.pexels.com/photos/1637859/pexels-photo-1637859.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Toyota Camry 2023', 'Toyota', 'Camry', 2023, 31000, 'Kabul', 'Hybrid', 'Automatic', 5000, 'Eco-friendly and premium comfort.', 'https://images.pexels.com/photos/210019/pexels-photo-210019.jpeg?auto=compress&cs=tinysrgb&w=800'],
['BMW X5', 'BMW', 'X5', 2018, 45000, 'Kabul', 'Petrol', 'Automatic', 55000, 'High performance and luxury features.', 'https://images.pexels.com/photos/1007410/pexels-photo-1007410.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Ford Mustang', 'Ford', 'Mustang', 2019, 38000, 'Herat', 'Petrol', 'Automatic', 20000, 'Iconic muscle car, head-turner.', 'https://images.pexels.com/photos/337909/pexels-photo-337909.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Volkswagen Golf', 'Volkswagen', 'Golf', 2017, 14000, 'Mazar-i-Sharif', 'Diesel', 'Manual', 85000, 'Compact and efficient daily driver.', 'https://images.pexels.com/photos/1149831/pexels-photo-1149831.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Toyota RAV4', 'Toyota', 'RAV4', 2021, 29000, 'Kabul', 'Hybrid', 'Automatic', 12000, 'Smart SUV for modern lifestyle.', 'https://images.pexels.com/photos/3156482/pexels-photo-3156482.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Mercedes-Benz G-Class', 'Mercedes-Benz', 'G-Wagon', 2020, 180000, 'Kabul', 'Petrol', 'Automatic', 15000, 'Luxury status symbol, armored glass.', 'https://images.pexels.com/photos/100656/pexels-photo-100656.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Hyundai Tucson', 'Hyundai', 'Tucson', 2022, 27500, 'Herat', 'Petrol', 'Automatic', 10000, 'Modern tech and spacious interior.', 'https://images.pexels.com/photos/3972755/pexels-photo-3972755.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Kia Sorento', 'Kia', 'Sorento', 2021, 32000, 'Kabul', 'Diesel', 'Automatic', 18000, '7-seater family SUV, great for long trips.', 'https://images.pexels.com/photos/1149137/pexels-photo-1149137.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Honda Accord', 'Honda', 'Accord', 2018, 19500, 'Mazar-i-Sharif', 'Petrol', 'Automatic', 45000, 'Reliable sedan with premium feel.', 'https://images.pexels.com/photos/3802510/pexels-photo-3802510.jpeg?auto=compress&cs=tinysrgb&w=800'],
['Toyota 4Runner', 'Toyota', '4Runner', 2017, 34000, 'Kabul', 'Petrol', 'Automatic', 70000, 'Legendary reliability, off-road ready.', 'https://images.pexels.com/photos/1592384/pexels-photo-1592384.jpeg?auto=compress&cs=tinysrgb&w=800']
];
$insert = $pdo->prepare("INSERT INTO cars (title, brand, model, year, price, location, fuel_type, transmission, mileage, description, image_url) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
foreach ($sampleCars as $car) {
$insert->execute($car);
}
echo "Database populated with 20 cars.\n";
}
} catch (PDOException $e) {
die("Database Error: " . $e->getMessage());
}

57
favorites.php Normal file
View File

@ -0,0 +1,57 @@
<?php
$page_title = "My Favorites - AFG CARS";
include 'includes/header.php';
if (!$is_logged_in) {
header('Location: login.php');
exit;
}
$pdo = db();
$stmt = $pdo->prepare("SELECT c.* FROM cars c JOIN favorites f ON c.id = f.car_id WHERE f.user_id = ?");
$stmt->execute([$_SESSION['user_id']]);
$favs = $stmt->fetchAll();
?>
<div class="container py-5">
<h2 class="fw-bold mb-4">My Favorites</h2>
<div class="row g-4">
<?php if (empty($favs)): ?>
<div class="col-12 text-center py-5">
<i class="bi bi-heart display-1 text-muted opacity-25 mb-4 d-block"></i>
<h5>Your favorites list is empty</h5>
<p class="text-muted">Save cars you like to view them later.</p>
<a href="cars.php" class="btn btn-primary mt-3">Browse Cars</a>
</div>
<?php else: ?>
<?php foreach ($favs as $car): ?>
<div class="col-md-4">
<div class="car-card bg-white h-100 d-flex flex-column">
<div class="position-relative">
<img src="<?php echo htmlspecialchars($car['image_url']); ?>" class="card-img-top" alt="...">
<div class="position-absolute top-0 end-0 m-3">
<a href="toggle-favorite.php?id=<?php echo $car['id']; ?>&action=remove" class="btn btn-danger btn-sm rounded-circle shadow">
<i class="bi bi-trash"></i>
</a>
</div>
</div>
<div class="card-body p-4 flex-grow-1 d-flex flex-column">
<h5 class="fw-bold mb-2"><?php echo htmlspecialchars($car['title']); ?></h5>
<div class="d-flex align-items-center gap-3 text-muted small mb-4">
<span><i class="bi bi-geo-alt me-1"></i><?php echo htmlspecialchars($car['location']); ?></span>
<span><i class="bi bi-speedometer2 me-1"></i><?php echo number_format($car['mileage']); ?> km</span>
</div>
<div class="mt-auto d-flex justify-content-between align-items-center">
<span class="price-tag">$<?php echo number_format($car['price']); ?></span>
<a href="car-details.php?id=<?php echo $car['id']; ?>" class="btn btn-primary btn-sm px-4">Details</a>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
<?php include 'includes/footer.php'; ?>

60
includes/footer.php Normal file
View File

@ -0,0 +1,60 @@
<footer class="bg-dark text-white py-5 mt-5">
<div class="container">
<div class="row g-4">
<div class="col-md-4">
<h5 class="fw-bold mb-4 text-primary"><i class="bi bi-lightning-charge-fill me-2"></i>AFG CARS</h5>
<p class="text-muted">AFG CARS is Afghanistan's premier digital automotive marketplace, connecting buyers and sellers with transparency and technology.</p>
<div class="d-flex gap-3 mt-4">
<a href="#" class="text-white fs-5"><i class="bi bi-facebook"></i></a>
<a href="#" class="text-white fs-5"><i class="bi bi-instagram"></i></a>
<a href="#" class="text-white fs-5"><i class="bi bi-twitter-x"></i></a>
<a href="#" class="text-white fs-5"><i class="bi bi-linkedin"></i></a>
</div>
</div>
<div class="col-md-2 offset-md-1">
<h6 class="fw-bold mb-4">Company</h6>
<ul class="list-unstyled">
<li class="mb-2"><a href="/about.php" class="text-muted text-decoration-none hover-white">About Us</a></li>
<li class="mb-2"><a href="/contact.php" class="text-muted text-decoration-none hover-white">Contact Us</a></li>
<li class="mb-2"><a href="/careers.php" class="text-muted text-decoration-none hover-white">Careers</a></li>
<li class="mb-2"><a href="#" class="text-muted text-decoration-none hover-white">Privacy Policy</a></li>
</ul>
</div>
<div class="col-md-2">
<h6 class="fw-bold mb-4">Marketplace</h6>
<ul class="list-unstyled">
<li class="mb-2"><a href="/cars.php" class="text-muted text-decoration-none hover-white">Browse Cars</a></li>
<li class="mb-2"><a href="/user/add-car.php" class="text-muted text-decoration-none hover-white">Sell Your Car</a></li>
<li class="mb-2"><a href="/favorites.php" class="text-muted text-decoration-none hover-white">My Favorites</a></li>
<li class="mb-2"><a href="/login.php" class="text-muted text-decoration-none hover-white">Login / Register</a></li>
</ul>
</div>
<div class="col-md-3">
<h6 class="fw-bold mb-4">Regional Offices</h6>
<p class="text-muted small mb-1"><i class="bi bi-geo-alt me-2"></i> Kabul (HQ)</p>
<p class="text-muted small mb-1"><i class="bi bi-geo-alt me-2"></i> Herat</p>
<p class="text-muted small mb-1"><i class="bi bi-geo-alt me-2"></i> Mazar-i-Sharif</p>
<p class="text-muted small mb-3"><i class="bi bi-geo-alt me-2"></i> Kandahar</p>
<div class="input-group">
<input type="email" class="form-control bg-transparent border-secondary text-white" placeholder="Email address">
<button class="btn btn-primary btn-sm">Join</button>
</div>
</div>
</div>
<hr class="my-5 border-secondary">
<div class="d-flex flex-column flex-md-row justify-content-between align-items-center gap-3">
<p class="small text-muted mb-0">&copy; 2026 AFG CARS - Enterprise Car Marketplace. Developed by Mohammad Sadiq.</p>
<div class="d-flex gap-4">
<span class="small text-muted">Afg-v2.Enterprise.Simulation</span>
</div>
</div>
</div>
</footer>
<style>
.hover-white:hover { color: white !important; }
</style>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

89
includes/header.php Normal file
View File

@ -0,0 +1,89 @@
<?php
session_start();
require_once __DIR__ . '/../db/config.php';
$is_logged_in = isset($_SESSION['user_id']);
$is_admin = isset($_SESSION['role']) && $_SESSION['role'] === 'admin';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $page_title ?? ($_SERVER['PROJECT_NAME'] ?? 'AFG CARS'); ?></title>
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<!-- Custom CSS -->
<link rel="stylesheet" href="/assets/css/custom.css?v=<?php echo time(); ?>">
<style>
:root {
--primary-color: #0f172a;
--accent-color: #2563eb;
--bg-color: #f8fafc;
--surface-color: #ffffff;
--text-main: #1e293b;
--text-muted: #64748b;
--border-radius: 12px;
}
body { font-family: 'Inter', sans-serif; background-color: var(--bg-color); color: var(--text-main); }
.navbar { background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(10px); border-bottom: 1px solid #e2e8f0; }
.nav-link { font-weight: 500; color: var(--text-main); }
.btn-primary { border-radius: 8px; font-weight: 600; background-color: var(--accent-color); border-color: var(--accent-color); }
.car-card { border: none; border-radius: 16px; overflow: hidden; transition: all 0.3s ease; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05); background: white; }
.car-card:hover { transform: translateY(-8px); box-shadow: 0 20px 25px -5px rgba(0,0,0,0.1); }
.card-img-top { height: 220px; object-fit: cover; }
.badge-year { background: #f1f5f9; color: #475569; border-radius: 6px; padding: 4px 8px; font-size: 0.8rem; font-weight: 600; }
.price-tag { color: var(--accent-color); font-weight: 700; font-size: 1.25rem; }
.sold-badge { position: absolute; top: 10px; right: 10px; background: rgba(220, 38, 38, 0.9); color: white; padding: 5px 15px; border-radius: 20px; font-weight: bold; z-index: 10; font-size: 0.8rem; }
.pending-badge { position: absolute; top: 10px; left: 10px; background: rgba(245, 158, 11, 0.9); color: white; padding: 5px 15px; border-radius: 20px; font-weight: bold; z-index: 10; font-size: 0.8rem; }
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg sticky-top">
<div class="container">
<a class="navbar-brand fw-bold text-primary" href="/index.php">
<i class="bi bi-lightning-charge-fill me-1"></i>AFG CARS
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item"><a class="nav-link px-3" href="/index.php">Home</a></li>
<li class="nav-item"><a class="nav-link px-3" href="/cars.php">Browse</a></li>
<li class="nav-item"><a class="nav-link px-3" href="/about.php">About</a></li>
<li class="nav-item"><a class="nav-link px-3" href="/contact.php">Contact</a></li>
<li class="nav-item"><a class="nav-link px-3" href="/careers.php">Careers</a></li>
</ul>
<ul class="navbar-nav ms-auto align-items-center">
<?php if ($is_logged_in): ?>
<li class="nav-item"><a class="nav-link px-3" href="/favorites.php"><i class="bi bi-heart"></i></a></li>
<?php if ($is_admin): ?>
<li class="nav-item"><a class="nav-link px-3 fw-bold text-accent" href="/admin/dashboard.php">Admin Panel</a></li>
<?php endif; ?>
<li class="nav-item ms-lg-3 dropdown">
<a class="btn btn-outline-dark btn-sm px-4 dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
<i class="bi bi-person-circle me-1"></i> <?php echo explode(' ', $_SESSION['full_name'] ?? 'Account')[0]; ?>
</a>
<ul class="dropdown-menu dropdown-menu-end shadow border-0">
<li><a class="dropdown-item" href="/user/dashboard.php">Dashboard</a></li>
<li><a class="dropdown-item" href="/user/add-car.php">Sell My Car</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item text-danger" href="/logout.php">Logout</a></li>
</ul>
</li>
<?php else: ?>
<li class="nav-item ms-lg-3">
<a href="/login.php" class="btn btn-outline-primary btn-sm px-4 me-2">Login</a>
<a href="/register.php" class="btn btn-primary btn-sm px-4">Join</a>
</li>
<?php endif; ?>
</ul>
</div>
</div>
</nav>

336
index.php
View File

@ -1,150 +1,194 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
@date_default_timezone_set('UTC');
$page_title = "AFG CARS - Premium Car Marketplace Afghanistan";
include 'includes/header.php';
$phpVersion = PHP_VERSION;
$now = date('Y-m-d H:i:s');
$pdo = db();
// Get Hot Deals
$stmt = $pdo->query("SELECT * FROM cars WHERE approval_status = 'approved' AND badge = 'Hot Deal' AND status = 'available' LIMIT 3");
$hotDeals = $stmt->fetchAll();
// Get 6 recent approved cars
$stmt = $pdo->query("SELECT * FROM cars WHERE approval_status = 'approved' AND status = 'available' ORDER BY created_at DESC LIMIT 6");
$recentCars = $stmt->fetchAll();
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>New Style</title>
<?php
// Read project preview data from environment
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? '';
$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? '';
?>
<?php if ($projectDescription): ?>
<!-- Meta description -->
<meta name="description" content='<?= htmlspecialchars($projectDescription) ?>' />
<!-- Open Graph meta tags -->
<meta property="og:description" content="<?= htmlspecialchars($projectDescription) ?>" />
<!-- Twitter meta tags -->
<meta property="twitter:description" content="<?= htmlspecialchars($projectDescription) ?>" />
<?php endif; ?>
<?php if ($projectImageUrl): ?>
<!-- Open Graph image -->
<meta property="og:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
<!-- Twitter image -->
<meta property="twitter:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
<?php endif; ?>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color-start: #6a11cb;
--bg-color-end: #2575fc;
--text-color: #ffffff;
--card-bg-color: rgba(255, 255, 255, 0.01);
--card-border-color: rgba(255, 255, 255, 0.1);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end));
color: var(--text-color);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
text-align: center;
overflow: hidden;
position: relative;
}
body::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><path d="M-10 10L110 10M10 -10L10 110" stroke-width="1" stroke="rgba(255,255,255,0.05)"/></svg>');
animation: bg-pan 20s linear infinite;
z-index: -1;
}
@keyframes bg-pan {
0% { background-position: 0% 0%; }
100% { background-position: 100% 100%; }
}
main {
padding: 2rem;
}
.card {
background: var(--card-bg-color);
border: 1px solid var(--card-border-color);
border-radius: 16px;
padding: 2rem;
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1);
}
.loader {
margin: 1.25rem auto 1.25rem;
width: 48px;
height: 48px;
border: 3px solid rgba(255, 255, 255, 0.25);
border-top-color: #fff;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.hint {
opacity: 0.9;
}
.sr-only {
position: absolute;
width: 1px; height: 1px;
padding: 0; margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap; border: 0;
}
h1 {
font-size: 3rem;
font-weight: 700;
margin: 0 0 1rem;
letter-spacing: -1px;
}
p {
margin: 0.5rem 0;
font-size: 1.1rem;
}
code {
background: rgba(0,0,0,0.2);
padding: 2px 6px;
border-radius: 4px;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
footer {
position: absolute;
bottom: 1rem;
font-size: 0.8rem;
opacity: 0.7;
}
</style>
</head>
<body>
<main>
<div class="card">
<h1>Analyzing your requirements and generating your website…</h1>
<div class="loader" role="status" aria-live="polite" aria-label="Applying initial changes">
<span class="sr-only">Loading…</span>
</div>
<p class="hint"><?= ($_SERVER['HTTP_HOST'] ?? '') === 'appwizzy.com' ? 'AppWizzy' : 'Flatlogic' ?> AI is collecting your requirements and applying the first changes.</p>
<p class="hint">This page will update automatically as the plan is implemented.</p>
<p>Runtime: PHP <code><?= htmlspecialchars($phpVersion) ?></code> — UTC <code><?= htmlspecialchars($now) ?></code></p>
<!-- Hero Section with Background Image -->
<section class="position-relative overflow-hidden pt-5 pb-5 d-flex align-items-center" style="min-height: 80vh; background: url('https://images.pexels.com/photos/120049/pexels-photo-120049.jpeg?auto=compress&cs=tinysrgb&w=1920') no-repeat center center; background-size: cover;">
<!-- Dark Overlay -->
<div class="position-absolute top-0 start-0 w-100 h-100" style="background: rgba(0, 0, 0, 0.6); z-index: 1;"></div>
<div class="container pt-lg-5 position-relative" style="z-index: 2;">
<div class="row align-items-center g-5">
<div class="col-lg-8 text-white">
<div class="badge bg-primary px-3 py-2 rounded-pill fw-bold mb-4 shadow-sm">
<i class="bi bi-star-fill me-2"></i>ESTABLISHED 2026 | ENTERPRISE EDITION
</div>
<h1 class="display-3 fw-bold mb-4 text-white" style="line-height: 1.1; text-shadow: 2px 2px 4px rgba(0,0,0,0.5);">
Your Trusted <span class="text-primary">Automotive Partner</span> in Afghanistan.
</h1>
<p class="lead mb-5 pe-lg-5 text-white-50">
Experience the next generation of car buying. Verified listings, secure digital payments simulation, and national support.
</p>
<div class="d-flex flex-wrap gap-3">
<a href="cars.php" class="btn btn-primary btn-lg px-5 py-3 rounded-4 shadow-lg border-0">
Explore Market <i class="bi bi-arrow-right ms-2"></i>
</a>
<a href="/user/add-car.php" class="btn btn-outline-light btn-lg px-5 py-3 rounded-4">
Sell Your Car
</a>
</div>
</div>
</div>
</div>
</main>
<footer>
Page updated: <?= htmlspecialchars($now) ?> (UTC)
</footer>
</body>
</html>
</section>
<!-- Search Section -->
<section class="py-5" style="margin-top: -60px;">
<div class="container">
<div class="bg-white p-4 rounded-5 shadow-lg border" style="position: relative; z-index: 10;">
<form action="cars.php" method="GET" class="row g-3 align-items-center">
<div class="col-md-4">
<div class="input-group input-group-lg border-0 bg-light rounded-4">
<span class="input-group-text bg-transparent border-0 pe-0"><i class="bi bi-search text-muted"></i></span>
<input type="text" name="q" class="form-control bg-transparent border-0 py-3" placeholder="Search Brand, Model...">
</div>
</div>
<div class="col-md-3">
<select name="location" class="form-select form-select-lg border-0 bg-light rounded-4 py-3 shadow-none">
<option selected>All Locations</option>
<option>Kabul</option><option>Herat</option><option>Mazar-i-Sharif</option><option>Kandahar</option>
</select>
</div>
<div class="col-md-3">
<select name="max_price" class="form-select form-select-lg border-0 bg-light rounded-4 py-3 shadow-none">
<option selected value="">Any Price</option>
<option value="10000">Up to $10k</option><option value="25000">Up to $25k</option><option value="50000">Up to $50k</option>
</select>
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary btn-lg w-100 py-3 rounded-4 fw-bold shadow-sm">Search</button>
</div>
</form>
</div>
</div>
</section>
<!-- Hot Deals (Horizontal Scroll) -->
<?php if (!empty($hotDeals)): ?>
<section class="py-5">
<div class="container">
<div class="d-flex justify-content-between align-items-end mb-4">
<div>
<h2 class="fw-bold mb-1">🔥 Hot Deals</h2>
<p class="text-muted small mb-0">Unbeatable prices on premium vehicles.</p>
</div>
</div>
<div class="row g-4">
<?php foreach ($hotDeals as $car): ?>
<div class="col-md-4">
<div class="card car-card h-100 bg-white border-primary" style="border: 2px solid #e0e7ff !important;">
<div class="position-relative">
<img src="<?php echo htmlspecialchars($car['image_url']); ?>" class="card-img-top" alt="...">
<div class="badge bg-warning text-dark position-absolute top-0 start-0 m-3 shadow-sm px-3 py-2">HOT DEAL</div>
</div>
<div class="card-body p-4">
<h5 class="fw-bold"><?php echo htmlspecialchars($car['title']); ?></h5>
<div class="price-tag mb-3">$<?php echo number_format($car['price']); ?></div>
<a href="car-details.php?id=<?php echo $car['id']; ?>" class="btn btn-primary btn-sm w-100 rounded-3">View Deal</a>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</section>
<?php endif; ?>
<!-- Recent Listings -->
<section class="py-5 bg-light">
<div class="container">
<div class="d-flex justify-content-between align-items-end mb-5">
<div>
<h2 class="display-6 fw-bold mb-2">Recently Added</h2>
<p class="text-muted mb-0">Stay updated with the latest arrivals in our market.</p>
</div>
<a href="cars.php" class="btn btn-link text-decoration-none fw-bold">View All <i class="bi bi-chevron-right"></i></a>
</div>
<div class="row g-4">
<?php foreach ($recentCars as $car): ?>
<div class="col-md-6 col-lg-4">
<div class="car-card bg-white h-100 d-flex flex-column">
<div class="position-relative">
<img src="<?php echo htmlspecialchars($car['image_url']); ?>" class="card-img-top" alt="...">
<div class="position-absolute top-0 end-0 m-3">
<span class="badge bg-white text-dark shadow-sm border-0 py-2 px-3"><?php echo $car['year']; ?></span>
</div>
</div>
<div class="card-body p-4 flex-grow-1 d-flex flex-column">
<h5 class="fw-bold mb-3"><?php echo htmlspecialchars($car['title']); ?></h5>
<div class="d-flex gap-3 text-muted small mb-4">
<span><i class="bi bi-geo-alt me-1"></i><?php echo htmlspecialchars($car['location']); ?></span>
<span><i class="bi bi-speedometer2 me-1"></i><?php echo number_format($car['mileage']); ?> km</span>
</div>
<div class="mt-auto d-flex justify-content-between align-items-center">
<span class="price-tag">$<?php echo number_format($car['price']); ?></span>
<a href="car-details.php?id=<?php echo $car['id']; ?>" class="btn btn-outline-primary btn-sm px-4 rounded-3">Details</a>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</section>
<!-- Locations Section -->
<section class="py-5 bg-white">
<div class="container py-5">
<div class="text-center mb-5">
<h2 class="fw-bold">Our Physical Locations</h2>
<p class="text-muted">Visit our showrooms across Afghanistan for a test drive.</p>
</div>
<div class="row g-4">
<div class="col-md-3">
<div class="text-center">
<h5 class="fw-bold">Kabul Main</h5>
<p class="text-muted small">Shar-e-Naw District 4, Kabul</p>
</div>
</div>
<div class="col-md-3">
<div class="text-center">
<h5 class="fw-bold">Herat West</h5>
<p class="text-muted small">Blue Mosque Square, Herat</p>
</div>
</div>
<div class="col-md-3">
<div class="text-center">
<h5 class="fw-bold">Mazar North</h5>
<p class="text-muted small">University Road, Mazar-i-Sharif</p>
</div>
</div>
<div class="col-md-3">
<div class="text-center">
<h5 class="fw-bold">Kandahar South</h5>
<p class="text-muted small">Aino Mina, Kandahar</p>
</div>
</div>
</div>
</div>
</section>
<!-- CTA -->
<section class="py-5">
<div class="container">
<div class="bg-primary text-white p-5 rounded-5 text-center shadow-lg position-relative overflow-hidden">
<div class="position-absolute top-0 start-0 w-100 h-100 opacity-10" style="background: url('https://www.transparenttextures.com/patterns/carbon-fibre.png');"></div>
<h2 class="display-5 fw-bold mb-3 position-relative">Ready to Sell Your Vehicle?</h2>
<p class="lead mb-5 position-relative opacity-75">Join thousands of sellers and get the best value for your car today.</p>
<a href="/user/add-car.php" class="btn btn-light btn-lg px-5 py-3 rounded-4 fw-bold position-relative">Get Started Now</a>
</div>
</div>
</section>
<?php include 'includes/footer.php'; ?>

64
login.php Normal file
View File

@ -0,0 +1,64 @@
<?php
$page_title = "Login - AFG CARS";
include 'includes/header.php';
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';
if ($email && $password) {
$pdo = db();
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['full_name'] = $user['full_name'];
$_SESSION['role'] = $user['role'];
header('Location: index.php');
exit;
} else {
$error = "Invalid email or password.";
}
} else {
$error = "Please fill in all fields.";
}
}
?>
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-md-5">
<div class="card border-0 shadow-sm p-4" style="border-radius: 20px;">
<div class="text-center mb-4">
<h2 class="fw-bold">Welcome Back</h2>
<p class="text-muted">Login to manage your bookings and favorites</p>
</div>
<?php if ($error): ?>
<div class="alert alert-danger"><?php echo $error; ?></div>
<?php endif; ?>
<form method="POST">
<div class="mb-3">
<label class="form-label">Email Address</label>
<input type="email" name="email" class="form-control" placeholder="name@example.com" required>
</div>
<div class="mb-4">
<label class="form-label">Password</label>
<input type="password" name="password" class="form-control" placeholder="••••••••" required>
</div>
<button type="submit" class="btn btn-primary w-100 py-2 mb-3">Sign In</button>
</form>
<div class="text-center">
<p class="text-muted small">Don't have an account? <a href="register.php" class="text-primary fw-bold text-decoration-none">Create one</a></p>
</div>
</div>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>

5
logout.php Normal file
View File

@ -0,0 +1,5 @@
<?php
session_start();
session_destroy();
header('Location: index.php');
exit;

80
register.php Normal file
View File

@ -0,0 +1,80 @@
<?php
$page_title = "Join AFG CARS";
include 'includes/header.php';
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$full_name = $_POST['full_name'] ?? '';
$email = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';
$phone = $_POST['phone'] ?? '';
if ($full_name && $email && $password) {
$pdo = db();
// Check if email exists
$stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
$stmt->execute([$email]);
if ($stmt->fetch()) {
$error = "Email already registered.";
} else {
$pass_hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $pdo->prepare("INSERT INTO users (full_name, email, password, phone) VALUES (?, ?, ?, ?)");
if ($stmt->execute([$full_name, $email, $pass_hash, $phone])) {
$_SESSION['user_id'] = $pdo->lastInsertId();
$_SESSION['full_name'] = $full_name;
$_SESSION['role'] = 'user';
header('Location: index.php');
exit;
} else {
$error = "Registration failed. Please try again.";
}
}
} else {
$error = "Please fill in all required fields.";
}
}
?>
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-md-5">
<div class="card border-0 shadow-sm p-4" style="border-radius: 20px;">
<div class="text-center mb-4">
<h2 class="fw-bold">Create Account</h2>
<p class="text-muted">Join the premier Afghan car marketplace</p>
</div>
<?php if ($error): ?>
<div class="alert alert-danger"><?php echo $error; ?></div>
<?php endif; ?>
<form method="POST">
<div class="mb-3">
<label class="form-label">Full Name</label>
<input type="text" name="full_name" class="form-control" placeholder="John Doe" required>
</div>
<div class="mb-3">
<label class="form-label">Email Address</label>
<input type="email" name="email" class="form-control" placeholder="name@example.com" required>
</div>
<div class="mb-3">
<label class="form-label">Phone Number</label>
<input type="text" name="phone" class="form-control" placeholder="+93 700 000 000">
</div>
<div class="mb-4">
<label class="form-label">Password</label>
<input type="password" name="password" class="form-control" placeholder="••••••••" required>
</div>
<button type="submit" class="btn btn-primary w-100 py-2 mb-3">Create Account</button>
</form>
<div class="text-center">
<p class="text-muted small">Already have an account? <a href="login.php" class="text-primary fw-bold text-decoration-none">Sign in</a></p>
</div>
</div>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>

26
toggle-favorite.php Normal file
View File

@ -0,0 +1,26 @@
<?php
require_once 'db/config.php';
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
$user_id = $_SESSION['user_id'];
$car_id = $_GET['id'] ?? 0;
$action = $_GET['action'] ?? 'add';
if ($car_id) {
$pdo = db();
if ($action === 'add') {
$stmt = $pdo->prepare("INSERT IGNORE INTO favorites (user_id, car_id) VALUES (?, ?)");
$stmt->execute([$user_id, $car_id]);
} else {
$stmt = $pdo->prepare("DELETE FROM favorites WHERE user_id = ? AND car_id = ?");
$stmt->execute([$user_id, $car_id]);
}
}
header('Location: ' . ($_SERVER['HTTP_REFERER'] ?? 'favorites.php'));
exit;

125
user/add-car.php Normal file
View File

@ -0,0 +1,125 @@
<?php
$page_title = "Sell Your Car - AFG CARS";
include '../includes/header.php';
if (!isset($_SESSION['user_id'])) {
header('Location: ../login.php');
exit;
}
$success = '';
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = $_POST['title'];
$brand = $_POST['brand'];
$model = $_POST['model'];
$year = $_POST['year'];
$price = $_POST['price'];
$location = $_POST['location'];
$fuel_type = $_POST['fuel_type'];
$transmission = $_POST['transmission'];
$mileage = $_POST['mileage'];
$description = $_POST['description'];
$image_url = $_POST['image_url']; // In a real app, this would be a file upload
$pdo = db();
try {
$stmt = $pdo->prepare("INSERT INTO cars (owner_id, title, brand, model, year, price, location, fuel_type, transmission, mileage, description, image_url, approval_status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending')");
$stmt->execute([$_SESSION['user_id'], $title, $brand, $model, $year, $price, $location, $fuel_type, $transmission, $mileage, $description, $image_url]);
// Add notification for admin
$stmt = $pdo->prepare("INSERT INTO notifications (message, type) VALUES (?, 'new_car')");
$stmt->execute(["New car listing pending approval: $title by " . $_SESSION['full_name']]);
$success = "Car submitted successfully! It will appear on the site once approved by an admin.";
} catch (PDOException $e) {
$error = "Error: " . $e->getMessage();
}
}
?>
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="card border-0 shadow-sm p-4 p-md-5 rounded-4">
<h2 class="fw-bold mb-4">Sell Your Car</h2>
<p class="text-muted mb-4">Fill in the details below to list your car on AFG CARS. Our team will review and approve it within 24 hours.</p>
<?php if ($success): ?>
<div class="alert alert-success border-0 rounded-3 mb-4"><?php echo $success; ?></div>
<?php endif; ?>
<?php if ($error): ?>
<div class="alert alert-danger border-0 rounded-3 mb-4"><?php echo $error; ?></div>
<?php endif; ?>
<form method="POST" class="row g-3">
<div class="col-12">
<label class="form-label fw-semibold">Listing Title</label>
<input type="text" name="title" class="form-control" placeholder="e.g. Toyota Corolla 2022 Silver" required>
</div>
<div class="col-md-6">
<label class="form-label fw-semibold">Brand</label>
<input type="text" name="brand" class="form-control" placeholder="Toyota" required>
</div>
<div class="col-md-6">
<label class="form-label fw-semibold">Model</label>
<input type="text" name="model" class="form-control" placeholder="Corolla" required>
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Year</label>
<input type="number" name="year" class="form-control" placeholder="2022" required>
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Price ($)</label>
<input type="number" name="price" class="form-control" placeholder="15000" required>
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Location</label>
<select name="location" class="form-select" required>
<option value="Kabul">Kabul</option>
<option value="Herat">Herat</option>
<option value="Mazar-i-Sharif">Mazar-i-Sharif</option>
<option value="Kandahar">Kandahar</option>
<option value="Jalalabad">Jalalabad</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Fuel Type</label>
<select name="fuel_type" class="form-select">
<option value="Petrol">Petrol</option>
<option value="Diesel">Diesel</option>
<option value="Hybrid">Hybrid</option>
<option value="Electric">Electric</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Transmission</label>
<select name="transmission" class="form-select">
<option value="Automatic">Automatic</option>
<option value="Manual">Manual</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Mileage (km)</label>
<input type="number" name="mileage" class="form-control" placeholder="25000">
</div>
<div class="col-12">
<label class="form-label fw-semibold">Description</label>
<textarea name="description" class="form-control" rows="4" placeholder="Describe your car's condition, features, etc."></textarea>
</div>
<div class="col-12">
<label class="form-label fw-semibold">Image URL</label>
<input type="url" name="image_url" class="form-control" placeholder="https://example.com/car-image.jpg" required>
<div class="form-text">For this demo, please provide a direct link to an image.</div>
</div>
<div class="col-12 mt-4">
<button type="submit" class="btn btn-primary w-100 py-3 fw-bold">Submit for Approval</button>
</div>
</form>
</div>
</div>
</div>
</div>
<?php include '../includes/footer.php'; ?>

160
user/dashboard.php Normal file
View File

@ -0,0 +1,160 @@
<?php
$page_title = "User Dashboard - AFG CARS";
include '../includes/header.php';
if (!isset($_SESSION['user_id'])) {
header('Location: ../login.php');
exit;
}
$user_id = $_SESSION['user_id'];
$pdo = db();
// Fetch user's cars
$stmt = $pdo->prepare("SELECT * FROM cars WHERE owner_id = ? ORDER BY created_at DESC");
$stmt->execute([$user_id]);
$my_cars = $stmt->fetchAll();
// Fetch user's bookings (where they booked a car)
$stmt = $pdo->prepare("SELECT b.*, c.title as car_title, c.image_url FROM bookings b JOIN cars c ON b.car_id = c.id WHERE b.user_id = ? ORDER BY b.created_at DESC");
$stmt->execute([$user_id]);
$my_bookings = $stmt->fetchAll();
// Fetch user's purchases
$stmt = $pdo->prepare("SELECT p.*, c.title as car_title FROM purchases p JOIN cars c ON p.car_id = c.id WHERE p.user_id = ? ORDER BY p.created_at DESC");
$stmt->execute([$user_id]);
$my_purchases = $stmt->fetchAll();
?>
<div class="container py-5">
<div class="row g-4">
<!-- Sidebar -->
<div class="col-lg-3">
<div class="card border-0 shadow-sm p-4 rounded-4 sticky-top" style="top: 100px;">
<div class="text-center mb-4">
<div class="bg-primary text-white rounded-circle d-inline-flex align-items-center justify-content-center mb-3" style="width: 80px; height: 80px;">
<span class="fs-1 fw-bold"><?php echo strtoupper(substr($_SESSION['full_name'], 0, 1)); ?></span>
</div>
<h5 class="fw-bold mb-0"><?php echo $_SESSION['full_name']; ?></h5>
<p class="text-muted small"><?php echo $_SESSION['email']; ?></p>
</div>
<div class="list-group list-group-flush border-0">
<a href="#my-listings" class="list-group-item list-group-item-action border-0 px-0 active"><i class="bi bi-car-front me-2"></i> My Listings</a>
<a href="#my-bookings" class="list-group-item list-group-item-action border-0 px-0"><i class="bi bi-calendar-check me-2"></i> My Bookings</a>
<a href="#my-purchases" class="list-group-item list-group-item-action border-0 px-0"><i class="bi bi-bag-check me-2"></i> Purchases</a>
<a href="/user/add-car.php" class="list-group-item list-group-item-action border-0 px-0 text-primary"><i class="bi bi-plus-circle me-2"></i> Sell New Car</a>
</div>
</div>
</div>
<!-- Main Content -->
<div class="col-lg-9">
<!-- Stats -->
<div class="row g-3 mb-5">
<div class="col-md-4">
<div class="bg-white p-4 rounded-4 shadow-sm border-start border-primary border-4">
<p class="text-muted mb-1">My Cars</p>
<h2 class="fw-bold mb-0"><?php echo count($my_cars); ?></h2>
</div>
</div>
<div class="col-md-4">
<div class="bg-white p-4 rounded-4 shadow-sm border-start border-success border-4">
<p class="text-muted mb-1">Bookings</p>
<h2 class="fw-bold mb-0"><?php echo count($my_bookings); ?></h2>
</div>
</div>
<div class="col-md-4">
<div class="bg-white p-4 rounded-4 shadow-sm border-start border-info border-4">
<p class="text-muted mb-1">Purchases</p>
<h2 class="fw-bold mb-0"><?php echo count($my_purchases); ?></h2>
</div>
</div>
</div>
<h3 class="fw-bold mb-4" id="my-listings">My Car Listings</h3>
<?php if (empty($my_cars)): ?>
<div class="bg-white p-5 rounded-4 shadow-sm text-center">
<i class="bi bi-emoji-frown fs-1 text-muted mb-3"></i>
<p class="text-muted">You haven't listed any cars yet.</p>
<a href="/user/add-car.php" class="btn btn-primary">Start Selling</a>
</div>
<?php else: ?>
<div class="row g-4">
<?php foreach ($my_cars as $car): ?>
<div class="col-md-6">
<div class="card car-card">
<div class="position-relative">
<img src="<?php echo $car['image_url']; ?>" class="card-img-top" alt="...">
<?php if ($car['status'] === 'sold'): ?>
<div class="sold-badge">SOLD</div>
<?php elseif ($car['approval_status'] === 'pending'): ?>
<div class="pending-badge">PENDING APPROVAL</div>
<?php elseif ($car['approval_status'] === 'rejected'): ?>
<div class="badge bg-danger position-absolute top-0 start-0 m-3">REJECTED</div>
<?php endif; ?>
</div>
<div class="card-body">
<h5 class="fw-bold mb-1"><?php echo $car['title']; ?></h5>
<p class="text-muted small mb-2"><i class="bi bi-geo-alt me-1"></i><?php echo $car['location']; ?></p>
<div class="d-flex justify-content-between align-items-center">
<span class="price-tag">$<?php echo number_format($car['price']); ?></span>
<a href="/car-details.php?id=<?php echo $car['id']; ?>" class="btn btn-sm btn-outline-primary">View</a>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<h3 class="fw-bold mt-5 mb-4" id="my-bookings">My Bookings</h3>
<div class="bg-white rounded-4 shadow-sm overflow-hidden">
<table class="table table-hover mb-0">
<thead class="bg-light">
<tr>
<th>Car</th>
<th>Status</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<?php foreach ($my_bookings as $booking): ?>
<tr>
<td><?php echo htmlspecialchars($booking['car_title']); ?></td>
<td><span class="badge bg-<?php echo $booking['status'] === 'confirmed' ? 'success' : ($booking['status'] === 'pending' ? 'warning' : 'danger'); ?>"><?php echo ucfirst($booking['status']); ?></span></td>
<td class="small text-muted"><?php echo date('M d, Y', strtotime($booking['created_at'])); ?></td>
</tr>
<?php endforeach; if(empty($my_bookings)) echo "<tr><td colspan='3' class='text-center py-4 text-muted'>No bookings found</td></tr>"; ?>
</tbody>
</table>
</div>
<h3 class="fw-bold mt-5 mb-4" id="my-purchases">My Purchases</h3>
<div class="bg-white rounded-4 shadow-sm overflow-hidden">
<table class="table table-hover mb-0">
<thead class="bg-light">
<tr>
<th>Car</th>
<th>Bank</th>
<th>Amount</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<?php foreach ($my_purchases as $purchase): ?>
<tr>
<td><?php echo htmlspecialchars($purchase['car_title']); ?></td>
<td><?php echo htmlspecialchars($purchase['bank_name']); ?></td>
<td class="fw-bold">$<?php echo number_format($purchase['amount']); ?></td>
<td class="small text-muted"><?php echo date('M d, Y', strtotime($purchase['created_at'])); ?></td>
</tr>
<?php endforeach; if(empty($my_purchases)) echo "<tr><td colspan='4' class='text-center py-4 text-muted'>No purchases found</td></tr>"; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php include '../includes/footer.php'; ?>