Path : /home/vishqocm/pcib.in/admin/
File Upload :
Current File : /home/vishqocm/pcib.in/admin/install.php

<?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>