File "update.php"
Full path: /home2/santhos2/public_html/bharath-coe.firstmatrix.in.net/api/courses/update.php
File size: 5.58 KiB (5712 bytes)
MIME-type: text/x-php
Charset: utf-8
<?php
// Suppress all error output to ensure clean JSON responses
error_reporting(0);
ini_set('display_errors', 0);
ob_start();
require_once '../../config/config.php';
require_once '../helper/audit_log.php';
// Clean any output buffer and set proper headers
ob_clean();
header('Content-Type: application/json');
try {
$id = (int)($_POST['id'] ?? 0);
$course_code = trim($_POST['course_code'] ?? '');
$course_name = trim($_POST['course_name'] ?? '');
$college_id = (int)($_POST['college_id'] ?? 0);
$category_id = (int)($_POST['category_id'] ?? 0);
$regulation_year = (int)($_POST['regulation_year'] ?? 0);
$duration_years = (int)($_POST['duration_years'] ?? 0);
$total_semesters = (int)($_POST['total_semesters'] ?? 0);
$status = trim($_POST['status'] ?? 'Active');
// Validation
$errors = [];
if ($id <= 0) {
$errors[] = 'Invalid ID.';
}
if ($course_code === '') {
$errors[] = 'Course Code is required.';
}
if (!preg_match('/^[A-Za-z0-9\-]{2,20}$/', $course_code)) {
$errors[] = 'Course Code must be 2-20 characters (letters, numbers, hyphens only).';
}
if ($course_name === '') {
$errors[] = 'Course Name is required.';
}
if (mb_strlen($course_name) < 3) {
$errors[] = 'Course Name must be at least 3 characters.';
}
if ($college_id <= 0) {
$errors[] = 'College is required.';
}
if ($category_id <= 0) {
$errors[] = 'Category is required.';
}
if ($regulation_year < 1900 || $regulation_year > 2099) {
$errors[] = 'Regulation Year must be between 1900 and 2099.';
}
if ($duration_years < 0 || $duration_years > 20) {
$errors[] = 'Duration must be between 0 and 20 years.';
}
if ($total_semesters < 1 || $total_semesters > 40) {
$errors[] = 'Total Semesters must be between 1 and 40.';
}
if (!in_array($status, ['Active','Inactive'])) {
$errors[] = 'Invalid status.';
}
if ($errors) {
echo json_encode(["status" => "error", "message" => implode(' ', $errors)]);
exit;
}
// Check if course exists
$check_stmt = $pdo->prepare('SELECT * FROM courses WHERE course_id = ?');
$check_stmt->execute([$id]);
$existing = $check_stmt->fetch(PDO::FETCH_ASSOC);
if (!$existing) {
echo json_encode(["status" => "error", "message" => "Course not found."]);
exit;
}
// Check for duplicate course code (excluding current record)
$duplicate_stmt = $pdo->prepare("SELECT course_id FROM courses WHERE course_code = ? AND course_id != ?");
$duplicate_stmt->execute([$course_code, $id]);
if ($duplicate_stmt->fetch()) {
echo json_encode(["status" => "error", "message" => "Course Code already exists. Please use a different code."]);
exit;
}
// Verify college and category exist
$college_check = $pdo->prepare("SELECT college_id FROM colleges WHERE college_id = ?");
$college_check->execute([$college_id]);
if (!$college_check->fetch()) {
echo json_encode(["status" => "error", "message" => "Selected college does not exist."]);
exit;
}
$category_check = $pdo->prepare("SELECT category_id FROM categories WHERE category_id = ?");
$category_check->execute([$category_id]);
if (!$category_check->fetch()) {
echo json_encode(["status" => "error", "message" => "Selected category does not exist."]);
exit;
}
// Update course
$stmt = $pdo->prepare(
"UPDATE courses SET
college_id = ?,
category_id = ?,
course_name = ?,
course_code = ?,
regulation_year = ?,
duration_years = ?,
total_semesters = ?,
status = ?
WHERE course_id = ?"
);
$stmt->execute([
$college_id,
$category_id,
$course_name,
$course_code,
$regulation_year,
$duration_years,
$total_semesters,
$status,
$id
]);
// Write audit log with before/after data
write_audit_log($pdo, [
'module' => 'Academic Structure',
'action' => 'update',
'entity_table' => 'courses',
'entity_id' => $id,
'before_data' => $existing,
'after_data' => [
'course_code' => $course_code,
'course_name' => $course_name,
'college_id' => $college_id,
'category_id' => $category_id,
'regulation_year' => $regulation_year,
'duration_years' => $duration_years,
'total_semesters' => $total_semesters,
'status' => $status
],
'message' => 'Course updated successfully'
]);
echo json_encode([
"status" => "success",
"message" => "Course updated successfully.",
"data" => [
"course_id" => $id,
"course_code" => $course_code,
"course_name" => $course_name,
"college_id" => $college_id,
"category_id" => $category_id,
"regulation_year" => $regulation_year,
"duration_years" => $duration_years,
"total_semesters" => $total_semesters,
"status" => $status
]
]);
} catch (Throwable $e) {
http_response_code(500);
echo json_encode([
"status" => "error",
"message" => "An error occurred while updating the course. Please try again."
]);
}
?>