prepare("SELECT user_id FROM teachers WHERE id = ? AND school_id = ?"); $stmt->execute([$delete_id, $school_id]); $user_id = $stmt->fetchColumn(); $pdo->beginTransaction(); $stmt = $pdo->prepare("DELETE FROM teachers WHERE id = ?"); $stmt->execute([$delete_id]); if ($user_id) { $stmt = $pdo->prepare("DELETE FROM users WHERE id = ?"); $stmt->execute([$user_id]); } $pdo->commit(); $message = "Teacher deleted successfully."; } catch (PDOException $e) { $pdo->rollBack(); if ($e->getCode() == '23000') { // Integrity constraint violation $error = "Cannot delete this teacher because they are assigned to workloads or schedules. Please remove those associations before deleting."; } else { $error = "Error deleting teacher: " . $e->getMessage(); } } } // Handle POST request to add or update a teacher if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['teacher_name'])) { $teacherName = trim($_POST['teacher_name']); $teacherEmail = trim($_POST['teacher_email']); $password = $_POST['password'] ?? null; $teacher_id = $_POST['teacher_id'] ?? null; if (empty($teacherName) || empty($teacherEmail)) { $error = 'Teacher name and email are required.'; } elseif (!filter_var($teacherEmail, FILTER_VALIDATE_EMAIL)) { $error = 'Invalid email format.'; } elseif (!$teacher_id && empty($password)) { $error = 'Password is required for new teachers.'; } else { try { $pdo->beginTransaction(); // Check for duplicate teacher name $stmt = $pdo->prepare("SELECT id FROM teachers WHERE name = ? AND school_id = ? AND id != ?"); $stmt->execute([$teacherName, $school_id, $teacher_id ?? 0]); if ($stmt->fetch()) { throw new Exception("A teacher with this name already exists."); } if ($teacher_id) { // Update existing teacher $stmt = $pdo->prepare("UPDATE teachers SET name = ? WHERE id = ? AND school_id = ?"); $stmt->execute([$teacherName, $teacher_id, $school_id]); // Also update user email $stmt = $pdo->prepare("SELECT user_id FROM teachers WHERE id = ?"); $stmt->execute([$teacher_id]); $user_id = $stmt->fetchColumn(); if ($user_id) { $sql = "UPDATE users SET email = ?, username = ?"; $params = [$teacherEmail, $teacherEmail]; if (!empty($password)) { $sql .= ", password = ?"; $params[] = password_hash($password, PASSWORD_DEFAULT); } $sql .= " WHERE id = ?"; $params[] = $user_id; $stmt = $pdo->prepare($sql); $stmt->execute($params); } $message = "Teacher updated successfully!"; } else { // Check for duplicate email in users table $stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?"); $stmt->execute([$teacherEmail]); if ($stmt->fetch()) { throw new Exception("A user with this email already exists."); } // Insert new user $hashed_password = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (school_id, username, email, password, role) VALUES (?, ?, ?, ?, 'teacher')"); $stmt->execute([$school_id, $teacherEmail, $teacherEmail, $hashed_password]); $user_id = $pdo->lastInsertId(); // Insert new teacher $stmt = $pdo->prepare("INSERT INTO teachers (name, school_id, user_id) VALUES (?, ?, ?)"); $stmt->execute([$teacherName, $school_id, $user_id]); $message = "Teacher created successfully!"; } $pdo->commit(); } catch (Exception $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } $error = $e->getMessage(); } } } // Handle Edit request if (isset($_GET['edit_id'])) { try { $edit_id = $_GET['edit_id']; $stmt = $pdo->prepare("SELECT t.*, u.email FROM teachers t LEFT JOIN users u ON t.user_id = u.id WHERE t.id = ? AND t.school_id = ?"); $stmt->execute([$edit_id, $school_id]); $editing_teacher = $stmt->fetch(PDO::FETCH_ASSOC); } catch (PDOException $e) { $error = "Error fetching teacher: " . $e->getMessage(); } } // Fetch all teachers to display $teachers = []; try { $teachers_stmt = $pdo->prepare("SELECT t.*, u.email FROM teachers t LEFT JOIN users u ON t.user_id = u.id WHERE t.school_id = ? ORDER BY t.name ASC"); $teachers_stmt->execute([$school_id]); $teachers = $teachers_stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $error = 'Database error: ' . $e->getMessage(); } // Check for teachers with no user account linked $unlinked_teachers = []; foreach ($teachers as $teacher) { if (empty($teacher['user_id'])) { $unlinked_teachers[] = $teacher['name']; } } if (!empty($unlinked_teachers)) { $unlinked_list = ''; $error .= '
Data Inconsistency Found: The following teachers are not linked to a user account and will not be able to log in or see their timetables: ' . $unlinked_list . ' To fix this, please delete these teachers and create them again. This will create a linked user account for them.
'; } ?> Admin: Manage Teachers - Haki Schedule

Manage Teachers

> Leave blank to keep the current password.
Cancel Edit
Existing Teachers

No teachers have been created yet.

Name Email Actions
! Edit