File "initialize.php"
Full path: /home2/santhos2/public_html/bharath-coe.firstmatrix.in.net/api/exam_attendance/initialize.php
File size: 4.45 KiB (4561 bytes)
MIME-type: text/x-php
Charset: utf-8
<?php
header('Content-Type: application/json');
require_once '../../config/config.php';
try {
$input = json_decode(file_get_contents('php://input'), true);
$exam_id = $input['exam_id'] ?? null;
$academic_year = $input['academic_year'] ?? null;
$default_status = $input['default_status'] ?? 'Present';
$force_update = $input['force_update'] ?? false;
if (!$exam_id && !$academic_year) {
echo json_encode([
'status' => 'error',
'message' => 'Either exam_id or academic_year is required'
]);
exit;
}
$whereConditions = [];
$params = [];
if ($exam_id) {
$whereConditions[] = "es.exam_id = ?";
$params[] = $exam_id;
}
if ($academic_year) {
$whereConditions[] = "e.academic_year = ?";
$params[] = $academic_year;
}
$whereClause = "WHERE " . implode(" AND ", $whereConditions);
// Get all registrations that need attendance records
$query = "SELECT sr.registration_id, et.timetable_id, s.first_name, s.last_name, s.university_rollno,
sub.subject_name, et.exam_date, et.session
FROM student_registrations sr
JOIN exam_subjects es ON sr.exam_subject_id = es.exam_subject_id
JOIN exams e ON es.exam_id = e.exam_id
JOIN exam_timetable et ON es.exam_subject_id = et.exam_subject_id
JOIN students s ON sr.student_id = s.student_id
JOIN subjects sub ON es.subject_id = sub.subject_id
$whereClause
ORDER BY et.exam_date, et.session, s.university_rollno";
$stmt = $pdo->prepare($query);
$stmt->execute($params);
$registrations = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($registrations)) {
echo json_encode([
'status' => 'error',
'message' => 'No registrations found for the specified criteria'
]);
exit;
}
$results = [
'created' => 0,
'updated' => 0,
'skipped' => 0,
'errors' => []
];
foreach ($registrations as $reg) {
try {
// Check if attendance record already exists
$existing = $pdo->prepare("SELECT attendance_id, attendance_status FROM tbl_exam_attendance WHERE registration_id = ?");
$existing->execute([$reg['registration_id']]);
$existingRecord = $existing->fetch(PDO::FETCH_ASSOC);
if ($existingRecord) {
if ($force_update) {
// Update existing record
$update = $pdo->prepare("UPDATE tbl_exam_attendance
SET attendance_status = ?, marked_at = CURRENT_TIMESTAMP
WHERE registration_id = ?");
$update->execute([$default_status, $reg['registration_id']]);
$results['updated']++;
} else {
$results['skipped']++;
}
} else {
// Create new attendance record
$insert = $pdo->prepare("INSERT INTO tbl_exam_attendance
(registration_id, timetable_id, attendance_status)
VALUES (?, ?, ?)");
$insert->execute([$reg['registration_id'], $reg['timetable_id'], $default_status]);
$results['created']++;
}
} catch (Exception $e) {
$results['errors'][] = "Error processing registration {$reg['registration_id']}: " . $e->getMessage();
}
}
$message = "Attendance initialization completed. Created: {$results['created']}, Updated: {$results['updated']}, Skipped: {$results['skipped']}";
if (!empty($results['errors'])) {
$message .= ". Errors: " . count($results['errors']);
}
echo json_encode([
'status' => 'success',
'message' => $message,
'data' => [
'results' => $results,
'total_registrations' => count($registrations),
'criteria' => [
'exam_id' => $exam_id,
'academic_year' => $academic_year,
'default_status' => $default_status,
'force_update' => $force_update
]
]
]);
} catch (Exception $e) {
echo json_encode([
'status' => 'error',
'message' => 'Error: ' . $e->getMessage()
]);
}
?>