File "sync_subjects_by_course.php"
Full path: /home2/santhos2/public_html/bharath-coe.firstmatrix.in.net/api/exam_subjects/sync_subjects_by_course.php
File size: 3.64 KiB (3727 bytes)
MIME-type: text/x-php
Charset: utf-8
<?php
require_once '../../config/config.php';
header('Content-Type: application/json');
try {
$examId = $_POST['exam_id'] ?? '';
$courseId = $_POST['course_id'] ?? '';
if (!$examId) {
echo json_encode(['success' => false, 'message' => 'Exam ID is required']);
exit;
}
if (!$courseId) {
echo json_encode(['success' => false, 'message' => 'Course ID is required']);
exit;
}
// Get exam details
$examSql = "SELECT e.exam_id, e.exam_name, e.academic_year, e.semester
FROM exams e
WHERE e.exam_id = ?";
$examStmt = $pdo->prepare($examSql);
$examStmt->execute([$examId]);
$exam = $examStmt->fetch(PDO::FETCH_ASSOC);
if (!$exam) {
echo json_encode(['success' => false, 'message' => 'Exam not found']);
exit;
}
// Get course details
$courseSql = "SELECT course_id, course_name FROM courses WHERE course_id = ? AND status = 'Active'";
$courseStmt = $pdo->prepare($courseSql);
$courseStmt->execute([$courseId]);
$course = $courseStmt->fetch(PDO::FETCH_ASSOC);
if (!$course) {
echo json_encode(['success' => false, 'message' => 'Course not found']);
exit;
}
// Get subjects for this specific course and exam's semester
$subjectsSql = "SELECT s.subject_id, s.subject_name, s.subject_code
FROM subjects s
WHERE s.course_id = ? AND s.semester = ?
ORDER BY s.subject_name";
$subjectsStmt = $pdo->prepare($subjectsSql);
$subjectsStmt->execute([$courseId, $exam['semester']]);
$subjects = $subjectsStmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($subjects)) {
echo json_encode(['success' => false, 'message' => "No subjects found for course '{$course['course_name']}' in semester {$exam['semester']}"]);
exit;
}
// Check which subjects already exist for this exam
$existingSql = "SELECT subject_id FROM exam_subjects WHERE exam_id = ?";
$existingStmt = $pdo->prepare($existingSql);
$existingStmt->execute([$examId]);
$existingSubjects = $existingStmt->fetchAll(PDO::FETCH_COLUMN);
$syncedCount = 0;
$skippedCount = 0;
$errors = [];
// Insert subjects that don't already exist
foreach ($subjects as $subject) {
if (in_array($subject['subject_id'], $existingSubjects)) {
$skippedCount++;
continue;
}
try {
$insertSql = "INSERT INTO exam_subjects (exam_id, subject_id, max_marks, pass_marks)
VALUES (?, ?, 100, 40)";
$insertStmt = $pdo->prepare($insertSql);
$insertStmt->execute([$examId, $subject['subject_id']]);
$syncedCount++;
} catch (Exception $e) {
$errors[] = "Failed to insert subject {$subject['subject_name']}: " . $e->getMessage();
}
}
// Prepare response
$response = [
'success' => true,
'synced_count' => $syncedCount,
'skipped_count' => $skippedCount,
'total_subjects' => count($subjects),
'exam_name' => $exam['exam_name'],
'course_name' => $course['course_name'],
'semester' => $exam['semester']
];
if (!empty($errors)) {
$response['warnings'] = $errors;
}
echo json_encode($response);
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => 'Database error: ' . $e->getMessage()]);
}
?>