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

Download   Open   Back

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

PHP File Manager