<?php
// Start the session
session_start();
// Include database configuration
require_once 'database/db_config.php';
// Check if user is logged in and is an admin
if (!isset($_SESSION['user_id']) || !isset($_SESSION['role']) || ($_SESSION['role'] != 'admin' && $_SESSION['role'] != 'director')) {
header('Location: login.php');
exit;
}
// Check for success or error messages
$success_message = '';
$error_message = '';
if (isset($_SESSION['success_message'])) {
$success_message = $_SESSION['success_message'];
unset($_SESSION['success_message']);
}
if (isset($_SESSION['error_message'])) {
$error_message = $_SESSION['error_message'];
unset($_SESSION['error_message']);
}
// Include header
include 'includes/header.php';
?>
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">Course Management</h1>
<a href="course-add.php" class="d-none d-sm-inline-block btn btn-sm btn-primary shadow-sm">
<i class="fas fa-plus fa-sm text-white-50"></i> Add New Course
</a>
</div>
<?php if (!empty($success_message)): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $success_message; ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>
<?php if (!empty($error_message)): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $error_message; ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>
<!-- Content Row -->
<div class="row">
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-primary shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-primary text-uppercase mb-1">
Total Courses</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
<?php
$query = "SELECT COUNT(*) as count FROM courses";
$result = $conn->query($query);
$row = $result->fetch_assoc();
echo $row['count'];
?>
</div>
</div>
<div class="col-auto">
<i class="fas fa-book-open fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-success shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">
Published Courses</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
<?php
$query = "SELECT COUNT(*) as count FROM courses WHERE status = 'active'";
$result = $conn->query($query);
$row = $result->fetch_assoc();
echo $row['count'];
?>
</div>
</div>
<div class="col-auto">
<i class="fas fa-check-circle fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-info shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-info text-uppercase mb-1">
Featured Courses</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
<?php
$query = "SELECT COUNT(*) as count FROM courses WHERE is_featured = 1";
$result = $conn->query($query);
$row = $result->fetch_assoc();
echo $row['count'];
?>
</div>
</div>
<div class="col-auto">
<i class="fas fa-star fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-warning shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-warning text-uppercase mb-1">
Total Enrollments</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
<?php
$query = "SELECT COUNT(*) as count FROM enrollments";
$result = $conn->query($query);
$row = $result->fetch_assoc();
echo $row['count'];
?>
</div>
</div>
<div class="col-auto">
<i class="fas fa-user-graduate fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Course Filter Options -->
<div class="card shadow mb-4">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Filter Courses</h6>
<div class="dropdown no-arrow">
<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
</a>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in"
aria-labelledby="dropdownMenuLink">
<div class="dropdown-header">Filter Options:</div>
<a class="dropdown-item" href="?status=all">Show All</a>
<a class="dropdown-item" href="?status=active">Published Only</a>
<a class="dropdown-item" href="?status=draft">Drafts Only</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="?featured=1">Featured Only</a>
</div>
</div>
</div>
<div class="card-body">
<form action="" method="GET" class="mb-3">
<div class="row">
<div class="col-md-3 mb-3">
<select name="status" class="form-control">
<option value="all" <?php echo isset($_GET['status']) && $_GET['status'] == 'all' ? 'selected' : ''; ?>>All Statuses</option>
<option value="active" <?php echo isset($_GET['status']) && $_GET['status'] == 'active' ? 'selected' : ''; ?>>Published</option>
<option value="draft" <?php echo isset($_GET['status']) && $_GET['status'] == 'draft' ? 'selected' : ''; ?>>Draft</option>
<option value="inactive" <?php echo isset($_GET['status']) && $_GET['status'] == 'inactive' ? 'selected' : ''; ?>>Inactive</option>
</select>
</div>
<div class="col-md-3 mb-3">
<select name="category" class="form-control">
<option value="all">All Categories</option>
<?php
$cat_query = "SELECT * FROM categories ORDER BY name";
$cat_result = $conn->query($cat_query);
if ($cat_result && $cat_result->num_rows > 0) {
while ($cat = $cat_result->fetch_assoc()) {
$selected = (isset($_GET['category']) && $_GET['category'] == $cat['id']) ? 'selected' : '';
echo '<option value="' . $cat['id'] . '" ' . $selected . '>' . htmlspecialchars($cat['name']) . '</option>';
}
}
?>
</select>
</div>
<div class="col-md-4 mb-3">
<input type="text" name="search" class="form-control" placeholder="Search by title..."
value="<?php echo isset($_GET['search']) ? htmlspecialchars($_GET['search']) : ''; ?>">
</div>
<div class="col-md-2 mb-3">
<button type="submit" class="btn btn-primary btn-block">Filter</button>
</div>
</div>
</form>
</div>
</div>
<!-- Course List -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">All Courses</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered" id="coursesTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>Title</th>
<th>Category</th>
<th>Price</th>
<th>Status</th>
<th>Featured</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php
// Build the query based on filters
$sql = "SELECT c.*, cat.name as category_name
FROM courses c
LEFT JOIN categories cat ON c.category = cat.id
WHERE 1=1";
// Status filter
if (isset($_GET['status']) && $_GET['status'] != 'all') {
$status = $conn->real_escape_string($_GET['status']);
$sql .= " AND c.status = '$status'";
}
// Category filter
if (isset($_GET['category']) && $_GET['category'] != 'all') {
$category = $conn->real_escape_string($_GET['category']);
$sql .= " AND c.category = '$category'";
}
// Featured filter
if (isset($_GET['featured']) && $_GET['featured'] == '1') {
$sql .= " AND c.is_featured = 1";
}
// Search filter
if (isset($_GET['search']) && !empty($_GET['search'])) {
$search = $conn->real_escape_string($_GET['search']);
$sql .= " AND (c.title LIKE '%$search%' OR c.short_description LIKE '%$search%')";
}
$sql .= " ORDER BY c.id DESC";
$result = $conn->query($sql);
if ($result && $result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
?>
<tr>
<td>
<img src="<?php echo !empty($row['image']) ? '../' . $row['image'] : '../assets/img/defaults/default-course-image.jpg'; ?>"
alt="<?php echo htmlspecialchars($row['title']); ?>" class="img-thumbnail mr-2" style="width: 50px; height: 50px; object-fit: cover;">
<?php echo htmlspecialchars($row['title']); ?>
</td>
<td><?php echo htmlspecialchars($row['category_name'] ?? 'Uncategorized'); ?></td>
<td>
<?php
if ($row['price'] > 0) {
echo "₹" . number_format($row['price'], 2);
if (!empty($row['discount_price']) && $row['discount_price'] > 0 && $row['discount_price'] < $row['price']) {
echo " <span class='text-danger'><del>₹" . number_format($row['discount_price'], 2) . "</del></span>";
}
} else {
echo '<span class="badge badge-success">Free</span>';
}
?>
</td>
<td>
<?php
$status_badge = '';
switch ($row['status']) {
case 'active':
$status_badge = 'badge-success';
$status_text = 'Published';
break;
case 'draft':
$status_badge = 'badge-secondary';
$status_text = 'Draft';
break;
case 'inactive':
$status_badge = 'badge-danger';
$status_text = 'Inactive';
break;
default:
$status_badge = 'badge-info';
$status_text = ucfirst($row['status']);
}
?>
<span class="badge <?php echo $status_badge; ?>"><?php echo $status_text; ?></span>
</td>
<td class="text-center">
<form action="course-feature-toggle.php" method="POST" class="d-inline">
<input type="hidden" name="course_id" value="<?php echo $row['id']; ?>">
<input type="hidden" name="featured" value="<?php echo $row['is_featured'] ? '0' : '1'; ?>">
<button type="submit" class="btn btn-sm btn-link p-0" title="<?php echo $row['is_featured'] ? 'Remove from featured' : 'Add to featured'; ?>">
<i class="fas fa-star <?php echo $row['is_featured'] ? 'text-warning' : 'text-muted'; ?>"></i>
</button>
</form>
</td>
<td>
<a href="course-edit.php?id=<?php echo $row['id']; ?>" class="btn btn-sm btn-primary">
<i class="fas fa-edit"></i> Edit
</a>
<a href="../course-details.php?id=<?php echo $row['id']; ?>" class="btn btn-sm btn-info" target="_blank">
<i class="fas fa-eye"></i> View
</a>
<button type="button" class="btn btn-sm btn-danger" onclick="confirmDelete(<?php echo $row['id']; ?>)">
<i class="fas fa-trash"></i> Delete
</button>
</td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="7" class="text-center">No courses found</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
<!-- /.container-fluid -->
<!-- Delete Confirmation Modal -->
<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalLabel">Confirm Delete</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">Are you sure you want to delete this course? This action cannot be undone.</div>
<div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-danger" id="confirmDeleteBtn" href="#">Delete</a>
</div>
</div>
</div>
</div>
<script>
// Function to confirm deletion
function confirmDelete(id) {
document.getElementById('confirmDeleteBtn').href = 'course-delete.php?id=' + id;
$('#deleteModal').modal('show');
}
// Initialize DataTables
$(document).ready(function() {
$('#coursesTable').DataTable({
"order": [[ 0, "asc" ]],
"pageLength": 25
});
});
</script>
<?php
// Include footer
include 'includes/footer.php';
?>