<?php
session_start();
// Include database configuration
require_once '../admin/database/db_config.php';
// Initialize variables
$username = $email = $password = $confirm_password = $first_name = $last_name = $phone = $bio = '';
$errors = [];
$success = false;
// Handle form submission
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Get form data
$username = trim($_POST['username']);
$email = trim($_POST['email']);
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];
$first_name = trim($_POST['first_name']);
$last_name = trim($_POST['last_name']);
$phone = trim($_POST['phone']);
$bio = trim($_POST['bio']);
// Validate form data
if (empty($username)) {
$errors[] = "Username is required";
} elseif (strlen($username) < 3) {
$errors[] = "Username must be at least 3 characters long";
}
if (empty($email)) {
$errors[] = "Email is required";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Invalid email format";
}
if (empty($password)) {
$errors[] = "Password is required";
} elseif (strlen($password) < 6) {
$errors[] = "Password must be at least 6 characters long";
}
if ($password !== $confirm_password) {
$errors[] = "Passwords do not match";
}
if (empty($first_name)) {
$errors[] = "First name is required";
}
if (empty($last_name)) {
$errors[] = "Last name is required";
}
if (empty($phone)) {
$errors[] = "Phone number is required";
}
// Check if username or email already exists
if (empty($errors)) {
$check_query = "SELECT id FROM users WHERE username = ? OR email = ?";
$check_stmt = $conn->prepare($check_query);
$check_stmt->bind_param("ss", $username, $email);
$check_stmt->execute();
$result = $check_stmt->get_result();
if ($result->num_rows > 0) {
$errors[] = "Username or email already exists";
}
}
// Handle profile image upload
if (empty($errors) && isset($_FILES['profile_image']) && $_FILES['profile_image']['error'] === UPLOAD_ERR_OK) {
$allowed_types = ['image/jpeg', 'image/png', 'image/gif'];
$max_size = 5 * 1024 * 1024; // 5MB
if (!in_array($_FILES['profile_image']['type'], $allowed_types)) {
$errors[] = "Invalid file type. Only JPG, PNG and GIF are allowed.";
} elseif ($_FILES['profile_image']['size'] > $max_size) {
$errors[] = "File size too large. Maximum size is 5MB.";
} else {
$upload_dir = '../uploads/profiles/';
if (!file_exists($upload_dir)) {
mkdir($upload_dir, 0777, true);
}
$file_extension = pathinfo($_FILES['profile_image']['name'], PATHINFO_EXTENSION);
$file_name = uniqid() . '.' . $file_extension;
$target_path = $upload_dir . $file_name;
if (!move_uploaded_file($_FILES['profile_image']['tmp_name'], $target_path)) {
$errors[] = "Failed to upload profile image";
}
}
}
// If no errors, proceed with registration
if (empty($errors)) {
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$profile_image = isset($file_name) ? $file_name : null;
$insert_query = "INSERT INTO users (username, email, password, first_name, last_name, phone, bio, profile_image, role, status, created_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'instructor', 'pending', NOW())";
$stmt = $conn->prepare($insert_query);
$stmt->bind_param("ssssssss", $username, $email, $hashed_password, $first_name, $last_name, $phone, $bio, $profile_image);
if ($stmt->execute()) {
$success = true;
$_SESSION['register_success'] = "Registration successful! Please wait for admin approval.";
header("Location: login.php");
exit;
} else {
$errors[] = "Registration failed. Please try again.";
}
}
}
// Include header
include '../includes/header.php';
?>
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card shadow-sm">
<div class="card-header bg-primary text-white">
<h4 class="mb-0">Instructor Registration</h4>
</div>
<div class="card-body">
<?php if (!empty($errors)): ?>
<div class="alert alert-danger">
<ul class="mb-0">
<?php foreach ($errors as $error): ?>
<li><?php echo $error; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form method="post" action="" enctype="multipart/form-data" class="needs-validation" novalidate>
<div class="row g-3">
<div class="col-md-6">
<label for="username" class="form-label">Username <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="username" name="username" value="<?php echo htmlspecialchars($username); ?>" required>
</div>
<div class="col-md-6">
<label for="email" class="form-label">Email <span class="text-danger">*</span></label>
<input type="email" class="form-control" id="email" name="email" value="<?php echo htmlspecialchars($email); ?>" required>
</div>
<div class="col-md-6">
<label for="password" class="form-label">Password <span class="text-danger">*</span></label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<div class="col-md-6">
<label for="confirm_password" class="form-label">Confirm Password <span class="text-danger">*</span></label>
<input type="password" class="form-control" id="confirm_password" name="confirm_password" required>
</div>
<div class="col-md-6">
<label for="first_name" class="form-label">First Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="first_name" name="first_name" value="<?php echo htmlspecialchars($first_name); ?>" required>
</div>
<div class="col-md-6">
<label for="last_name" class="form-label">Last Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="last_name" name="last_name" value="<?php echo htmlspecialchars($last_name); ?>" required>
</div>
<div class="col-md-6">
<label for="phone" class="form-label">Phone Number <span class="text-danger">*</span></label>
<input type="tel" class="form-control" id="phone" name="phone" value="<?php echo htmlspecialchars($phone); ?>" required>
</div>
<div class="col-md-6">
<label for="profile_image" class="form-label">Profile Image</label>
<input type="file" class="form-control" id="profile_image" name="profile_image" accept="image/*">
<div class="form-text">Maximum file size: 5MB. Allowed formats: JPG, PNG, GIF</div>
</div>
<div class="col-12">
<label for="bio" class="form-label">Bio</label>
<textarea class="form-control" id="bio" name="bio" rows="4"><?php echo htmlspecialchars($bio); ?></textarea>
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="terms" required>
<label class="form-check-label" for="terms">
I agree to the <a href="#">terms and conditions</a> and <a href="#">privacy policy</a>
</label>
</div>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary">Register as Instructor</button>
</div>
</div>
</form>
<div class="mt-4 text-center">
<p>Already have an account? <a href="login.php">Login here</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Form validation
(function () {
'use strict'
var forms = document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(forms).forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})()
// Password match validation
document.getElementById('confirm_password').addEventListener('input', function() {
const password = document.getElementById('password').value;
if (this.value !== password) {
this.setCustomValidity('Passwords do not match');
} else {
this.setCustomValidity('');
}
});
</script>
<?php include '../includes/footer.php'; ?>