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

<?php
// Start session
session_start();

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

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

// Handle form submissions
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Create new question bank
    if (isset($_POST['create_bank'])) {
        $title = trim($_POST['title']);
        $description = trim($_POST['description']);
        $course_id = isset($_POST['course_id']) ? intval($_POST['course_id']) : null;
        
        if (empty($title)) {
            $error_message = "Question bank title is required";
        } else {
            // Check if bank with same title exists
            $check_query = "SELECT id FROM question_banks WHERE title = ?";
            $stmt = $conn->prepare($check_query);
            $stmt->bind_param("s", $title);
            $stmt->execute();
            $result = $stmt->get_result();
            
            if ($result->num_rows > 0) {
                $error_message = "A question bank with this title already exists";
            } else {
                // Insert new question bank
                $insert_query = "INSERT INTO question_banks (title, description, course_id, created_at) VALUES (?, ?, ?, NOW())";
                $stmt = $conn->prepare($insert_query);
                $stmt->bind_param("ssi", $title, $description, $course_id);
                
                if ($stmt->execute()) {
                    $success_message = "Question bank created successfully";
                } else {
                    $error_message = "Failed to create question bank: " . $conn->error;
                }
            }
        }
    }
    
    // Delete question bank
    if (isset($_POST['delete_bank'])) {
        $bank_id = $_POST['bank_id'];
        
        // Check if there are questions in this bank
        $check_query = "SELECT COUNT(*) as count FROM questions WHERE question_bank_id = ?";
        $stmt = $conn->prepare($check_query);
        $stmt->bind_param("i", $bank_id);
        $stmt->execute();
        $count_result = $stmt->get_result()->fetch_assoc();
        
        if ($count_result['count'] > 0) {
            $error_message = "Cannot delete question bank that contains questions. Remove all questions first.";
        } else {
            // Delete the question bank
            $delete_query = "DELETE FROM question_banks WHERE id = ?";
            $stmt = $conn->prepare($delete_query);
            $stmt->bind_param("i", $bank_id);
            
            if ($stmt->execute()) {
                $success_message = "Question bank deleted successfully";
            } else {
                $error_message = "Failed to delete question bank: " . $conn->error;
            }
        }
    }
}

// Get course filter if it exists
$course_filter = isset($_GET['course_id']) ? intval($_GET['course_id']) : 0;

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

if ($courses_result && $courses_result->num_rows > 0) {
    while ($course = $courses_result->fetch_assoc()) {
        $courses[] = $course;
    }
}

// Get list of question banks with course filter
$banks_query = "SELECT qb.*, 
                c.title as course_title,
                (SELECT COUNT(*) FROM questions WHERE question_bank_id = qb.id) as question_count 
                FROM question_banks qb 
                LEFT JOIN courses c ON qb.course_id = c.id
                WHERE 1=1 ";

// Add course filter if selected
if ($course_filter > 0) {
    $banks_query .= "AND qb.course_id = $course_filter ";
} else if ($course_filter === -1) {
    $banks_query .= "AND qb.course_id IS NULL ";
}

$banks_query .= "ORDER BY qb.title";
$banks_result = $conn->query($banks_query);
$question_banks = [];

if ($banks_result && $banks_result->num_rows > 0) {
    while ($bank = $banks_result->fetch_assoc()) {
        $question_banks[] = $bank;
    }
}

// Include header
include 'includes/header.php';
?>

