[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: manage_students.php
<?php require_once '../config/database.php'; requireRole('teacher'); $teacher_id = getUserId(); $message = ''; $error = ''; // Get teacher's assignments $assignments = $pdo->prepare(" SELECT DISTINCT g.id as grade_id, g.name as grade_name, st.name as stage_name FROM teacher_assignments ta JOIN grades g ON ta.grade_id = g.id JOIN stages st ON g.stage_id = st.id WHERE ta.teacher_id = ? ORDER BY st.name, g.name "); $assignments->execute([$teacher_id]); $teacher_grades = $assignments->fetchAll(); // Handle form submissions if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST['add_class_list'])) { $grade_id = $_POST['grade_id']; $class_name = sanitize($_POST['class_name']); $students_text = sanitize($_POST['students_text']); $gender_type = $_POST['gender_type'] ?? 'mixed'; if (empty($grade_id) || empty($class_name) || empty($students_text)) { $error = 'جميع الحقول مطلوبة'; } else { // Verify teacher has access to this grade $verify_stmt = $pdo->prepare(" SELECT COUNT(*) FROM teacher_assignments WHERE teacher_id = ? AND grade_id = ? "); $verify_stmt->execute([$teacher_id, $grade_id]); if ($verify_stmt->fetchColumn() == 0) { $error = 'ليس لديك صلاحية لإدارة طلاب هذا الصف'; } else { // Parse student names (one per line) $student_names = array_filter(array_map('trim', explode("\n", $students_text))); if (empty($student_names)) { $error = 'يجب إدخال أسماء الطلاب'; } else { try { $pdo->beginTransaction(); // Add class list $class_stmt = $pdo->prepare("INSERT INTO class_lists (teacher_id, grade_id, class_name, gender_type) VALUES (?, ?, ?, ?)"); $class_stmt->execute([$teacher_id, $grade_id, $class_name, $gender_type]); $class_id = $pdo->lastInsertId(); // Add students to the class $student_stmt = $pdo->prepare("INSERT INTO student_lists (teacher_id, grade_id, class_id, student_name) VALUES (?, ?, ?, ?)"); foreach ($student_names as $student_name) { if (!empty($student_name)) { $student_stmt->execute([$teacher_id, $grade_id, $class_id, $student_name]); } } $pdo->commit(); $message = 'تم حفظ قائمة الفصل بنجاح'; } catch (Exception $e) { $pdo->rollBack(); $error = 'حدث خطأ في حفظ قائمة الفصل'; } } } } } elseif (isset($_POST['delete_class'])) { $class_id = $_POST['class_id']; try { $pdo->beginTransaction(); // Delete students first $pdo->prepare("DELETE FROM student_lists WHERE class_id = ?")->execute([$class_id]); // Delete class $pdo->prepare("DELETE FROM class_lists WHERE id = ? AND teacher_id = ?")->execute([$class_id, $teacher_id]); $pdo->commit(); $message = 'تم حذف قائمة الفصل بنجاح'; } catch (Exception $e) { $pdo->rollBack(); $error = 'حدث خطأ في حذف قائمة الفصل'; } } } // Get class lists for selected grade $class_lists = []; $selected_grade_id = $_GET['grade'] ?? ($_POST['grade_id'] ?? ''); if ($selected_grade_id) { $classes_stmt = $pdo->prepare(" SELECT cl.*, COUNT(sl.id) as student_count FROM class_lists cl LEFT JOIN student_lists sl ON cl.id = sl.class_id WHERE cl.teacher_id = ? AND cl.grade_id = ? GROUP BY cl.id ORDER BY cl.class_name "); $classes_stmt->execute([$teacher_id, $selected_grade_id]); $class_lists = $classes_stmt->fetchAll(); } ?> <!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>إدارة الطلاب - منصة المسابقات التعليمية</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet"> <link href="../assets/css/style.css" rel="stylesheet"> </head> <body> <!-- Navigation --> <nav class="navbar navbar-expand-lg navbar-dark bg-success"> <div class="container-fluid"> <a class="navbar-brand" href="../index.php"> <i class="fas fa-trophy me-2"></i> منصة المسابقات التعليمية </a> <div class="navbar-nav me-auto"> <span class="navbar-text"> <i class="fas fa-chalkboard-teacher me-1"></i> مرحباً، <?= sanitize($_SESSION['user_name']) ?> </span> </div> <div class="navbar-nav"> <a class="nav-link" href="../auth/logout.php"> <i class="fas fa-sign-out-alt me-1"></i> تسجيل الخروج </a> </div> </div> </nav> <div class="container-fluid"> <div class="row"> <!-- Sidebar --> <div class="col-md-3 col-lg-2 bg-light sidebar py-4"> <ul class="nav nav-pills flex-column"> <li class="nav-item"> <a class="nav-link" href="dashboard.php"> <i class="fas fa-tachometer-alt me-2"></i> الرئيسية </a> </li> <li class="nav-item"> <a class="nav-link active" href="manage_students.php"> <i class="fas fa-users me-2"></i> إدارة الطلاب </a> </li> <li class="nav-item"> <a class="nav-link" href="create_competition.php"> <i class="fas fa-plus-circle me-2"></i> إنشاء مسابقة </a> </li> <li class="nav-item"> <a class="nav-link" href="my_competitions.php"> <i class="fas fa-trophy me-2"></i> مسابقاتي </a> </li> <li class="nav-item"> <a class="nav-link" href="results.php"> <i class="fas fa-chart-bar me-2"></i> النتائج </a> </li> </ul> </div> <!-- Main Content --> <div class="col-md-9 col-lg-10 py-4"> <div class="d-flex justify-content-between align-items-center mb-4"> <h1 class="h3">إدارة قوائم الطلاب</h1> <a href="dashboard.php" class="btn btn-outline-secondary"> <i class="fas fa-arrow-right me-1"></i> العودة للوحة المعلم </a> </div> <?php if ($message): ?> <div class="alert alert-success alert-dismissible fade show"> <i class="fas fa-check-circle me-2"></i> <?= $message ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <?php if ($error): ?> <div class="alert alert-danger alert-dismissible fade show"> <i class="fas fa-exclamation-circle me-2"></i> <?= $error ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <?php if (empty($teacher_grades)): ?> <div class="alert alert-info"> <i class="fas fa-info-circle me-2"></i> لم يتم تكليفك بأي صفوف دراسية بعد. يرجى التواصل مع الإدارة. </div> <?php else: ?> <div class="row"> <!-- Grade Selection --> <div class="col-md-4 mb-4"> <div class="card"> <div class="card-header"> <h5 class="mb-0"> <i class="fas fa-graduation-cap me-2"></i> اختر الصف </h5> </div> <div class="card-body"> <div class="list-group"> <?php foreach ($teacher_grades as $grade): ?> <a href="?grade=<?= $grade['grade_id'] ?>" class="list-group-item list-group-item-action <?= $selected_grade_id == $grade['grade_id'] ? 'active' : '' ?>"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="mb-1"><?= sanitize($grade['grade_name']) ?></h6> <small><?= sanitize($grade['stage_name']) ?></small> </div> <i class="fas fa-chevron-left"></i> </div> </a> <?php endforeach; ?> </div> </div> </div> </div> <!-- Class Lists Management --> <div class="col-md-8"> <?php if ($selected_grade_id): ?> <!-- Add New Class Form --> <div class="card mb-4"> <div class="card-header"> <h5 class="mb-0"> <i class="fas fa-plus me-2"></i> إضافة قائمة فصل جديدة </h5> </div> <div class="card-body"> <form method="POST" action=""> <input type="hidden" name="grade_id" value="<?= $selected_grade_id ?>"> <div class="row"> <div class="col-md-6 mb-3"> <label for="class_name" class="form-label">اسم الفصل</label> <input type="text" class="form-control" id="class_name" name="class_name" placeholder="مثال: الصف الأول أ" required> </div> <div class="col-md-6 mb-3"> <label for="gender_type" class="form-label">نوع الفصل</label> <select class="form-select" id="gender_type" name="gender_type"> <option value="mixed">مختلط</option> <option value="boys">بنين فقط</option> <option value="girls">بنات فقط</option> </select> </div> </div> <div class="mb-3"> <label for="students_text" class="form-label">أسماء الطلاب</label> <textarea class="form-control" id="students_text" name="students_text" rows="10" placeholder="أدخل اسم كل طالب في سطر منفصل..." required></textarea> <div class="form-text"> <i class="fas fa-info-circle me-1"></i> أدخل اسم كل طالب في سطر منفصل. يمكنك نسخ القائمة من ملف Excel أو Word. </div> </div> <div class="d-flex justify-content-between"> <div> <button type="button" class="btn btn-outline-secondary" onclick="clearStudents()"> <i class="fas fa-eraser me-1"></i> مسح الكل </button> <button type="button" class="btn btn-outline-info" onclick="addSampleStudents()"> <i class="fas fa-plus me-1"></i> إضافة أسماء تجريبية </button> </div> <button type="submit" name="add_class_list" class="btn btn-success"> <i class="fas fa-save me-1"></i> حفظ قائمة الفصل </button> </div> </form> </div> </div> <!-- Existing Class Lists --> <?php if (!empty($class_lists)): ?> <div class="card"> <div class="card-header"> <h5 class="mb-0"> <i class="fas fa-list me-2"></i> قوائم الفصول الموجودة </h5> </div> <div class="card-body"> <div class="row"> <?php foreach ($class_lists as $class): ?> <div class="col-md-6 mb-3"> <div class="card border-primary"> <div class="card-header d-flex justify-content-between align-items-center"> <h6 class="mb-0"><?= sanitize($class['class_name']) ?></h6> <div class="btn-group"> <button class="btn btn-sm btn-outline-primary view-students" data-class-id="<?= $class['id'] ?>"> <i class="fas fa-eye"></i> </button> <button class="btn btn-sm btn-outline-danger delete-class" data-class-id="<?= $class['id'] ?>" data-class-name="<?= sanitize($class['class_name']) ?>"> <i class="fas fa-trash"></i> </button> </div> </div> <div class="card-body"> <p class="mb-1"> <i class="fas fa-users me-1"></i> <?= $class['student_count'] ?> طالب </p> <p class="mb-0"> <i class="fas fa-venus-mars me-1"></i> <?= $class['gender_type'] == 'mixed' ? 'مختلط' : ($class['gender_type'] == 'boys' ? 'بنين' : 'بنات') ?> </p> </div> </div> </div> <?php endforeach; ?> </div> </div> </div> <?php endif; ?> <?php else: ?> <div class="card"> <div class="card-body text-center py-5"> <i class="fas fa-arrow-right fa-3x text-muted mb-3"></i> <h5 class="text-muted">اختر صفاً من القائمة لإدارة قوائم الفصول</h5> </div> </div> <?php endif; ?> </div> </div> <?php endif; ?> </div> </div> </div> <!-- View Students Modal --> <div class="modal fade" id="viewStudentsModal" 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> <div class="modal-body" id="studentsListContent"> <!-- Students will be loaded here --> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button> </div> </div> </div> </div> <!-- Delete Class Modal --> <div class="modal fade" id="deleteClassModal" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <form method="POST"> <div class="modal-header"> <h5 class="modal-title">حذف قائمة الفصل</h5> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <div class="modal-body"> <input type="hidden" name="class_id" id="deleteClassId"> <p>هل أنت متأكد من حذف قائمة الفصل "<span id="deleteClassName"></span>"؟</p> <div class="alert alert-warning"> <i class="fas fa-exclamation-triangle me-2"></i> سيتم حذف جميع أسماء الطلاب في هذا الفصل! </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إلغاء</button> <button type="submit" name="delete_class" class="btn btn-danger">حذف القائمة</button> </div> </form> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <script src="../assets/js/main.js"></script> <script> function clearStudents() { if (confirm('هل أنت متأكد من مسح جميع أسماء الطلاب؟')) { $('#students_text').val(''); } } function addSampleStudents() { const sampleNames = [ 'أحمد محمد علي', 'فاطمة أحمد السالم', 'محمد عبدالله الأحمد', 'نورا سعد المطيري', 'عبدالرحمن خالد العتيبي', 'مريم عبدالعزيز القحطاني', 'سارة محمد الغامدي', 'يوسف عبدالله الشهري', 'هند سعود العنزي', 'عمر أحمد الحربي' ]; const currentText = $('#students_text').val().trim(); const newText = currentText ? currentText + '\n' + sampleNames.join('\n') : sampleNames.join('\n'); $('#students_text').val(newText); } $(document).ready(function() { // View students $('.view-students').click(function() { const classId = $(this).data('class-id'); $.post('../ajax/get_class_students.php', { class_id: classId }, function(response) { const data = JSON.parse(response); if (data.success) { $('#studentsListContent').html(data.html); $('#viewStudentsModal').modal('show'); } }); }); // Delete class $('.delete-class').click(function() { const classId = $(this).data('class-id'); const className = $(this).data('class-name'); $('#deleteClassId').val(classId); $('#deleteClassName').text(className); $('#deleteClassModal').modal('show'); }); }); </script> </body> </html>
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.87 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