Path : /home/vishqocm/pcib.in/admin/
File Upload :
Current File : //home/vishqocm/pcib.in/admin/edit_exam.php

<?php
// Start session
session_start();

// Include database configuration
require_once '../config/database.php';

// Include header
include_once 'includes/header.php';

// Check if user is logged in and has admin or director role
if (!isset($_SESSION['user_id']) || ($_SESSION['role'] !== 'admin' && $_SESSION['role'] !== 'director')) {
    header('Location: login.php');
    exit;
}

// Check if an exam ID is provided
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    $_SESSION['error'] = "Invalid exam ID.";
    header('Location: manage_exams.php');
    exit;
}

$exam_id = $_GET['id'];

// Get exam details
$stmt = $conn->prepare("SELECT * FROM exam_schedules WHERE id = ?");
$stmt->bind_param("i", $exam_id);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows === 0) {
    $_SESSION['error'] = "Exam not found.";
    header('Location: manage_exams.php');
    exit;
}

$exam = $result->fetch_assoc();
$stmt->close();

// Handle form submission
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Get form data
    $title = trim($_POST['title']);
    $description = trim($_POST['description']);
    $course_id = $_POST['course_id'];
    $exam_date = $_POST['exam_date'];
    $start_time = $_POST['start_time'];
    $end_time = $_POST['end_time'];
    $duration = $_POST['duration'];
    $passing_percentage = $_POST['passing_percentage'];
    $status = $_POST['status'];
    $instructions = trim($_POST['instructions']);

    // Validate input
    $errors = [];

    if (empty($title)) {
        $errors[] = "Title is required";
    }

    if (empty($course_id)) {
        $errors[] = "Course is required";
    }

    if (empty($exam_date)) {
        $errors[] = "Exam date is required";
    }

    if (empty($start_time)) {
        $errors[] = "Start time is required";
    }

    if (empty($end_time)) {
        $errors[] = "End time is required";
    }

    if (empty($duration) || !is_numeric($duration) || $duration <= 0) {
        $errors[] = "Duration must be a positive number";
    }

    if (empty($passing_percentage) || !is_numeric($passing_percentage) || $passing_percentage < 0 || $passing_percentage > 100) {
        $errors[] = "Passing percentage must be between 0 and 100";
    }

    // Check if start time is before end time
    if (!empty($start_time) && !empty($end_time)) {
        $start = strtotime($start_time);
        $end = strtotime($end_time);
        if ($start >= $end) {
            $errors[] = "Start time must be before end time";
        }
    }

    // If no errors, update the exam
    if (empty($errors)) {
        $query = "UPDATE exam_schedules SET 
                  title = ?, 
                  description = ?, 
                  course_id = ?, 
                  exam_date = ?, 
                  start_time = ?, 
                  end_time = ?, 
                  duration_minutes = ?, 
                  passing_percentage = ?, 
                  is_active = ?, 
                  instructions = ? 
                  WHERE id = ?";
        
        // Convert status to is_active (1 for active, 0 for inactive)
        $is_active = ($status == 'active') ? 1 : 0;
        
        $stmt = $conn->prepare($query);
        $stmt->bind_param("ssisssiissi", 
            $title, 
            $description, 
            $course_id, 
            $exam_date, 
            $start_time, 
            $end_time, 
            $duration, 
            $passing_percentage, 
            $is_active, 
            $instructions,
            $exam_id
        );
        
        if ($stmt->execute()) {
            $_SESSION['success'] = "Exam updated successfully";
            header("Location: manage_exams.php");
            exit;
        } else {
            $_SESSION['error'] = "Error updating exam: " . $conn->error;
        }
    }
}

// Get all courses for the dropdown
$courses_query = "SELECT id, title FROM courses ORDER BY title";
$courses_result = $conn->query($courses_query);
?>

