/home/techb158/workloadmatch.com/api/routes
NameSizeModeActions
ai_generate.php116420644editdlrm
assignments.php99310644editdlrm
auth.php66970644editdlrm
chat.php99340644editdlrm
courses.php72250644editdlrm
coursesessions.php67050644editdlrm
dashboard.php62320644editdlrm
groups.php110990644editdlrm
logs.php35870644editdlrm
managers.php96120644editdlrm
masters.php66850644editdlrm
notifications.php59750644editdlrm
preferences.php64870644editdlrm
programs.php48820644editdlrm
reports.php136960644editdlrm
roles.php85160644editdlrm
schedules.php110420644editdlrm
settings.php42950644editdlrm
teachers.php160130644editdlrm
timeslots.php48070644editdlrm
Edit: /home/techb158/workloadmatch.com/api/routes/preferences.php (6487B)
prepare($sql); if ($params) $stmt->bind_param($types, ...$params); $stmt->execute(); $stmt->bind_result($total); $stmt->fetch(); $stmt->close(); $sql = "SELECT tp.*, tr.First_Name, tr.Last_Name, c.Course_Name, c.Course_Code, p.Program_Name FROM teacher_preferences tp LEFT JOIN teacher_profile tr ON tr.Teacher_ID = tp.Teacher_ID LEFT JOIN Courses c ON c.Course_ID = tp.Course_ID LEFT JOIN Programs p ON p.Program_ID = tp.Program_ID $whereClause ORDER BY tp.Teacher_ID, tp.Preference_Order LIMIT ? OFFSET ?"; $stmt = $mysqli->prepare($sql); $bindParams = array_merge($params, [$perPage, $offset]); $bindTypes = $types . 'ii'; if ($bindParams) $stmt->bind_param($bindTypes, ...$bindParams); $stmt->execute(); $result = $stmt->get_result(); $items = $result->fetch_all(MYSQLI_ASSOC); $stmt->close(); Response::paginated($items, $total, $page, $perPage); } function getTeacherPreferences(string $teacherId, mysqli $mysqli): void { Auth::requireLogin(); // Teachers can only view their own preferences $currentUserId = Auth::getUserId(); if (Auth::getUserType() === 'teacher_profile' && $currentUserId !== $teacherId) { Response::forbidden('You can only view your own preferences'); } $stmt = $mysqli->prepare(" SELECT tp.*, c.Course_Name, c.Course_Code, c.Course_Time, p.Program_Name FROM teacher_preferences tp LEFT JOIN Courses c ON c.Course_ID = tp.Course_ID LEFT JOIN Programs p ON p.Program_ID = tp.Program_ID WHERE tp.Teacher_ID = ? ORDER BY tp.Program_ID, tp.Preference_Order "); $stmt->bind_param('i', $teacherId); $stmt->execute(); $result = $stmt->get_result(); $items = $result->fetch_all(MYSQLI_ASSOC); $stmt->close(); // Group by program $grouped = []; foreach ($items as $item) { $programId = $item['Program_ID']; if (!isset($grouped[$programId])) { $grouped[$programId] = [ 'Program_ID' => $programId, 'Program_Name' => $item['Program_Name'], 'courses' => [], ]; } $grouped[$programId]['courses'][] = $item; } Response::success([ 'teacher_id' => $teacherId, 'preferences' => array_values($grouped), ]); } function savePreferences(?string $teacherId, ?array $body, mysqli $mysqli): void { $user = Auth::requireLogin(); // Teachers can only save their own preferences if (Auth::getUserType() === 'teacher_profile') { $teacherId = Auth::getUserId(); } if (!$teacherId) Response::error('Teacher ID required'); if (!$body || !isset($body['courses']) || !is_array($body['courses'])) { Response::validationError(['courses' => 'Array of course preferences required']); } $programId = $body['Program_ID'] ?? null; $courses = $body['courses']; // Delete existing preferences $stmt = $mysqli->prepare("DELETE FROM teacher_preferences WHERE Teacher_ID = ?" . ($programId ? " AND Program_ID = ?" : "")); if ($programId) { $stmt->bind_param('ii', $teacherId, $programId); } else { $stmt->bind_param('i', $teacherId); } $stmt->execute(); $stmt->close(); // Insert new preferences $inserted = 0; foreach ($courses as $order => $pref) { $courseId = $pref['Course_ID'] ?? $pref; $prefProgramId = $pref['Program_ID'] ?? $programId; $prefLevel = $pref['Preference_Level'] ?? $pref['level'] ?? null; $prefOrder = $pref['Preference_Order'] ?? $pref['order'] ?? ($order + 1); $stmt = $mysqli->prepare("INSERT INTO teacher_preferences (Teacher_ID, Course_ID, Program_ID, Preference_Level, Preference_Order) VALUES (?, ?, ?, ?, ?)"); $stmt->bind_param('iiisi', $teacherId, $courseId, $prefProgramId, $prefLevel, $prefOrder); $stmt->execute(); $stmt->close(); $inserted++; } log_activity($mysqli, 'save', 'preferences', $teacherId, "Teacher $teacherId saved $inserted preferences", 'Preferences saved via API'); Response::success([ 'teacher_id' => $teacherId, 'courses_saved' => $inserted, ], 'Preferences saved successfully'); } function deletePreferences(?string $teacherId, mysqli $mysqli): void { Auth::requireAnyRole(['admin_profile', 'master_profile', 'manager_profile']); if (!$teacherId) Response::error('Teacher ID required'); $programId = $_GET['program_id'] ?? null; $stmt = $mysqli->prepare("DELETE FROM teacher_preferences WHERE Teacher_ID = ?" . ($programId ? " AND Program_ID = ?" : "")); if ($programId) { $stmt->bind_param('ii', $teacherId, $programId); } else { $stmt->bind_param('i', $teacherId); } $stmt->execute(); $deleted = $mysqli->affected_rows; $stmt->close(); log_activity($mysqli, 'delete', 'preferences', $teacherId, "Deleted $deleted preferences", 'Preferences deleted via API'); Response::success(null, "Deleted $deleted preference(s)"); }