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

Download   Open   Back

<?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()]);
}
?>



















PHP File Manager