<div class="container-fluid">
    <div class="d-sm-flex align-items-center justify-content-between mb-4">
        <h1 class="h3 mb-0 text-gray-800">Question Banks</h1>
        <div>
            <a href="manage_exams.php" class="d-none d-sm-inline-block btn btn-sm btn-info shadow-sm me-2">
                <i class="fas fa-list fa-sm text-white-50"></i> Manage Exams
            </a>
            <button type="button" class="d-none d-sm-inline-block btn btn-sm btn-primary shadow-sm" 
                    data-bs-toggle="modal" data-bs-target="#createBankModal">
                <i class="fas fa-plus fa-sm text-white-50"></i> Create Question Bank
            </button>
        </div>
    </div>

    <!-- Check for database message first -->
    <?php if (isset($_SESSION['success_message'])): ?>
        <div class="alert alert-success alert-dismissible fade show" role="alert">
            <?php echo $_SESSION['success_message']; unset($_SESSION['success_message']); ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
    <?php endif; ?>

    <?php if (isset($_SESSION['error_message'])): ?>
        <div class="alert alert-danger alert-dismissible fade show" role="alert">
            <?php echo $_SESSION['error_message']; unset($_SESSION['error_message']); ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
    <?php endif; ?>

    <!-- Normal form messages -->
    <?php if (isset($success_message)): ?>
        <div class="alert alert-success alert-dismissible fade show" role="alert">
            <?php echo $success_message; ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
    <?php endif; ?>

    <?php if (isset($error_message)): ?>
        <div class="alert alert-danger alert-dismissible fade show" role="alert">
            <?php echo $error_message; ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
    <?php endif; ?>

    <!-- Course Filter -->
    <div class="card shadow mb-4">
        <div class="card-header py-3">
            <h6 class="m-0 font-weight-bold text-primary">Filter Question Banks</h6>
        </div>
        <div class="card-body">
            <form method="get" action="" class="row align-items-end">
                <div class="col-md-4 mb-2">
                    <label for="course_id">Course:</label>
                    <select class="form-control" id="course_id" name="course_id">
                        <option value="0">All Courses</option>
                        <option value="-1" <?php echo $course_filter === -1 ? 'selected' : ''; ?>>General (No Course)</option>
                        <?php foreach ($courses as $course): ?>
                            <option value="<?php echo $course['id']; ?>" <?php echo $course_filter === $course['id'] ? 'selected' : ''; ?>>
                                <?php echo htmlspecialchars($course['title']); ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-2 mb-2">
                    <button type="submit" class="btn btn-primary">Filter</button>
                    <?php if ($course_filter): ?>
                        <a href="banks.php" class="btn btn-secondary">Clear</a>
                    <?php endif; ?>
                </div>
            </form>
        </div>
    </div>

    <!-- Question Banks Table -->
    <div class="card shadow mb-4">
        <div class="card-header py-3 d-flex justify-content-between align-items-center">
            <h6 class="m-0 font-weight-bold text-primary">Question Banks</h6>
            <a href="database/create_question_banks_table.php" class="btn btn-sm btn-info">
                <i class="fas fa-database"></i> Setup Question Banks Table
            </a>
        </div>
        <div class="card-body">
            <?php if (empty($question_banks)): ?>
                <div class="alert alert-info">
                    <?php if ($course_filter): ?>
                        No question banks found for this course. <a href="#" data-bs-toggle="modal" data-bs-target="#createBankModal">Create a new question bank</a> or <a href="banks.php">view all question banks</a>.
                    <?php else: ?>
                        No question banks found. <a href="#" data-bs-toggle="modal" data-bs-target="#createBankModal">Create your first question bank</a> to get started.
                    <?php endif; ?>
                </div>
            <?php else: ?>
                <div class="table-responsive">
                    <table class="table table-bordered" id="bankTable" width="100%" cellspacing="0">
                        <thead>
                            <tr>
                                <th>Title</th>
                                <th>Description</th>
                                <th>Course</th>
                                <th>Questions</th>
                                <th>Created</th>
                                <th>Actions</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($question_banks as $bank): ?>
                                <tr>
                                    <td><?php echo htmlspecialchars($bank['title']); ?></td>
                                    <td><?php echo htmlspecialchars($bank['description'] ?? ''); ?></td>
                                    <td>
                                        <?php if ($bank['course_id']): ?>
                                            <span class="badge bg-info"><?php echo htmlspecialchars($bank['course_title']); ?></span>
                                        <?php else: ?>
                                            <span class="badge bg-secondary">General</span>
                                        <?php endif; ?>
                                    </td>
                                    <td>
                                        <span class="badge bg-primary"><?php echo $bank['question_count']; ?></span>
                                    </td>
                                    <td><?php echo date('M d, Y', strtotime($bank['created_at'])); ?></td>
                                    <td>
                                        <a href="questions.php?bank_id=<?php echo $bank['id']; ?>" 
                                           class="btn btn-info btn-sm">
                                            <i class="fas fa-question-circle"></i> Questions
                                        </a>
                                        <a href="add_question.php?bank_id=<?php echo $bank['id']; ?>" 
                                           class="btn btn-success btn-sm">
                                            <i class="fas fa-plus-circle"></i> Add Question
                                        </a>
                                        <?php if ($bank['question_count'] == 0): ?>
                                            <button type="button" class="btn btn-danger btn-sm" 
                                                    onclick="confirmDeleteBank(<?php echo $bank['id']; ?>, '<?php echo htmlspecialchars($bank['title']); ?>')">
                                                <i class="fas fa-trash"></i>
                                            </button>
                                        <?php endif; ?>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            <?php endif; ?>
        </div>
    </div>
</div>

<!-- Create Question Bank Modal -->
<div class="modal fade" id="createBankModal" tabindex="-1" role="dialog" aria-labelledby="createBankModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="createBankModalLabel">Create Question Bank</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <form method="post" action="">
                <div class="modal-body">
                    <div class="form-group mb-3">
                        <label for="title">Title <span class="text-danger">*</span></label>
                        <input type="text" class="form-control" id="title" name="title" required>
                        <small class="form-text text-muted">Give your question bank a descriptive name</small>
                    </div>
                    <div class="form-group mb-3">
                        <label for="description">Description</label>
                        <textarea class="form-control" id="description" name="description" rows="3"></textarea>
                        <small class="form-text text-muted">Optional description of the question bank</small>
                    </div>
                    <div class="form-group mb-3">
                        <label for="modal_course_id">Course</label>
                        <select class="form-control" id="modal_course_id" name="course_id">
                            <option value="">General (No Course)</option>
                            <?php foreach ($courses as $course): ?>
                                <option value="<?php echo $course['id']; ?>">
                                    <?php echo htmlspecialchars($course['title']); ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                        <small class="form-text text-muted">Associate this question bank with a course (optional)</small>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" name="create_bank" class="btn btn-primary">Create</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Delete Confirmation Modal -->
<div class="modal fade" id="deleteBankModal" tabindex="-1" role="dialog" aria-labelledby="deleteBankModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="deleteBankModalLabel">Confirm Delete</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <p>Are you sure you want to delete the question bank: <span id="bankTitleToDelete"></span>?</p>
                <p class="text-danger">This action cannot be undone.</p>
            </div>
            <div class="modal-footer">
                <form method="post" action="">
                    <input type="hidden" id="bankIdToDelete" name="bank_id">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" name="delete_bank" class="btn btn-danger">Delete</button>
                </form>
            </div>
        </div>
    </div>
</div>

<script>
$(document).ready(function() {
    // Initialize datatable
    $('#bankTable').DataTable();
});

function confirmDeleteBank(bankId, bankTitle) {
    $('#bankIdToDelete').val(bankId);
    $('#bankTitleToDelete').text(bankTitle);
    var deleteModal = new bootstrap.Modal(document.getElementById('deleteBankModal'));
    deleteModal.show();
}
</script>

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