<div class="content-wrapper">
    <div class="content-header">
        <div class="container-fluid">
            <div class="row mb-2">
                <div class="col-sm-6">
                    <h1 class="m-0">Edit Exam</h1>
                </div>
                <div class="col-sm-6">
                    <ol class="breadcrumb float-sm-right">
                        <li class="breadcrumb-item"><a href="index.php">Home</a></li>
                        <li class="breadcrumb-item"><a href="manage_exams.php">Manage Exams</a></li>
                        <li class="breadcrumb-item active">Edit Exam</li>
                    </ol>
                </div>
            </div>
        </div>
    </div>

    <section class="content">
        <div class="container-fluid">
            <?php if (isset($errors) && !empty($errors)): ?>
                <div class="alert alert-danger alert-dismissible fade show" role="alert">
                    <h5><i class="icon fas fa-ban"></i> Error!</h5>
                    <ul>
                        <?php foreach ($errors as $error): ?>
                            <li><?php echo $error; ?></li>
                        <?php endforeach; ?>
                    </ul>
                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
            <?php endif; ?>

            <div class="card">
                <div class="card-header">
                    <h3 class="card-title">Exam Details</h3>
                    <div class="card-tools">
                        <button type="button" class="btn btn-tool" data-card-widget="collapse">
                            <i class="fas fa-minus"></i>
                        </button>
                    </div>
                </div>
                <div class="card-body">
                    <form action="" method="POST">
                        <div class="row">
                            <div class="col-md-6">
                                <div class="form-group">
                                    <label for="title">Exam Title <span class="text-danger">*</span></label>
                                    <input type="text" class="form-control" id="title" name="title" value="<?php echo htmlspecialchars($exam['title']); ?>" required>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="form-group">
                                    <label for="course_id">Course <span class="text-danger">*</span></label>
                                    <select class="form-control" id="course_id" name="course_id" required>
                                        <option value="">Select Course</option>
                                        <?php while ($course = $courses_result->fetch_assoc()): ?>
                                            <option value="<?php echo $course['id']; ?>" <?php echo ($exam['course_id'] == $course['id']) ? 'selected' : ''; ?>>
                                                <?php echo htmlspecialchars($course['title']); ?>
                                            </option>
                                        <?php endwhile; ?>
                                    </select>
                                </div>
                            </div>
                        </div>

                        <div class="row">
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label for="description">Description</label>
                                    <textarea class="form-control" id="description" name="description" rows="3"><?php echo htmlspecialchars($exam['description']); ?></textarea>
                                </div>
                            </div>
                        </div>

                        <div class="row">
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="exam_date">Exam Date <span class="text-danger">*</span></label>
                                    <input type="date" class="form-control" id="exam_date" name="exam_date" value="<?php echo $exam['exam_date']; ?>" required>
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="start_time">Start Time <span class="text-danger">*</span> (IST)</label>
                                    <input type="time" class="form-control" id="start_time" name="start_time" value="<?php echo $exam['start_time']; ?>" required>
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="end_time">End Time <span class="text-danger">*</span> (IST)</label>
                                    <input type="time" class="form-control" id="end_time" name="end_time" value="<?php echo $exam['end_time']; ?>" required>
                                </div>
                            </div>
                        </div>

                        <div class="row">
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="duration">Duration (minutes) <span class="text-danger">*</span></label>
                                    <div class="input-group">
                                        <input type="number" class="form-control" id="duration" name="duration" value="<?php echo $exam['duration_minutes']; ?>" min="1" required readonly>
                                        <div class="input-group-append">
                                            <span class="input-group-text"><i class="fas fa-clock"></i></span>
                                        </div>
                                    </div>
                                    <small class="text-muted">Automatically calculated from start and end time</small>
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="passing_percentage">Passing Percentage <span class="text-danger">*</span></label>
                                    <input type="number" class="form-control" id="passing_percentage" name="passing_percentage" value="<?php echo $exam['passing_percentage']; ?>" min="0" max="100" required>
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="status">Status <span class="text-danger">*</span></label>
                                    <select class="form-control" id="status" name="status" required>
                                        <option value="active" <?php echo ($exam['is_active'] == 1) ? 'selected' : ''; ?>>Active</option>
                                        <option value="inactive" <?php echo ($exam['is_active'] == 0) ? 'selected' : ''; ?>>Inactive</option>
                                        <option value="completed" <?php echo (isset($exam['status']) && $exam['status'] == 'completed') ? 'selected' : ''; ?>>Completed</option>
                                    </select>
                                </div>
                            </div>
                        </div>

                        <div class="row">
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label for="instructions">Instructions</label>
                                    <textarea class="form-control" id="instructions" name="instructions" rows="5"><?php echo htmlspecialchars($exam['instructions'] ?? ''); ?></textarea>
                                </div>
                            </div>
                        </div>

                        <div class="row mt-4">
                            <div class="col-md-12">
                                <div class="alert alert-info">
                                    <i class="fas fa-info-circle"></i> You can manage exam questions from the <a href="map_questions.php?exam_id=<?php echo $exam_id; ?>">Manage Questions</a> page.
                                </div>
                            </div>
                        </div>

                        <div class="row mt-3">
                            <div class="col-md-12">
                                <button type="submit" class="btn btn-primary">
                                    <i class="fas fa-save"></i> Update Exam
                                </button>
                                <a href="manage_exams.php" class="btn btn-secondary">
                                    <i class="fas fa-times"></i> Cancel
                                </a>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </section>
</div>

<script>
    document.addEventListener('DOMContentLoaded', function() {
        // Function to calculate duration in minutes between two times
        function calculateDuration() {
            const startTime = document.getElementById('start_time').value;
            const endTime = document.getElementById('end_time').value;
            
            if (startTime && endTime) {
                // Convert to Date objects to calculate the difference
                const startDate = new Date(`1970-01-01T${startTime}:00`);
                const endDate = new Date(`1970-01-01T${endTime}:00`);
                
                // Check if end time is earlier than start time (next day scenario)
                let diff = endDate - startDate;
                
                if (diff < 0) {
                    // End time is on the next day, add 24 hours
                    diff += 24 * 60 * 60 * 1000;
                }
                
                // Convert milliseconds to minutes
                const durationMinutes = Math.round(diff / 60000);
                
                // Ensure we have a positive value
                const finalDuration = Math.max(1, durationMinutes);
                
                // Update duration field
                document.getElementById('duration').value = finalDuration;
            }
        }
        
        // Calculate duration on load
        calculateDuration();
        
        // Set up event listeners for time inputs
        document.getElementById('start_time').addEventListener('change', calculateDuration);
        document.getElementById('end_time').addEventListener('change', calculateDuration);
    });
</script>

<?php
// Include footer
include_once 'includes/footer.php';
?>