File "read_marks_context.php"

Full path: /home2/santhos2/public_html/bharath-coe.firstmatrix.in.net/api/internal_marks/read_marks_context.php
File size: 6.66 KiB (6822 bytes)
MIME-type: text/x-php
Charset: utf-8

Download   Open   Back

<?php
require_once __DIR__ . '/../../config/config.php';
header('Content-Type: application/json');
ob_start();
try {
    $academic_year = isset($_GET['academic_year']) ? trim($_GET['academic_year']) : '';
    $course_id = isset($_GET['course_id']) ? (int)$_GET['course_id'] : 0;
    $semester = isset($_GET['semester']) ? (int)$_GET['semester'] : 0;
    $subject_id = isset($_GET['subject_id']) ? (int)$_GET['subject_id'] : 0;
    if (!$academic_year || !$course_id || !$semester || !$subject_id) { echo json_encode(['status'=>'error','message'=>'Missing params']); exit; }
    global $pdo;

    // Get subject's course info
    $stmt = $pdo->prepare("SELECT course_id, (SELECT course_name FROM courses WHERE courses.course_id=subjects.course_id) as course_name FROM subjects WHERE subject_id=?");
    $stmt->execute([$subject_id]);
    $subject_row = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if(!$subject_row){
        echo json_encode(['status'=>'error','message'=>'Subject not found']);
        exit;
    }
    
    $subject_course_id = $subject_row['course_id'];
    $subject_course_name = $subject_row['course_name'];
    
    // Determine which course to use for settings
    $use_course_id = $subject_course_id;
    $use_course_name = $subject_course_name;
    $force_course_valid = false;
    
    // Check if force_course_id is requested
    $force_course_id = isset($_GET['force_course_id']) ? (int)$_GET['force_course_id'] : 0;
    if($force_course_id > 0) {
        $stmt = $pdo->prepare("SELECT course_name FROM courses WHERE course_id=?");
        $stmt->execute([$force_course_id]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        if($row) {
            $use_course_id = $force_course_id;
            $use_course_name = $row['course_name'];
            $force_course_valid = true;
        }
    }
    
    // Get course assessment settings
    $exam_type = isset($_GET['exam_type']) ? $_GET['exam_type'] : 'Semester';
    $stmt = $pdo->prepare("SELECT max_marks, pass_marks, min_marks FROM course_assessment_settings WHERE course_id=? AND exam_type=? ORDER BY setting_id DESC LIMIT 1");
    $stmt->execute([$use_course_id, $exam_type]);
    $settings = $stmt->fetch(PDO::FETCH_ASSOC);
    if(!$settings){ 
        $settings = ['max_marks'=>20,'pass_marks'=>10,'min_marks'=>0]; 
    }
    
    // Get CI settings for this course (use the correct course ID)
    $stmt = $pdo->prepare("SELECT ci1_max_marks, ci2_max_marks, ci3_max_marks, calculation_method FROM ci_assessment_settings WHERE course_id=? AND exam_type=? ORDER BY setting_id DESC LIMIT 1");
    $stmt->execute([$use_course_id, $exam_type]);
    $ciSettings = $stmt->fetch(PDO::FETCH_ASSOC);
    if(!$ciSettings){
        $ciSettings = ['ci1_max_marks'=>10,'ci2_max_marks'=>10,'ci3_max_marks'=>10, 'calculation_method'=>'best2_avg'];
    }

    // Get students for the course and semester
    $stmt = $pdo->prepare("SELECT student_id, university_rollno, first_name, last_name FROM students WHERE course_id=? AND current_semester=? AND status='Active' ORDER BY university_rollno");
    $stmt->execute([$use_course_id, $semester]);
    $students = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // existing internal marks aggregated for CI1, CI2, CI3 using internal_exams.exam_type_id as 1,2,3
    $saved_only = isset($_GET['saved_only']) ? (int)$_GET['saved_only'] : 0;
    
    // Fix the academic year format to match what's stored in internal_exams table
    // Ensure the format matches what's in internal_exams table: "2025-2026 - Even"
    // If it doesn't have the dash before Even/Odd, add it
    $ay_term = $academic_year;
    if (preg_match('/^(\d{4}-\d{4})\s+(Even|Odd)$/', $ay_term, $matches)) {
        $ay_term = $matches[1] . ' - ' . $matches[2];
    }
    
    $ay_base = preg_replace('/\\s+(Odd|Even)$/','', $ay_term);
    $stmt = $pdo->prepare(
      "SELECT base.student_id, base.ci1, base.ci2, base.ci3,
              a1.attendance_pct AS ci1_att,
              a2.attendance_pct AS ci2_att,
              a3.attendance_pct AS ci3_att
       FROM (
         SELECT im.student_id,
                MAX(CASE WHEN et.type_name='CI1' THEN im.marks_obtained END) AS ci1,
                MAX(CASE WHEN et.type_name='CI2' THEN im.marks_obtained END) AS ci2,
                MAX(CASE WHEN et.type_name='CI3' THEN im.marks_obtained END) AS ci3
         FROM internal_marks im
         JOIN internal_exams ie ON im.internal_exam_id = ie.internal_exam_id
         JOIN exam_types et ON ie.exam_type_id = et.exam_type_id
         WHERE ie.subject_id=? AND ie.academic_year IN (?, ?) AND ie.semester=?
         GROUP BY im.student_id
       ) base
       LEFT JOIN internal_exams ie1 ON ie1.subject_id=? AND ie1.academic_year IN (?, ?) AND ie1.semester=?
         AND ie1.exam_type_id = (SELECT exam_type_id FROM exam_types WHERE type_name='CI1' LIMIT 1)
       LEFT JOIN internal_exams ie2 ON ie2.subject_id=? AND ie2.academic_year IN (?, ?) AND ie2.semester=?
         AND ie2.exam_type_id = (SELECT exam_type_id FROM exam_types WHERE type_name='CI2' LIMIT 1)
       LEFT JOIN internal_exams ie3 ON ie3.subject_id=? AND ie3.academic_year IN (?, ?) AND ie3.semester=?
         AND ie3.exam_type_id = (SELECT exam_type_id FROM exam_types WHERE type_name='CI3' LIMIT 1)
       LEFT JOIN internal_ci_attendance a1 ON a1.internal_exam_id = ie1.internal_exam_id AND a1.student_id = base.student_id
       LEFT JOIN internal_ci_attendance a2 ON a2.internal_exam_id = ie2.internal_exam_id AND a2.student_id = base.student_id
       LEFT JOIN internal_ci_attendance a3 ON a3.internal_exam_id = ie3.internal_exam_id AND a3.student_id = base.student_id"
      . ($saved_only ? " WHERE (base.ci1 IS NOT NULL OR base.ci2 IS NOT NULL OR base.ci3 IS NOT NULL OR a1.attendance_pct IS NOT NULL OR a2.attendance_pct IS NOT NULL OR a3.attendance_pct IS NOT NULL)" : "")
    );
    $stmt->execute([$subject_id, $ay_term, $ay_base, $semester,
                    $subject_id, $ay_term, $ay_base, $semester,
                    $subject_id, $ay_term, $ay_base, $semester,
                    $subject_id, $ay_term, $ay_base, $semester]);
    $marks = $stmt->fetchAll(PDO::FETCH_ASSOC);

    echo json_encode([
        'status'=>'success',
        'settings'=>$settings,
        'ci_settings'=>$ciSettings,
        'students'=>$students,
        'marks'=>$marks,
        'subject_course_id'=>$subject_course_id,
        'subject_course_name'=>$subject_course_name,
        'used_course_id'=>$use_course_id,
        'used_course_name'=>$use_course_name,
        'force_course_id'=>$force_course_id,
        'force_course_valid'=>$force_course_valid
    ]);
} catch (Throwable $e) {
    error_log('read_marks_context error: '.$e->getMessage());
    http_response_code(500);
    echo json_encode(['status'=>'error','message'=>$e->getMessage()]);
}
ob_end_flush();
?>

PHP File Manager