<?php
// Start session
session_start();
// Include database configuration
require_once '../config/database.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;
}
// Handle adding new question bank
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_bank'])) {
$title = trim($_POST['title']);
$description = trim($_POST['description']);
$course_id = !empty($_POST['course_id']) ? $_POST['course_id'] : null;
if (empty($title)) {
$_SESSION['error'] = "Bank title is required";
} else {
// Check if a bank with this title already 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) {
$_SESSION['error'] = "A question bank with this title already exists";
} else {
// Insert new bank
$insert_query = "INSERT INTO question_banks (title, description, course_id, status) VALUES (?, ?, ?, 'active')";
$stmt = $conn->prepare($insert_query);
$stmt->bind_param("ssi", $title, $description, $course_id);
if ($stmt->execute()) {
$_SESSION['success'] = "Question bank added successfully";
header("Location: " . $_SERVER['PHP_SELF']);
exit;
} else {
$_SESSION['error'] = "Error adding question bank: " . $conn->error;
}
}
}
}
// Handle updating question bank
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_bank'])) {
$bank_id = $_POST['bank_id'];
$title = trim($_POST['title']);
$description = trim($_POST['description']);
$course_id = !empty($_POST['course_id']) ? $_POST['course_id'] : null;
$status = $_POST['status'];
if (empty($title)) {
$_SESSION['error'] = "Bank title is required";
} else {
// Check if another bank with this title exists (excluding current bank)
$check_query = "SELECT id FROM question_banks WHERE title = ? AND id != ?";
$stmt = $conn->prepare($check_query);
$stmt->bind_param("si", $title, $bank_id);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$_SESSION['error'] = "Another question bank with this title already exists";
} else {
// Update bank
$update_query = "UPDATE question_banks SET title = ?, description = ?, course_id = ?, status = ? WHERE id = ?";
$stmt = $conn->prepare($update_query);
$stmt->bind_param("ssisi", $title, $description, $course_id, $status, $bank_id);
if ($stmt->execute()) {
$_SESSION['success'] = "Question bank updated successfully";
header("Location: " . $_SERVER['PHP_SELF']);
exit;
} else {
$_SESSION['error'] = "Error updating question bank: " . $conn->error;
}
}
}
}
// Handle deleting question bank
if ($_SERVER['REQUEST_METHOD'] === 'POST' && 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) {
$_SESSION['error'] = "Cannot delete question bank that contains questions. Remove all questions first or reassign them to another bank.";
} 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()) {
$_SESSION['success'] = "Question bank deleted successfully";
header("Location: " . $_SERVER['PHP_SELF']);
exit;
} else {
$_SESSION['error'] = "Failed to delete question bank: " . $conn->error;
}
}
}
// 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['id']] = $course['title'];
}
}
// Get list of question banks
$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
ORDER BY qb.title";
$banks_result = $conn->query($banks_query);
$banks = [];
if ($banks_result && $banks_result->num_rows > 0) {
while ($bank = $banks_result->fetch_assoc()) {
$banks[] = $bank;
}
}
// Include header
include_once 'includes/header.php';
?>
<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">Manage Question Banks</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 active">Question Banks</li>
</ol>
</div>
</div>
</div>
</div>
<section class="content">
<div class="container-fluid">
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show">
<?php echo $_SESSION['error']; unset($_SESSION['error']); ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show">
<?php echo $_SESSION['success']; unset($_SESSION['success']); ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>
<div class="row">
<div class="col-md-4">
<div class="card card-primary">
<div class="card-header">
<h3 class="card-title">Add New Question Bank</h3>
</div>
<div class="card-body">
<form action="" method="POST">
<div class="form-group">
<label for="title">Bank Title <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="title" name="title" required>
</div>
<div class="form-group">
<label for="course_id">Associated Course</label>
<select class="form-control" id="course_id" name="course_id">
<option value="">General (Not Associated with any Course)</option>
<?php foreach ($courses as $id => $title): ?>
<option value="<?php echo $id; ?>"><?php echo htmlspecialchars($title); ?></option>
<?php endforeach; ?>
</select>
<small class="form-text text-muted">If this bank is specific to a course, select it here. Otherwise, leave as "General".</small>
</div>
<div class="form-group">
<label for="description">Description</label>
<textarea class="form-control" id="description" name="description" rows="3"></textarea>
</div>
<button type="submit" name="add_bank" class="btn btn-primary">Add Question Bank</button>
</form>
</div>
</div>
</div>
<div class="col-md-8">
<div class="card">
<div class="card-header">
<h3 class="card-title">Question Banks</h3>
<div class="card-tools">
<a href="database/fix_exam_tables.php" class="btn btn-warning btn-sm">
<i class="fas fa-wrench"></i> Fix Database Tables
</a>
</div>
</div>
<div class="card-body">
<?php if (empty($banks)): ?>
<div class="alert alert-info">
<i class="fas fa-info-circle"></i> No question banks found. Add your first question bank using the form.
</div>
<?php else: ?>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Title</th>
<th>Course</th>
<th>Questions</th>
<th>Status</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($banks as $bank): ?>
<tr>
<td><?php echo htmlspecialchars($bank['title']); ?></td>
<td>
<?php if ($bank['course_id']): ?>
<?php echo htmlspecialchars($bank['course_title']); ?>
<?php else: ?>
<span class="badge badge-info">General</span>
<?php endif; ?>
</td>
<td>
<span class="badge badge-primary"><?php echo $bank['question_count']; ?></span>
<?php if ($bank['question_count'] > 0): ?>
<a href="view_questions.php?bank_id=<?php echo $bank['id']; ?>" class="btn btn-xs btn-outline-primary ml-1">
<i class="fas fa-eye"></i> View
</a>
<?php endif; ?>
<a href="add_question.php?bank_id=<?php echo $bank['id']; ?>" class="btn btn-xs btn-outline-success ml-1">
<i class="fas fa-plus"></i> Add
</a>
</td>
<td>
<?php if ($bank['status'] === 'active'): ?>
<span class="badge badge-success">Active</span>
<?php else: ?>
<span class="badge badge-warning">Inactive</span>
<?php endif; ?>
</td>
<td>
<button type="button" class="btn btn-sm btn-info" data-toggle="modal" data-target="#editBankModal<?php echo $bank['id']; ?>">
<i class="fas fa-edit"></i>
</button>
<button type="button" class="btn btn-sm btn-danger" data-toggle="modal" data-target="#deleteBankModal<?php echo $bank['id']; ?>" <?php echo $bank['question_count'] > 0 ? 'disabled' : ''; ?>>
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
<!-- Edit Bank Modal -->
<div class="modal fade" id="editBankModal<?php echo $bank['id']; ?>" tabindex="-1" role="dialog" aria-labelledby="editBankModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header bg-info">
<h5 class="modal-title" id="editBankModalLabel">Edit Question Bank</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<form action="" method="POST">
<div class="modal-body">
<input type="hidden" name="bank_id" value="<?php echo $bank['id']; ?>">
<div class="form-group">
<label for="edit_title<?php echo $bank['id']; ?>">Bank Title <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="edit_title<?php echo $bank['id']; ?>" name="title" value="<?php echo htmlspecialchars($bank['title']); ?>" required>
</div>
<div class="form-group">
<label for="edit_course<?php echo $bank['id']; ?>">Associated Course</label>
<select class="form-control" id="edit_course<?php echo $bank['id']; ?>" name="course_id">
<option value="">General (Not Associated with any Course)</option>
<?php foreach ($courses as $id => $title): ?>
<option value="<?php echo $id; ?>" <?php echo $bank['course_id'] == $id ? 'selected' : ''; ?>><?php echo htmlspecialchars($title); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group">
<label for="edit_description<?php echo $bank['id']; ?>">Description</label>
<textarea class="form-control" id="edit_description<?php echo $bank['id']; ?>" name="description" rows="3"><?php echo htmlspecialchars($bank['description']); ?></textarea>
</div>
<div class="form-group">
<label for="edit_status<?php echo $bank['id']; ?>">Status</label>
<select class="form-control" id="edit_status<?php echo $bank['id']; ?>" name="status">
<option value="active" <?php echo $bank['status'] === 'active' ? 'selected' : ''; ?>>Active</option>
<option value="inactive" <?php echo $bank['status'] === 'inactive' ? 'selected' : ''; ?>>Inactive</option>
</select>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button type="submit" name="update_bank" class="btn btn-primary">Save Changes</button>
</div>
</form>
</div>
</div>
</div>
<!-- Delete Bank Modal -->
<div class="modal fade" id="deleteBankModal<?php echo $bank['id']; ?>" tabindex="-1" role="dialog" aria-labelledby="deleteBankModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header bg-danger">
<h5 class="modal-title" id="deleteBankModalLabel">Delete Question Bank</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>Are you sure you want to delete the bank <strong><?php echo htmlspecialchars($bank['title']); ?></strong>?</p>
<?php if ($bank['question_count'] > 0): ?>
<div class="alert alert-warning">
<i class="fas fa-exclamation-triangle"></i> This bank contains <?php echo $bank['question_count']; ?> questions. You must first delete or reassign these questions before deleting the bank.
</div>
<?php else: ?>
<p class="text-danger">This action cannot be undone.</p>
<?php endif; ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<?php if ($bank['question_count'] === 0): ?>
<form action="" method="POST">
<input type="hidden" name="bank_id" value="<?php echo $bank['id']; ?>">
<button type="submit" name="delete_bank" class="btn btn-danger">Delete Bank</button>
</form>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
<script>
$(document).ready(function() {
$('.table').DataTable({
"responsive": true,
"lengthChange": false,
"pageLength": 10,
"searching": true,
"ordering": true,
"info": true,
"autoWidth": false
});
});
</script>
<?php include_once 'includes/footer.php'; ?>