File "sync_all_exams.php"
Full path: /home2/santhos2/public_html/bharath-coe.firstmatrix.in.net/api/exam_subjects/sync_all_exams.php
File size: 3.76 KiB (3852 bytes)
MIME-type: text/x-php
Charset: utf-8
<?php
require_once '../../config/config.php';
header('Content-Type: application/json');
try {
// Get all active exams
$examsSql = "SELECT e.exam_id, e.exam_name, e.academic_year, e.semester, c.course_id, c.course_name
FROM exams e
LEFT JOIN courses c ON c.course_id = e.course_id
WHERE e.status = 'Active'
ORDER BY e.academic_year, c.course_name, e.semester";
$examsStmt = $pdo->prepare($examsSql);
$examsStmt->execute();
$exams = $examsStmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($exams)) {
echo json_encode(['success' => false, 'message' => 'No active exams found']);
exit;
}
$totalSynced = 0;
$examsProcessed = 0;
$errors = [];
$skippedExams = [];
foreach ($exams as $exam) {
if (!$exam['course_id']) {
$skippedExams[] = "Exam '{$exam['exam_name']}' is not associated with any course";
continue;
}
// Get subjects for this course and 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([$exam['course_id'], $exam['semester']]);
$subjects = $subjectsStmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($subjects)) {
$skippedExams[] = "No subjects found for exam '{$exam['exam_name']}' (Course: {$exam['course_name']}, Semester: {$exam['semester']})";
continue;
}
// Check existing exam subjects for this exam
$existingSql = "SELECT subject_id FROM exam_subjects WHERE exam_id = ?";
$existingStmt = $pdo->prepare($existingSql);
$existingStmt->execute([$exam['exam_id']]);
$existingSubjects = $existingStmt->fetchAll(PDO::FETCH_COLUMN);
$examSyncedCount = 0;
// Insert subjects that don't already exist
foreach ($subjects as $subject) {
if (in_array($subject['subject_id'], $existingSubjects)) {
continue; // Skip existing subjects
}
try {
$insertSql = "INSERT INTO exam_subjects (exam_id, subject_id, max_marks, pass_marks, status, created_at, updated_at)
VALUES (?, ?, 100, 40, 'Active', NOW(), NOW())";
$insertStmt = $pdo->prepare($insertSql);
$insertStmt->execute([$exam['exam_id'], $subject['subject_id']]);
$examSyncedCount++;
$totalSynced++;
} catch (Exception $e) {
$errors[] = "Failed to insert subject '{$subject['subject_name']}' for exam '{$exam['exam_name']}': " . $e->getMessage();
}
}
if ($examSyncedCount > 0) {
$examsProcessed++;
}
}
// Prepare response
$response = [
'success' => true,
'total_synced' => $totalSynced,
'exams_processed' => $examsProcessed,
'total_exams' => count($exams),
'skipped_exams' => count($skippedExams)
];
if (!empty($errors)) {
$response['warnings'] = $errors;
}
if (!empty($skippedExams)) {
$response['skipped_details'] = $skippedExams;
}
echo json_encode($response);
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => 'Database error: ' . $e->getMessage()]);
}
?>