333 lines
13 KiB
PHP
333 lines
13 KiB
PHP
<?php
|
|
// setup_project.php
|
|
// This script sets up the database tables and data as per the requirements.
|
|
|
|
require_once 'includes/functions.php';
|
|
|
|
try {
|
|
$pdo = db();
|
|
echo "Database connection established.\n";
|
|
} catch (PDOException $e) {
|
|
die("Database connection failed: " . $e->getMessage() . "\n");
|
|
}
|
|
|
|
try {
|
|
// 2. Drop existing tables to ensure a clean state
|
|
$pdo->exec("SET FOREIGN_KEY_CHECKS=0");
|
|
$pdo->exec("DROP TABLE IF EXISTS reviews");
|
|
$pdo->exec("DROP TABLE IF EXISTS bookings");
|
|
$pdo->exec("DROP TABLE IF EXISTS cars");
|
|
$pdo->exec("DROP TABLE IF EXISTS users");
|
|
$pdo->exec("SET FOREIGN_KEY_CHECKS=1");
|
|
echo "Existing tables dropped.\n";
|
|
|
|
// 3. Create tables
|
|
|
|
// Users Table
|
|
$pdo->exec(" CREATE TABLE users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
password VARCHAR(255) NOT NULL,
|
|
role VARCHAR(20) DEFAULT 'user',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)");
|
|
echo "Users table ready.\n";
|
|
|
|
// Cars Table
|
|
$pdo->exec(" CREATE TABLE cars (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NULL,
|
|
title VARCHAR(255) NULL,
|
|
make VARCHAR(100),
|
|
model VARCHAR(100),
|
|
year INT,
|
|
mileage INT,
|
|
price DECIMAL(10,2),
|
|
description TEXT,
|
|
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
color VARCHAR(50),
|
|
province VARCHAR(100),
|
|
city VARCHAR(100),
|
|
image_url VARCHAR(255) DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
|
|
)");
|
|
echo "Cars table ready.\n";
|
|
|
|
// Bookings Table
|
|
$pdo->exec(" CREATE TABLE bookings (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
car_id INT NOT NULL,
|
|
booking_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
bank_province VARCHAR(100) NULL,
|
|
bank_account_number VARCHAR(100) NULL,
|
|
sale_price DECIMAL(10, 2) NULL,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (car_id) REFERENCES cars(id) ON DELETE CASCADE
|
|
)");
|
|
echo "Bookings table ready.\n";
|
|
|
|
// Reviews Table
|
|
$pdo->exec(" CREATE TABLE reviews (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
car_id INT NOT NULL,
|
|
user_id INT NOT NULL,
|
|
rating INT NOT NULL CHECK (rating >= 1 AND rating <= 5),
|
|
review TEXT,
|
|
status VARCHAR(20) DEFAULT 'pending',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (car_id) REFERENCES cars(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
)");
|
|
echo "Reviews table ready.\n";
|
|
|
|
// 4. Add default admin user
|
|
$adminUsername = 'admin@gmail.com';
|
|
$adminPassword = '12345678';
|
|
$adminHash = password_hash($adminPassword, PASSWORD_DEFAULT);
|
|
|
|
// Check if admin exists (though we dropped tables, good practice)
|
|
$stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE username = ?");
|
|
$stmt->execute([$adminUsername]);
|
|
|
|
if ($stmt->fetchColumn() == 0) {
|
|
$insertAdmin = $pdo->prepare("INSERT INTO users (username, password, role) VALUES (?, ?, 'admin')");
|
|
$insertAdmin->execute([$adminUsername, $adminHash]);
|
|
$adminId = $pdo->lastInsertId();
|
|
echo "Admin user created (User: $adminUsername, Pass: $adminPassword).\n";
|
|
} else {
|
|
echo "Admin user already exists.\n";
|
|
$stmt = $pdo->prepare("SELECT id FROM users WHERE username = ?");
|
|
$stmt->execute([$adminUsername]);
|
|
$adminId = $stmt->fetchColumn();
|
|
}
|
|
|
|
// 5. Insert sample data (15 Cars)
|
|
$carsData = [
|
|
[
|
|
'title' => 'Toyota Corolla 2020 Clean',
|
|
'make' => 'Toyota',
|
|
'model' => 'Corolla',
|
|
'year' => 2020,
|
|
'mileage' => 15000,
|
|
'price' => 18500.00,
|
|
'description' => 'Very clean car, no accidents. Perfect for city driving.',
|
|
'status' => 'approved',
|
|
'color' => 'White',
|
|
'province' => 'Kabul',
|
|
'city' => 'Kabul',
|
|
'image_url' => 'https://images.pexels.com/photos/112460/pexels-photo-112460.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Honda Civic 2018 Sport',
|
|
'make' => 'Honda',
|
|
'model' => 'Civic',
|
|
'year' => 2018,
|
|
'mileage' => 45000,
|
|
'price' => 16200.00,
|
|
'description' => 'Sport mode, leather seats, sunroof. Excellent condition.',
|
|
'status' => 'approved',
|
|
'color' => 'Black',
|
|
'province' => 'Herat',
|
|
'city' => 'Herat',
|
|
'image_url' => 'https://images.pexels.com/photos/170811/pexels-photo-170811.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Ford Ranger 2019 4x4',
|
|
'make' => 'Ford',
|
|
'model' => 'Ranger',
|
|
'year' => 2019,
|
|
'mileage' => 30000,
|
|
'price' => 25000.00,
|
|
'description' => 'Strong pickup for tough roads. 4x4 capability.',
|
|
'status' => 'pending',
|
|
'color' => 'Blue',
|
|
'province' => 'Kandahar',
|
|
'city' => 'Kandahar',
|
|
'image_url' => 'https://images.pexels.com/photos/919073/pexels-photo-919073.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Toyota Land Cruiser 2022',
|
|
'make' => 'Toyota',
|
|
'model' => 'Land Cruiser',
|
|
'year' => 2022,
|
|
'mileage' => 5000,
|
|
'price' => 85000.00,
|
|
'description' => 'Luxury SUV, fully loaded, V8 engine.',
|
|
'status' => 'approved',
|
|
'color' => 'White',
|
|
'province' => 'Kabul',
|
|
'city' => 'Kabul',
|
|
'image_url' => 'https://images.pexels.com/photos/205740/pexels-photo-205740.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Toyota Camry 2015 XLE',
|
|
'make' => 'Toyota',
|
|
'model' => 'Camry',
|
|
'year' => 2015,
|
|
'mileage' => 80000,
|
|
'price' => 12500.00,
|
|
'description' => 'Reliable family sedan, fuel efficient.',
|
|
'status' => 'approved',
|
|
'color' => 'Silver',
|
|
'province' => 'Mazar-i-Sharif',
|
|
'city' => 'Mazar',
|
|
'image_url' => 'https://images.pexels.com/photos/244206/pexels-photo-244206.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Hyundai Sonata 2021 Hybrid',
|
|
'make' => 'Hyundai',
|
|
'model' => 'Sonata',
|
|
'year' => 2021,
|
|
'mileage' => 12000,
|
|
'price' => 22000.00,
|
|
'description' => 'Hybrid engine, great mileage, modern tech.',
|
|
'status' => 'approved',
|
|
'color' => 'Grey',
|
|
'province' => 'Kabul',
|
|
'city' => 'Kabul',
|
|
'image_url' => 'https://images.pexels.com/photos/3764984/pexels-photo-3764984.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Mercedes-Benz C-Class 2016',
|
|
'make' => 'Mercedes-Benz',
|
|
'model' => 'C-Class',
|
|
'year' => 2016,
|
|
'mileage' => 55000,
|
|
'price' => 28000.00,
|
|
'description' => 'Luxury interior, smooth ride, imported from Germany.',
|
|
'status' => 'approved',
|
|
'color' => 'Black',
|
|
'province' => 'Herat',
|
|
'city' => 'Herat',
|
|
'image_url' => 'https://images.pexels.com/photos/116675/pexels-photo-116675.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'BMW X5 2019 xDrive',
|
|
'make' => 'BMW',
|
|
'model' => 'X5',
|
|
'year' => 2019,
|
|
'mileage' => 25000,
|
|
'price' => 55000.00,
|
|
'description' => 'Premium SUV, panoramic sunroof, leather interior.',
|
|
'status' => 'approved',
|
|
'color' => 'White',
|
|
'province' => 'Kabul',
|
|
'city' => 'Kabul',
|
|
'image_url' => 'https://images.pexels.com/photos/3752169/pexels-photo-3752169.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Kia Sportage 2020 AWD',
|
|
'make' => 'Kia',
|
|
'model' => 'Sportage',
|
|
'year' => 2020,
|
|
'mileage' => 18000,
|
|
'price' => 21000.00,
|
|
'description' => 'Compact SUV, AWD, apple carplay.',
|
|
'status' => 'approved',
|
|
'color' => 'Red',
|
|
'province' => 'Jalalabad',
|
|
'city' => 'Jalalabad',
|
|
'image_url' => 'https://images.pexels.com/photos/4062468/pexels-photo-4062468.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Nissan Sunny 2017',
|
|
'make' => 'Nissan',
|
|
'model' => 'Sunny',
|
|
'year' => 2017,
|
|
'mileage' => 60000,
|
|
'price' => 9500.00,
|
|
'description' => 'Economic car, cheap maintenance.',
|
|
'status' => 'approved',
|
|
'color' => 'White',
|
|
'province' => 'Kandahar',
|
|
'city' => 'Kandahar',
|
|
'image_url' => 'https://images.pexels.com/photos/4574184/pexels-photo-4574184.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Toyota Hilux 2021 Revo',
|
|
'make' => 'Toyota',
|
|
'model' => 'Hilux',
|
|
'year' => 2021,
|
|
'mileage' => 10000,
|
|
'price' => 42000.00,
|
|
'description' => 'Powerful diesel engine, off-road ready.',
|
|
'status' => 'approved',
|
|
'color' => 'White',
|
|
'province' => 'Kabul',
|
|
'city' => 'Kabul',
|
|
'image_url' => 'https://images.pexels.com/photos/6301931/pexels-photo-6301931.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Lexus LX570 2018',
|
|
'make' => 'Lexus',
|
|
'model' => 'LX570',
|
|
'year' => 2018,
|
|
'mileage' => 40000,
|
|
'price' => 95000.00,
|
|
'description' => 'Top of the line luxury, armored option available.',
|
|
'status' => 'approved',
|
|
'color' => 'Black',
|
|
'province' => 'Kabul',
|
|
'city' => 'Kabul',
|
|
'image_url' => 'https://images.pexels.com/photos/1592384/pexels-photo-1592384.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Suzuki Alto 2022',
|
|
'make' => 'Suzuki',
|
|
'model' => 'Alto',
|
|
'year' => 2022,
|
|
'mileage' => 5000,
|
|
'price' => 7500.00,
|
|
'description' => 'Small city car, very fuel efficient.',
|
|
'status' => 'approved',
|
|
'color' => 'Red',
|
|
'province' => 'Mazar-i-Sharif',
|
|
'city' => 'Mazar',
|
|
'image_url' => 'https://images.pexels.com/photos/35967/mini-cooper-auto-model-vehicle.jpg?auto=compress&cs=tinysrgb&w=600' // Placeholder for small car
|
|
],
|
|
[
|
|
'title' => 'Mazda 6 2019',
|
|
'make' => 'Mazda',
|
|
'model' => '6',
|
|
'year' => 2019,
|
|
'mileage' => 28000,
|
|
'price' => 19500.00,
|
|
'description' => 'Stylish sedan, premium interior.',
|
|
'status' => 'approved',
|
|
'color' => 'Blue',
|
|
'province' => 'Herat',
|
|
'city' => 'Herat',
|
|
'image_url' => 'https://images.pexels.com/photos/1007410/pexels-photo-1007410.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
],
|
|
[
|
|
'title' => 'Chevrolet Tahoe 2015',
|
|
'make' => 'Chevrolet',
|
|
'model' => 'Tahoe',
|
|
'year' => 2015,
|
|
'mileage' => 85000,
|
|
'price' => 26000.00,
|
|
'description' => 'Large family SUV, spacious, American muscle.',
|
|
'status' => 'approved',
|
|
'color' => 'Black',
|
|
'province' => 'Kabul',
|
|
'city' => 'Kabul',
|
|
'image_url' => 'https://images.pexels.com/photos/4173163/pexels-photo-4173163.jpeg?auto=compress&cs=tinysrgb&w=600'
|
|
]
|
|
];
|
|
|
|
$insertCar = $pdo->prepare("INSERT INTO cars (user_id, title, make, model, year, mileage, price, description, status, color, province, city, image_url) VALUES (:user_id, :title, :make, :model, :year, :mileage, :price, :description, :status, :color, :province, :city, :image_url)");
|
|
|
|
foreach ($carsData as $car) {
|
|
$car['user_id'] = $adminId;
|
|
$insertCar->execute($car);
|
|
}
|
|
echo "Seed data inserted (" . count($carsData) . " cars).\n";
|
|
|
|
echo "Setup complete. The application is ready to use.\n";
|
|
|
|
} catch (PDOException $e) {
|
|
die("Setup failed: " . $e->getMessage() . "\n");
|
|
} |