<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Check if already installed
if (file_exists('../installed.php')) {
header('Location: login.php');
exit;
}
// Database configuration
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'pop';
// Function to test database connection
function testConnection($host, $user, $pass) {
try {
$conn = new mysqli($host, $user, $pass);
if ($conn->connect_error) {
return false;
}
return true;
} catch (Exception $e) {
return false;
}
}
// Function to create database and tables
function createDatabase($host, $user, $pass, $dbname) {
try {
$conn = new mysqli($host, $user, $pass);
// Create database if not exists
$sql = "CREATE DATABASE IF NOT EXISTS $dbname";
if (!$conn->query($sql)) {
throw new Exception("Error creating database: " . $conn->error);
}
// Select the database
$conn->select_db($dbname);
// Create users table
$sql = "CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'instructor', 'student') NOT NULL,
first_name VARCHAR(50),
last_name VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
if (!$conn->query($sql)) {
throw new Exception("Error creating users table: " . $conn->error);
}
// Create courses table
$sql = "CREATE TABLE IF NOT EXISTS courses (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT,
instructor_id INT,
price DECIMAL(10,2) NOT NULL,
image_url VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (instructor_id) REFERENCES users(id)
)";
if (!$conn->query($sql)) {
throw new Exception("Error creating courses table: " . $conn->error);
}
// Create enrollments table
$sql = "CREATE TABLE IF NOT EXISTS enrollments (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
enrollment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('active', 'completed', 'dropped') DEFAULT 'active',
FOREIGN KEY (student_id) REFERENCES users(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
)";
if (!$conn->query($sql)) {
throw new Exception("Error creating enrollments table: " . $conn->error);
}
// Create submissions table
$sql = "CREATE TABLE IF NOT EXISTS submissions (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
submission_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
grade DECIMAL(5,2),
feedback TEXT,
FOREIGN KEY (student_id) REFERENCES users(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
)";
if (!$conn->query($sql)) {
throw new Exception("Error creating submissions table: " . $conn->error);
}
// Create payments table
$sql = "CREATE TABLE IF NOT EXISTS payments (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
amount DECIMAL(10,2) NOT NULL,
payment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('pending', 'completed', 'failed') DEFAULT 'pending',
FOREIGN KEY (student_id) REFERENCES users(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
)";
if (!$conn->query($sql)) {
throw new Exception("Error creating payments table: " . $conn->error);
}
// Create slider_images table
$sql = "CREATE TABLE IF NOT EXISTS slider_images (
id INT PRIMARY KEY AUTO_INCREMENT,
image_url VARCHAR(255) NOT NULL,
title VARCHAR(255),
description TEXT,
link_url VARCHAR(255),
order_number INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
if (!$conn->query($sql)) {
throw new Exception("Error creating slider_images table: " . $conn->error);
}
return true;
} catch (Exception $e) {
return false;
}
}
// Function to create admin user
function createAdminUser($host, $user, $pass, $dbname, $admin_data) {
try {
$conn = new mysqli($host, $user, $pass, $dbname);
$username = $conn->real_escape_string($admin_data['username']);
$email = $conn->real_escape_string($admin_data['email']);
$password = password_hash($admin_data['password'], PASSWORD_DEFAULT);
$first_name = $conn->real_escape_string($admin_data['first_name']);
$last_name = $conn->real_escape_string($admin_data['last_name']);
$sql = "INSERT INTO users (username, email, password, role, first_name, last_name)
VALUES ('$username', '$email', '$password', 'admin', '$first_name', '$last_name')";
if (!$conn->query($sql)) {
throw new Exception("Error creating admin user: " . $conn->error);
}
return true;
} catch (Exception $e) {
return false;
}
}
// Handle form submission
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$errors = [];
// Validate database configuration
if (empty($_POST['db_host'])) $errors[] = "Database host is required";
if (empty($_POST['db_user'])) $errors[] = "Database username is required";
if (empty($_POST['db_name'])) $errors[] = "Database name is required";
// Validate admin account
if (empty($_POST['username'])) $errors[] = "Admin username is required";
if (empty($_POST['email'])) $errors[] = "Admin email is required";
if (empty($_POST['password'])) $errors[] = "Admin password is required";
if (empty($_POST['first_name'])) $errors[] = "First name is required";
if (empty($_POST['last_name'])) $errors[] = "Last name is required";
if (empty($errors)) {
// Test database connection
if (testConnection($_POST['db_host'], $_POST['db_user'], $_POST['db_pass'])) {
// Create database and tables
if (createDatabase($_POST['db_host'], $_POST['db_user'], $_POST['db_pass'], $_POST['db_name'])) {
// Create admin user
if (createAdminUser($_POST['db_host'], $_POST['db_user'], $_POST['db_pass'], $_POST['db_name'], $_POST)) {
// Create database.php configuration file
$config_content = "<?php
define('DB_HOST', '" . $_POST['db_host'] . "');
define('DB_USER', '" . $_POST['db_user'] . "');
define('DB_PASS', '" . $_POST['db_pass'] . "');
define('DB_NAME', '" . $_POST['db_name'] . "');
";
if (file_put_contents('../config/database.php', $config_content)) {
// Create installed.php marker
if (file_put_contents('../installed.php', '<?php return true;')) {
// Redirect to login page
header('Location: login.php');
exit;
}
}
}
}
}
$errors[] = "Failed to complete installation. Please check your database credentials.";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Install Learning Management System</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
body {
background-color: #f8f9fa;
}
.install-container {
max-width: 800px;
margin: 50px auto;
padding: 20px;
background: white;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.section-title {
color: #0d6efd;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid #0d6efd;
}
</style>
</head>
<body>
<div class="container">
<div class="install-container">
<h1 class="text-center mb-4">Install Learning Management System</h1>
<?php if (!empty($errors)): ?>
<div class="alert alert-danger">
<ul class="mb-0">
<?php foreach ($errors as $error): ?>
<li><?php echo htmlspecialchars($error); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form method="POST" action="">
<div class="mb-4">
<h3 class="section-title">Database Configuration</h3>
<div class="mb-3">
<label for="db_host" class="form-label">Database Host</label>
<input type="text" class="form-control" id="db_host" name="db_host" value="<?php echo htmlspecialchars($db_host); ?>" required>
</div>
<div class="mb-3">
<label for="db_user" class="form-label">Database Username</label>
<input type="text" class="form-control" id="db_user" name="db_user" value="<?php echo htmlspecialchars($db_user); ?>" required>
</div>
<div class="mb-3">
<label for="db_pass" class="form-label">Database Password</label>
<input type="password" class="form-control" id="db_pass" name="db_pass" value="<?php echo htmlspecialchars($db_pass); ?>">
</div>
<div class="mb-3">
<label for="db_name" class="form-label">Database Name</label>
<input type="text" class="form-control" id="db_name" name="db_name" value="<?php echo htmlspecialchars($db_name); ?>" required>
</div>
</div>
<div class="mb-4">
<h3 class="section-title">Admin Account Setup</h3>
<div class="mb-3">
<label for="username" class="form-label">Admin Username</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="mb-3">
<label for="email" class="form-label">Admin Email</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Admin Password</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<div class="mb-3">
<label for="first_name" class="form-label">First Name</label>
<input type="text" class="form-control" id="first_name" name="first_name" required>
</div>
<div class="mb-3">
<label for="last_name" class="form-label">Last Name</label>
<input type="text" class="form-control" id="last_name" name="last_name" required>
</div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary btn-lg">Install System</button>
</div>
</form>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>