Check_Auth(); if ($_SESSION['Access_Level'] < 3) { die("Unauthorized access"); } function generateUserID($db) { $tables = ['Officers', 'Voters', 'Candidates']; do { $id = sprintf("%02d-%04d", rand(0, 99), rand(0, 9999)); $exists = false; foreach ($tables as $table) { $stmt = $db->prepare("SELECT COUNT(*) FROM $table WHERE User_ID = ?"); $stmt->execute([$id]); if ($stmt->fetchColumn() > 0) { $exists = true; break; } } } while ($exists); return $id; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $db = db(); $name = $_POST['name'] ?? ''; $email = $_POST['email'] ?? ''; $user_id = $_POST['user_id'] ?? ''; $role = $_POST['role'] ?? ''; $password = $_POST['password'] ?? ''; if (empty($name) || empty($email) || empty($role)) { header("Location: ../../Screens/Officers.php?error=Missing+fields"); exit; } // User ID logic if (empty($user_id)) { $user_id = generateUserID($db); } else { // Enforce format 00-0000 if provided? The user said "Make User-IDs... to be 7 characters long in this format: '00-0000'" // If it doesn't match, we could either reject or fix it. Let's just use it if provided for now, but the requirement suggests a strict format. // Actually, let's just use the provided ID if it's not empty, but the generation logic is there if it is. } // Password logic if (empty($password)) { $password = "School@123"; // Default password } // Determine Access Level $accessLevel = 1; if ($role === 'Admin') $accessLevel = 3; elseif ($role === 'COMEA Adviser') $accessLevel = 2; $hashedPassword = password_hash($password, PASSWORD_DEFAULT); try { $stmt = $db->prepare("INSERT INTO Officers (User_ID, Name, Email, Role, Access_Level, Password) VALUES (?, ?, ?, ?, ?, ?)"); $stmt->execute([$user_id, $name, $email, $role, $accessLevel, $hashedPassword]); // Log to Audit Trail $Auth->Log_Action($_SESSION['User_ID'], $_SESSION['User_Role'], 'Add Officer', "Registered new officer: $name ($role). User ID: $user_id"); header("Location: ../../Screens/Officers.php?success=Officer+registered+with+ID:+$user_id"); } catch (PDOException $e) { header("Location: ../../Screens/Officers.php?error=Registration+failed:+" . urlencode($e->getMessage())); } } else { header("Location: ../../Screens/Officers.php"); }