245 lines
12 KiB
PHP
245 lines
12 KiB
PHP
<?php
|
|
session_start();
|
|
require_once 'db/config.php';
|
|
|
|
if (!isset($_SESSION['user_id']) || !in_array($_SESSION['role'], ['Admin', 'Teacher', 'Super Admin'])) {
|
|
header('Location: login.php');
|
|
exit;
|
|
}
|
|
|
|
$user_id = $_SESSION['user_id'];
|
|
$school_id = $_SESSION['school_id'];
|
|
$success = '';
|
|
$error = '';
|
|
|
|
// Handle Resource Upload
|
|
if (isset($_POST['upload_resource'])) {
|
|
$title = $_POST['title'];
|
|
$description = $_POST['description'];
|
|
$grade = $_POST['grade'];
|
|
$subject = $_POST['subject'];
|
|
|
|
// In a real app, we'd handle file uploads. For this demo, we'll just store the metadata.
|
|
try {
|
|
$stmt = db()->prepare("INSERT INTO resources (title, description, teacher_id, school_id, grade, subject) VALUES (?, ?, ?, ?, ?, ?)");
|
|
$stmt->execute([$title, $description, $user_id, $school_id, $grade, $subject]);
|
|
$success = "Resource shared successfully!";
|
|
} catch (PDOException $e) {
|
|
$error = "Failed to share resource: " . $e->getMessage();
|
|
}
|
|
}
|
|
|
|
// Handle Forum Post
|
|
if (isset($_POST['create_post'])) {
|
|
$title = $_POST['title'];
|
|
$content = $_POST['content'];
|
|
|
|
try {
|
|
$stmt = db()->prepare("INSERT INTO forum_posts (title, content, author_id, school_id) VALUES (?, ?, ?, ?)");
|
|
$stmt->execute([$title, $content, $user_id, $school_id]);
|
|
$success = "Topic posted successfully!";
|
|
} catch (PDOException $e) {
|
|
$error = "Failed to post topic: " . $e->getMessage();
|
|
}
|
|
}
|
|
|
|
// Fetch Resources
|
|
$resources = db()->prepare("SELECT r.*, u.email as teacher_email FROM resources r JOIN users u ON r.teacher_id = u.id WHERE r.school_id = ? ORDER BY r.created_at DESC");
|
|
$resources->execute([$school_id]);
|
|
$resources = $resources->fetchAll();
|
|
|
|
// Fetch Forum Posts
|
|
$posts = db()->prepare("SELECT p.*, u.email as author_email, (SELECT COUNT(*) FROM forum_comments WHERE post_id = p.id) as comment_count FROM forum_posts p JOIN users u ON p.author_id = u.id WHERE p.school_id = ? ORDER BY p.created_at DESC");
|
|
$posts->execute([$school_id]);
|
|
$posts = $posts->fetchAll();
|
|
|
|
$pageTitle = "Teacher Collaboration Hub";
|
|
include 'includes/header.php';
|
|
?>
|
|
|
|
<div class="container mt-5">
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<h2><i class="bi bi-people-fill me-2"></i>Collaboration Hub</h2>
|
|
<div class="btn-group">
|
|
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#uploadModal">
|
|
<i class="bi bi-upload me-2"></i>Share Resource
|
|
</button>
|
|
<button class="btn btn-outline-primary" data-bs-toggle="modal" data-bs-target="#postModal">
|
|
<i class="bi bi-chat-dots me-2"></i>New Topic
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<?php if ($success): ?>
|
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
|
<?php echo $success; ?>
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<ul class="nav nav-tabs mb-4" id="hubTabs" role="tablist">
|
|
<li class="nav-item">
|
|
<button class="nav-link active" id="resources-tab" data-bs-toggle="tab" data-bs-target="#resources" type="button" role="tab">Resources</button>
|
|
</li>
|
|
<li class="nav-item">
|
|
<button class="nav-link" id="forum-tab" data-bs-toggle="tab" data-bs-target="#forum" type="button" role="tab">Discussion Forum</button>
|
|
</li>
|
|
</ul>
|
|
|
|
<div class="tab-content" id="hubTabsContent">
|
|
<!-- Resources Tab -->
|
|
<div class="tab-pane fade show active" id="resources" role="tabpanel">
|
|
<div class="row">
|
|
<?php if (empty($resources)): ?>
|
|
<div class="col-12 text-center py-5">
|
|
<i class="bi bi-folder2-open display-1 text-light"></i>
|
|
<p class="mt-3 text-muted">No resources shared yet. Be the first!</p>
|
|
</div>
|
|
<?php else: ?>
|
|
<?php foreach ($resources as $res): ?>
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card h-100 shadow-sm border-0">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between mb-2">
|
|
<span class="badge bg-light text-dark"><?php echo htmlspecialchars($res['subject']); ?></span>
|
|
<span class="badge bg-light text-dark">Grade <?php echo htmlspecialchars($res['grade']); ?></span>
|
|
</div>
|
|
<h5 class="card-title"><?php echo htmlspecialchars($res['title']); ?></h5>
|
|
<p class="card-text text-muted small"><?php echo htmlspecialchars($res['description']); ?></p>
|
|
</div>
|
|
<div class="card-footer bg-white border-0 py-3">
|
|
<div class="d-flex align-items-center mb-3">
|
|
<div class="flex-shrink-0">
|
|
<i class="bi bi-person-circle fs-4 text-primary"></i>
|
|
</div>
|
|
<div class="flex-grow-1 ms-2">
|
|
<div class="small fw-bold"><?php echo explode('@', $res['teacher_email'])[0]; ?></div>
|
|
<div class="text-muted smaller"><?php echo date('M d, Y', strtotime($res['created_at'])); ?></div>
|
|
</div>
|
|
</div>
|
|
<button class="btn btn-sm btn-outline-primary w-100">
|
|
<i class="bi bi-download me-2"></i>Download Resource
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Forum Tab -->
|
|
<div class="tab-pane fade" id="forum" role="tabpanel">
|
|
<div class="card shadow-sm border-0">
|
|
<div class="list-group list-group-flush">
|
|
<?php if (empty($posts)): ?>
|
|
<div class="text-center py-5">
|
|
<i class="bi bi-chat-left-dots display-1 text-light"></i>
|
|
<p class="mt-3 text-muted">Start a conversation with your colleagues.</p>
|
|
</div>
|
|
<?php else: ?>
|
|
<?php foreach ($posts as $post): ?>
|
|
<a href="#" class="list-group-item list-group-item-action py-4 border-0 border-bottom">
|
|
<div class="d-flex w-100 justify-content-between align-items-start">
|
|
<div class="me-3">
|
|
<h5 class="mb-1"><?php echo htmlspecialchars($post['title']); ?></h5>
|
|
<p class="mb-1 text-muted"><?php echo htmlspecialchars(substr($post['content'], 0, 150)) . '...'; ?></p>
|
|
<div class="small mt-2">
|
|
<span class="text-primary fw-bold"><?php echo explode('@', $post['author_email'])[0]; ?></span>
|
|
<span class="text-muted ms-2">• <?php echo date('M d, Y', strtotime($post['created_at'])); ?></span>
|
|
</div>
|
|
</div>
|
|
<div class="text-end">
|
|
<span class="badge rounded-pill bg-light text-primary px-3 py-2">
|
|
<i class="bi bi-chat-fill me-1"></i> <?php echo $post['comment_count']; ?>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Upload Modal -->
|
|
<div class="modal fade" id="uploadModal" tabindex="-1">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content border-0 shadow">
|
|
<div class="modal-header border-0">
|
|
<h5 class="modal-title">Share Learning Resource</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<form method="POST">
|
|
<div class="modal-body">
|
|
<div class="mb-3">
|
|
<label class="form-label">Resource Title</label>
|
|
<input type="text" name="title" class="form-control" required placeholder="e.g. Grade 10 Math Exam Prep">
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Grade</label>
|
|
<select name="grade" class="form-select" required>
|
|
<option value="8">Grade 8</option>
|
|
<option value="9">Grade 9</option>
|
|
<option value="10">Grade 10</option>
|
|
<option value="11">Grade 11</option>
|
|
<option value="12">Grade 12</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Subject</label>
|
|
<input type="text" name="subject" class="form-control" required placeholder="e.g. Mathematics">
|
|
</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label">Description</label>
|
|
<textarea name="description" class="form-control" rows="3" placeholder="Briefly describe the resource..."></textarea>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label">File (Placeholder)</label>
|
|
<input type="file" class="form-control" disabled>
|
|
<small class="text-muted">File upload disabled for prototype.</small>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer border-0">
|
|
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Cancel</button>
|
|
<button type="submit" name="upload_resource" class="btn btn-primary">Upload & Share</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Post Modal -->
|
|
<div class="modal fade" id="postModal" tabindex="-1">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content border-0 shadow">
|
|
<div class="modal-header border-0">
|
|
<h5 class="modal-title">Start Discussion Topic</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<form method="POST">
|
|
<div class="modal-body">
|
|
<div class="mb-3">
|
|
<label class="form-label">Topic Title</label>
|
|
<input type="text" name="title" class="form-control" required placeholder="What do you want to discuss?">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label">Content</label>
|
|
<textarea name="content" class="form-control" rows="5" required placeholder="Share your thoughts or ask a question..."></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer border-0">
|
|
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Cancel</button>
|
|
<button type="submit" name="create_post" class="btn btn-primary">Post Topic</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php include 'includes/footer.php'; ?>
|