[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: manage_teachers.php
<?php require_once '../config/database.php'; requireRole('admin'); $message = ''; $error = ''; // Handle form submissions if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST['add_teacher'])) { $username = sanitize($_POST['username']); $password = $_POST['password']; $full_name = sanitize($_POST['full_name']); $email = sanitize($_POST['email']); if (empty($username) || empty($password) || empty($full_name) || empty($email)) { $error = 'جميع الحقول مطلوبة'; } else { // Check if username or email exists $stmt = $pdo->prepare("SELECT id FROM users WHERE username = ? OR email = ?"); $stmt->execute([$username, $email]); if ($stmt->fetch()) { $error = 'اسم المستخدم أو البريد الإلكتروني موجود مسبقاً'; } else { $hashed_password = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (username, password, full_name, email, role) VALUES (?, ?, ?, ?, 'teacher')"); if ($stmt->execute([$username, $hashed_password, $full_name, $email])) { $message = 'تم إضافة المعلم بنجاح'; } else { $error = 'حدث خطأ في إضافة المعلم'; } } } } elseif (isset($_POST['edit_teacher'])) { $id = $_POST['teacher_id']; $username = sanitize($_POST['username']); $full_name = sanitize($_POST['full_name']); $email = sanitize($_POST['email']); $password = $_POST['password']; if (empty($username) || empty($full_name) || empty($email)) { $error = 'جميع الحقول مطلوبة'; } else { // Check if username or email exists for other users $stmt = $pdo->prepare("SELECT id FROM users WHERE (username = ? OR email = ?) AND id != ?"); $stmt->execute([$username, $email, $id]); if ($stmt->fetch()) { $error = 'اسم المستخدم أو البريد الإلكتروني موجود مسبقاً'; } else { if (!empty($password)) { $hashed_password = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("UPDATE users SET username = ?, password = ?, full_name = ?, email = ? WHERE id = ?"); $result = $stmt->execute([$username, $hashed_password, $full_name, $email, $id]); } else { $stmt = $pdo->prepare("UPDATE users SET username = ?, full_name = ?, email = ? WHERE id = ?"); $result = $stmt->execute([$username, $full_name, $email, $id]); } if ($result) { $message = 'تم تحديث بيانات المعلم بنجاح'; } else { $error = 'حدث خطأ في تحديث بيانات المعلم'; } } } } elseif (isset($_POST['delete_teacher'])) { $id = $_POST['teacher_id']; $stmt = $pdo->prepare("DELETE FROM users WHERE id = ? AND role = 'teacher'"); if ($stmt->execute([$id])) { $message = 'تم حذف المعلم بنجاح'; } else { $error = 'حدث خطأ في حذف المعلم'; } } elseif (isset($_POST['assign_teacher'])) { $teacher_id = $_POST['teacher_id']; $grade_ids = $_POST['grade_ids'] ?? []; $subject_ids = $_POST['subject_ids'] ?? []; if (empty($grade_ids) || empty($subject_ids)) { $error = 'يجب اختيار صف ومادة واحدة على الأقل'; } else { try { $pdo->beginTransaction(); // Delete existing assignments $stmt = $pdo->prepare("DELETE FROM teacher_assignments WHERE teacher_id = ?"); $stmt->execute([$teacher_id]); // Add new assignments $stmt = $pdo->prepare("INSERT INTO teacher_assignments (teacher_id, grade_id, subject_id) VALUES (?, ?, ?)"); foreach ($grade_ids as $grade_id) { foreach ($subject_ids as $subject_id) { $stmt->execute([$teacher_id, $grade_id, $subject_id]); } } $pdo->commit(); $message = 'تم تحديث تكليفات المعلم بنجاح'; } catch (Exception $e) { $pdo->rollBack(); $error = 'حدث خطأ في تحديث التكليفات'; } } } } // Get all teachers with their assignments $teachers = $pdo->query(" SELECT u.*, GROUP_CONCAT(DISTINCT CONCAT(g.name, ' - ', s.name) SEPARATOR ', ') as assignments FROM users u LEFT JOIN teacher_assignments ta ON u.id = ta.teacher_id LEFT JOIN grades g ON ta.grade_id = g.id LEFT JOIN subjects s ON ta.subject_id = s.id WHERE u.role = 'teacher' GROUP BY u.id ORDER BY u.full_name ")->fetchAll(); // Get grades and subjects for assignment $grades = $pdo->query("SELECT g.*, st.name as stage_name FROM grades g JOIN stages st ON g.stage_id = st.id ORDER BY st.name, g.name")->fetchAll(); $subjects = $pdo->query("SELECT * FROM subjects ORDER BY name")->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-primary"> <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-user-shield 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" href="manage_stages.php"> <i class="fas fa-layer-group me-2"></i> إدارة المراحل </a> </li> <li class="nav-item"> <a class="nav-link" href="manage_grades.php"> <i class="fas fa-graduation-cap me-2"></i> إدارة الصفوف </a> </li> <li class="nav-item"> <a class="nav-link" href="manage_subjects.php"> <i class="fas fa-book me-2"></i> إدارة المواد </a> </li> <li class="nav-item"> <a class="nav-link active" href="manage_teachers.php"> <i class="fas fa-chalkboard-teacher me-2"></i> إدارة المعلمين </a> </li> <li class="nav-item"> <a class="nav-link" href="manage_competitions.php"> <i class="fas fa-trophy me-2"></i> إدارة المسابقات </a> </li> <li class="nav-item"> <a class="nav-link" href="settings.php"> <i class="fas fa-cog 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> <button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addTeacherModal"> <i class="fas fa-plus me-1"></i> إضافة معلم جديد </button> </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; ?> <!-- Teachers Table --> <div class="card"> <div class="card-header"> <h5 class="mb-0"> <i class="fas fa-chalkboard-teacher me-2"></i> قائمة المعلمين </h5> </div> <div class="card-body"> <?php if (empty($teachers)): ?> <div class="alert alert-info"> <i class="fas fa-info-circle me-2"></i> لا يوجد معلمين مضافين بعد </div> <?php else: ?> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>الرقم</th> <th>الاسم الكامل</th> <th>اسم المستخدم</th> <th>البريد الإلكتروني</th> <th>التكليفات</th> <th>الإجراءات</th> </tr> </thead> <tbody> <?php foreach ($teachers as $index => $teacher): ?> <tr> <td><?= $index + 1 ?></td> <td><?= sanitize($teacher['full_name']) ?></td> <td><?= sanitize($teacher['username']) ?></td> <td><?= sanitize($teacher['email']) ?></td> <td> <?php if ($teacher['assignments']): ?> <small class="text-muted"><?= sanitize($teacher['assignments']) ?></small> <?php else: ?> <span class="badge bg-warning">غير مكلف</span> <?php endif; ?> </td> <td> <div class="btn-group" role="group"> <button class="btn btn-sm btn-outline-success assign-teacher" data-id="<?= $teacher['id'] ?>" data-name="<?= sanitize($teacher['full_name']) ?>"> <i class="fas fa-tasks"></i> تكليف </button> <button class="btn btn-sm btn-outline-primary edit-teacher" data-id="<?= $teacher['id'] ?>" data-username="<?= sanitize($teacher['username']) ?>" data-full-name="<?= sanitize($teacher['full_name']) ?>" data-email="<?= sanitize($teacher['email']) ?>"> <i class="fas fa-edit"></i> تعديل </button> <button class="btn btn-sm btn-outline-danger delete-teacher" data-id="<?= $teacher['id'] ?>" data-name="<?= sanitize($teacher['full_name']) ?>"> <i class="fas fa-trash"></i> حذف </button> </div> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php endif; ?> </div> </div> </div> </div> </div> <!-- Add Teacher Modal --> <div class="modal fade" id="addTeacherModal" tabindex="-1"> <div class="modal-dialog modal-lg"> <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"> <div class="row"> <div class="col-md-6 mb-3"> <label for="teacherFullName" class="form-label">الاسم الكامل</label> <input type="text" class="form-control" id="teacherFullName" name="full_name" required> </div> <div class="col-md-6 mb-3"> <label for="teacherUsername" class="form-label">اسم المستخدم</label> <input type="text" class="form-control" id="teacherUsername" name="username" required> </div> </div> <div class="row"> <div class="col-md-6 mb-3"> <label for="teacherEmail" class="form-label">البريد الإلكتروني</label> <input type="email" class="form-control" id="teacherEmail" name="email" required> </div> <div class="col-md-6 mb-3"> <label for="teacherPassword" class="form-label">كلمة المرور</label> <input type="password" class="form-control" id="teacherPassword" name="password" required> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إلغاء</button> <button type="submit" name="add_teacher" class="btn btn-primary">إضافة المعلم</button> </div> </form> </div> </div> </div> <!-- Edit Teacher Modal --> <div class="modal fade" id="editTeacherModal" tabindex="-1"> <div class="modal-dialog modal-lg"> <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="teacher_id" id="editTeacherId"> <div class="row"> <div class="col-md-6 mb-3"> <label for="editTeacherFullName" class="form-label">الاسم الكامل</label> <input type="text" class="form-control" id="editTeacherFullName" name="full_name" required> </div> <div class="col-md-6 mb-3"> <label for="editTeacherUsername" class="form-label">اسم المستخدم</label> <input type="text" class="form-control" id="editTeacherUsername" name="username" required> </div> </div> <div class="row"> <div class="col-md-6 mb-3"> <label for="editTeacherEmail" class="form-label">البريد الإلكتروني</label> <input type="email" class="form-control" id="editTeacherEmail" name="email" required> </div> <div class="col-md-6 mb-3"> <label for="editTeacherPassword" class="form-label">كلمة المرور الجديدة</label> <input type="password" class="form-control" id="editTeacherPassword" name="password"> <div class="form-text">اتركه فارغاً إذا كنت لا تريد تغيير كلمة المرور</div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إلغاء</button> <button type="submit" name="edit_teacher" class="btn btn-primary">حفظ التغييرات</button> </div> </form> </div> </div> </div> <!-- Assign Teacher Modal --> <div class="modal fade" id="assignTeacherModal" tabindex="-1"> <div class="modal-dialog modal-lg"> <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="teacher_id" id="assignTeacherId"> <h6 class="mb-3">المعلم: <span id="assignTeacherName"></span></h6> <div class="row"> <div class="col-md-6"> <h6>الصفوف الدراسية:</h6> <div class="form-check-list" style="max-height: 200px; overflow-y: auto;"> <?php foreach ($grades as $grade): ?> <div class="form-check"> <input class="form-check-input" type="checkbox" name="grade_ids[]" value="<?= $grade['id'] ?>" id="grade_<?= $grade['id'] ?>"> <label class="form-check-label" for="grade_<?= $grade['id'] ?>"> <?= sanitize($grade['stage_name']) ?> - <?= sanitize($grade['name']) ?> </label> </div> <?php endforeach; ?> </div> </div> <div class="col-md-6"> <h6>المواد الدراسية:</h6> <div class="form-check-list" style="max-height: 200px; overflow-y: auto;"> <?php foreach ($subjects as $subject): ?> <div class="form-check"> <input class="form-check-input" type="checkbox" name="subject_ids[]" value="<?= $subject['id'] ?>" id="subject_<?= $subject['id'] ?>"> <label class="form-check-label" for="subject_<?= $subject['id'] ?>"> <?= sanitize($subject['name']) ?> </label> </div> <?php endforeach; ?> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إلغاء</button> <button type="submit" name="assign_teacher" class="btn btn-success">حفظ التكليفات</button> </div> </form> </div> </div> </div> <!-- Delete Teacher Modal --> <div class="modal fade" id="deleteTeacherModal" 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="teacher_id" id="deleteTeacherId"> <p>هل أنت متأكد من حذف المعلم "<span id="deleteTeacherNameDisplay"></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_teacher" 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> $(document).ready(function() { // Edit teacher $('.edit-teacher').click(function() { const id = $(this).data('id'); const username = $(this).data('username'); const fullName = $(this).data('full-name'); const email = $(this).data('email'); $('#editTeacherId').val(id); $('#editTeacherUsername').val(username); $('#editTeacherFullName').val(fullName); $('#editTeacherEmail').val(email); $('#editTeacherModal').modal('show'); }); // Assign teacher $('.assign-teacher').click(function() { const id = $(this).data('id'); const name = $(this).data('name'); $('#assignTeacherId').val(id); $('#assignTeacherName').text(name); // Clear all checkboxes $('input[type="checkbox"]').prop('checked', false); $('#assignTeacherModal').modal('show'); }); // Delete teacher $('.delete-teacher').click(function() { const id = $(this).data('id'); const name = $(this).data('name'); $('#deleteTeacherId').val(id); $('#deleteTeacherNameDisplay').text(name); $('#deleteTeacherModal').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