39669-vm/teachers.php
2026-04-17 03:38:41 +00:00

504 lines
28 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/includes/app.php';
$flash = consume_flash();
$applicationId = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT) ?: 0;
$requestedCycleId = filter_input(INPUT_GET, 'cycle', FILTER_VALIDATE_INT) ?: 0;
$application = $applicationId > 0 ? get_application($applicationId) : null;
$isApprovedSchool = $application && (string) $application['status'] === 'approved';
$values = teacher_defaults();
$errors = [];
$cycleContext = ['cycles' => [], 'selected' => null, 'active' => null, 'read_only' => false];
$selectedCycle = null;
$selectedCycleId = 0;
$isCycleReadOnly = false;
$cycleLabel = 'لا توجد دورة بعد';
if ($application && $isApprovedSchool) {
$cycleContext = resolve_school_cycle_context((int) $application['id'], $application, $requestedCycleId);
$selectedCycle = $cycleContext['selected'];
$selectedCycleId = $selectedCycle ? (int) ($selectedCycle['id'] ?? 0) : 0;
$isCycleReadOnly = (bool) $cycleContext['read_only'];
$cycleLabel = $selectedCycle ? (string) $selectedCycle['cycle_name'] : $cycleLabel;
}
$allEnabledSubjectMap = get_enabled_subject_map();
$applicationSubjectIds = $application ? normalize_id_list($application['subjects'] ?? []) : [];
$teacherSubjectMap = $allEnabledSubjectMap;
if ($applicationSubjectIds !== [] && $allEnabledSubjectMap !== []) {
$applicationSubjectLookup = array_fill_keys($applicationSubjectIds, true);
$teacherSubjectMap = array_filter(
$allEnabledSubjectMap,
static fn (string $_label, int|string $subjectId): bool => isset($applicationSubjectLookup[(int) $subjectId]),
ARRAY_FILTER_USE_BOTH
);
}
if ($teacherSubjectMap === []) {
$teacherSubjectMap = $allEnabledSubjectMap;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $application) {
$action = $_POST['action'] ?? 'add';
$teacherId = filter_input(INPUT_POST, 'teacher_id', FILTER_VALIDATE_INT) ?: 0;
[$values, $errors] = validate_teacher_input($_POST, array_keys($teacherSubjectMap));
if (!$isApprovedSchool) {
$errors['form'] = 'لا يمكن فتح صفحة المعلمين قبل اعتماد المركز.';
} elseif ($selectedCycleId <= 0) {
$errors['form'] = 'يرجى إنشاء دورة موسمية أولاً من صفحة المركز.';
} elseif ($isCycleReadOnly) {
$errors['form'] = 'هذه الدورة مؤرشفة للقراءة فقط. افتح دورة جديدة أو اختر دورة نشطة لإضافة/تعديل أعضاء.';
}
if ($errors === []) {
try {
if ($action === 'edit' && $teacherId > 0) {
update_teacher_in_cycle((int) $application['id'], $selectedCycleId, $teacherId, $values);
set_flash('success', 'تم تحديث بيانات عضو الفريق بنجاح.');
} else {
create_teacher_in_cycle((int) $application['id'], $selectedCycleId, $values);
set_flash('success', 'تمت إضافة عضو الفريق داخل الدورة الموسمية المحددة بنجاح.');
}
header('Location: ' . school_page_url('teachers.php', (int) $application['id'], $selectedCycleId));
exit;
} catch (Throwable $exception) {
$errors['form'] = 'تعذر حفظ بيانات الفريق حالياً. يرجى المحاولة مرة أخرى.';
}
}
}
$search = clean_text($_GET['search'] ?? '', 255);
$filters = [
'role_title' => clean_text($_GET['role_title'] ?? '', 50),
'employment_status' => clean_text($_GET['employment_status'] ?? '', 50),
'search' => $search,
];
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT) ?: 1;
$limit = 15;
$offset = ($page - 1) * $limit;
$teachers = $isApprovedSchool && $selectedCycleId > 0 ? list_school_teachers_by_cycle((int) $application['id'], $selectedCycleId, $filters, $limit, $offset) : [];
foreach ($teachers as &$teacher) {
$teacher['subject_ids'] = normalize_id_list($teacher['subject_ids'] ?? []);
$teacher['subject_labels'] = teacher_subject_labels($teacher, $allEnabledSubjectMap);
}
unset($teacher);
$totalTeachers = $isApprovedSchool && $selectedCycleId > 0 ? count_school_teachers_by_cycle((int) $application['id'], $selectedCycleId, $filters) : 0;
$metrics = $isApprovedSchool && $selectedCycleId > 0 ? school_teacher_metrics_by_cycle((int) $application['id'], $selectedCycleId) : [
'total' => 0,
'active' => 0,
'pending' => 0,
'inactive' => 0,
'teachers' => 0,
'supervisors' => 0,
'email_ready' => 0,
];
$studentMetrics = $isApprovedSchool && $selectedCycleId > 0 ? school_student_metrics_by_cycle((int) $application['id'], $selectedCycleId) : [
'total' => 0,
'boys' => 0,
'girls' => 0,
'active' => 0,
'waiting' => 0,
'withdrawn' => 0,
];
$pageTitle = $application ? 'فريق المعلمين: ' . (string) $application['center_name'] . ($selectedCycle ? ' — ' . $cycleLabel : '') : 'فريق المعلمين';
$pageDescription = 'صفحة مستقلة لإدارة المعلمين والمشرفين بعد اعتماد المدرسة، مع ربط كل فريق بالدورة الموسمية المناسبة.';
$approvedSchoolUrl = $application ? school_page_url('approved_school.php', (int) $application['id'], $selectedCycleId) : 'approved_school.php';
$studentsUrl = $application ? school_page_url('students.php', (int) $application['id'], $selectedCycleId) : 'students.php';
$assessmentsUrl = $application ? school_page_url('assessments.php', (int) $application['id'], $selectedCycleId) : 'assessments.php';
$attendanceUrl = $application ? school_page_url('attendance.php', (int) $application['id'], $selectedCycleId) : 'attendance.php';
$applicationDetailUrl = $application ? 'application_detail.php?id=' . urlencode((string) $application['id']) : 'application_detail.php';
if (!$application) {
http_response_code(404);
}
render_page_start($pageTitle, 'approved', $pageDescription, (string) ($application['favicon'] ?? ''));
render_flash($flash);
?>
<section class="py-4 py-lg-5">
<div class="container-xxl">
<div class="admin-layout row g-4 align-items-start">
<div class="col-lg-3 layout-sidebar-column">
<?php if ($application) { require __DIR__ . '/includes/center_sidebar.php'; } else { require __DIR__ . '/includes/sidebar.php'; } ?>
</div>
<div class="col-lg-9 layout-content-column">
<?php if (!$application): ?>
<div class="app-card text-center py-5">
<div class="empty-title mb-2">المدرسة غير موجودة</div>
<p class="text-muted mb-3">تحقق من رابط المدرسة أو ارجع إلى قائمة المراكز المعتمدة.</p>
<a class="btn btn-primary" href="applications.php?status=approved">المراكز المعتمدة</a>
</div>
<?php elseif (!$isApprovedSchool): ?>
<div class="page-banner mb-4 mb-lg-5">
<div class="row g-4 align-items-center">
<div class="col-lg-8">
<span class="eyebrow mb-3">الفريق يُفعّل بعد الاعتماد</span>
<h1 class="page-title mb-3"><?= e((string) $application['center_name']) ?></h1>
<p class="page-copy mb-3">تم تجهيز صفحة المعلمين، لكن فتح سجل الفريق مرتبط بتحويل حالة المركز إلى <strong>معتمد</strong> أولاً حتى يبدأ التشغيل وفق الترتيب الإداري الصحيح.</p>
<div class="hero-meta">
<span>الحالة الحالية: <?= e(status_meta((string) $application['status'])['label']) ?></span>
<span>المدينة: <?= e((string) $application['city']) ?></span>
</div>
<div class="cta-stack mt-4">
<a class="btn btn-primary" href="<?= e($applicationDetailUrl) ?>">العودة لملف الاعتماد</a>
<a class="btn btn-outline-secondary" href="<?= e($approvedSchoolUrl) ?>">صفحة المركز</a>
</div>
</div>
</div>
</div>
<?php else: ?>
<div class="page-banner approved-hero mb-4 mb-lg-5">
<div class="row g-4 align-items-start">
<div class="col-lg-8">
<span class="approved-kicker mb-3">صفحة مستقلة لإدارة الفريق التعليمي</span>
<h1 class="page-title mb-3">فريق المدرسة — <?= e((string) $application['center_name']) ?></h1>
<p class="page-copy mb-3">بعد فتح سجل الطلاب، هذه هي الصفحة المنطقية التالية لبناء الكادر. يمكن هنا إضافة المعلمين والمشرفين والكوادر المساندة مع عزل واضح بين النموذج وكشف الفريق.</p>
<div class="hero-meta">
<span><?= e((string) $application['city']) ?></span>
<span><?= e((string) $metrics['active']) ?> أعضاء مفعلون</span>
<span><?= e((string) $metrics['supervisors']) ?> أدوار إشرافية</span>
</div>
<div class="cta-stack mt-4">
<a class="btn btn-outline-secondary" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-outline-secondary" href="<?= e($studentsUrl) ?>">تسجيل الطلاب</a>
</div>
</div>
<div class="col-lg-4">
<div class="app-card approved-note h-100">
<div class="section-title mb-3">ملخص الفريق</div>
<div class="summary-stack mb-3">
<div class="summary-row"><span>إجمالي الكادر</span><strong><?= e((string) $metrics['total']) ?> عضو</strong></div>
<div class="summary-row"><span>جاهزون للتواصل</span><strong><?= e((string) $metrics['email_ready']) ?> ببريد موثق</strong></div>
<div class="summary-row"><span>الطلاب النشطون</span><strong><?= e((string) $studentMetrics['active']) ?> طالب/طالبة</strong></div>
</div>
<p class="section-subtle mb-0">وجود سجل واضح للمعلمين يسهّل لاحقاً ربط الحصص والتقييمات بكل مدرسة.</p>
</div>
</div>
</div>
</div>
<?php if ($selectedCycle): ?>
<?php $cycleStatusMap = school_cycle_status_map(); ?>
<div class="row g-4 mb-4 align-items-start">
<div class="col-lg-<?= is_super_admin() ? '7' : '12' ?>">
<div class="app-card h-100">
<div class="section-head mb-3">
<div>
<div class="section-title">الدورة الموسمية الحالية</div>
<div class="section-copy">أعضاء الفريق في هذه الصفحة مرتبطون بالدورة <strong><?= e($cycleLabel) ?></strong>. عند أرشفة الموسم ستبقى القائمة محفوظة.</div>
</div>
<?= school_cycle_status_badge((string) $selectedCycle['status']) ?>
</div>
<div class="row g-3">
<div class="col-md-4"><div class="school-data-item"><strong>اسم الدورة</strong><span><?= e($cycleLabel) ?></span></div></div>
<div class="col-md-4"><div class="school-data-item"><strong>الفترة</strong><span><?= e((string) $selectedCycle['start_date']) ?> → <?= e((string) $selectedCycle['end_date']) ?></span></div></div>
<div class="col-md-4"><div class="school-data-item"><strong>عدد الدورات</strong><span><?= e((string) count($cycleContext['cycles'])) ?> دورة للمركز</span></div></div>
</div>
</div>
</div>
<?php if (is_super_admin()): ?>
<div class="col-lg-5">
<div class="app-card sidebar-card h-100">
<div class="section-title mb-3">التبديل بين الدورات</div>
<div class="quick-link-stack">
<?php foreach ($cycleContext['cycles'] as $cycle): ?>
<?php
$isCurrentCycleLink = (int) $cycle['id'] === $selectedCycleId;
$isActiveCycleLink = (int) $cycle['id'] === (int) (($cycleContext['active']['id'] ?? 0));
$cycleStatusLabel = (string) ($cycleStatusMap[$cycle['status']]['label'] ?? 'غير معروف');
$cycleMetaLine = (string) $cycle['start_date'] . ' → ' . (string) $cycle['end_date'] . ' — ' . $cycleStatusLabel;
?>
<a class="quick-link-item <?= $isCurrentCycleLink ? 'is-current' : '' ?>" href="<?= e(school_page_url('teachers.php', (int) $application['id'], (int) $cycle['id'])) ?>">
<div>
<strong><?= e((string) $cycle['cycle_name']) ?><?= $isCurrentCycleLink ? ' — المعروضة' : '' ?></strong>
<span><?= e($cycleMetaLine) ?></span>
</div>
</a>
<?php endforeach; ?>
</div>
</div>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<div class="row g-4 align-items-start">
<div class="col-lg-12">
<?php if (!empty($errors['form'])): ?>
<div class="alert alert-danger mb-4"><?= e($errors['form']) ?></div>
<?php endif; ?>
<div class="app-card mb-4">
<div class="section-head mb-3">
<div>
<div class="section-title">كشف الفريق التعليمي</div>
<div class="section-copy">جميع المعلمين والمشرفين المرتبطين بهذا المركز فقط.</div>
</div>
<div class="d-flex gap-2">
<span class="header-chip"><?= e((string) $metrics['email_ready']) ?> بريد جاهز / <?= e((string) $metrics['pending']) ?> بانتظار التفعيل</span>
<?php if (!$isCycleReadOnly): ?>
<button type="button" class="btn btn-primary btn-sm" data-bs-toggle="modal" data-bs-target="#teacherModal" onclick="resetTeacherModal()">
+ إضافة عضو للفريق
</button>
<?php endif; ?>
</div>
</div>
<form method="get" class="mb-4 bg-light p-3 rounded">
<input type="hidden" name="id" value="<?= e((string) $application['id']) ?>">
<input type="hidden" name="cycle" value="<?= e((string) $selectedCycleId) ?>">
<div class="row g-2">
<div class="col-md-4">
<input type="text" name="search" class="form-control form-control-sm" placeholder="ابحث بالاسم، البريد، الهاتف، التخصص..." value="<?= e($search) ?>">
</div>
<div class="col-md-3">
<select name="role_title" class="form-select form-select-sm">
<option value="">كل الأدوار</option>
<?php foreach (teacher_role_options() as $option): ?>
<option value="<?= e($option) ?>" <?= $filters['role_title'] === $option ? 'selected' : '' ?>><?= e($option) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-3">
<select name="employment_status" class="form-select form-select-sm">
<option value="">كل الحالات</option>
<?php foreach (teacher_employment_status_map() as $key => $meta): ?>
<option value="<?= e($key) ?>" <?= $filters['employment_status'] === $key ? 'selected' : '' ?>><?= e($meta['label']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-outline-secondary btn-sm w-100">تصفية</button>
</div>
</div>
</form>
<?php if ($teachers === []): ?>
<div class="empty-state text-center p-4">
<div class="empty-title mb-2">لا يوجد أعضاء فريق مطابقون</div>
<p class="text-muted mb-0">ابدأ من إضافة عضو أو قم بتغيير الفلاتر.</p>
</div>
<?php else: ?>
<div class="table-responsive">
<table class="table app-table align-middle table-hover">
<thead>
<tr>
<th>الاسم</th>
<th>الدور</th>
<th>التخصص</th>
<th>المواد</th>
<th>التواصل</th>
<th>الحالة</th>
<?php if (!$isCycleReadOnly): ?><th>إجراءات</th><?php endif; ?>
</tr>
</thead>
<tbody>
<?php foreach ($teachers as $teacher): ?>
<tr>
<td>
<strong><?= e((string) $teacher['full_name']) ?></strong>
<?php if (!empty($teacher['notes'])): ?><div class="text-muted small"><?= e((string) $teacher['notes']) ?></div><?php endif; ?>
</td>
<td><?= e((string) $teacher['role_title']) ?></td>
<td><?= e((string) ($teacher['specialization'] ?: '—')) ?></td>
<td>
<?php if (!empty($teacher['subject_labels'])): ?>
<div class="teacher-subject-badges">
<?php foreach ($teacher['subject_labels'] as $subjectLabel): ?>
<span class="teacher-subject-badge"><?= e((string) $subjectLabel) ?></span>
<?php endforeach; ?>
</div>
<?php else: ?>
<span class="text-muted">—</span>
<?php endif; ?>
</td>
<td>
<strong><?= e((string) ($teacher['phone'] ?: 'بدون هاتف')) ?></strong>
<div class="text-muted small"><?= e((string) ($teacher['email'] ?: 'بدون بريد')) ?></div>
</td>
<td><?= teacher_employment_status_badge((string) $teacher['employment_status']) ?></td>
<?php if (!$isCycleReadOnly): ?>
<td class="table-action-cell">
<div class="table-icon-actions">
<button
type="button"
class="btn btn-sm btn-outline-secondary icon-action"
data-bs-toggle="modal" data-bs-target="#teacherModal"
data-teacher='<?= htmlspecialchars(json_encode($teacher, JSON_UNESCAPED_UNICODE), ENT_QUOTES, 'UTF-8') ?>'
onclick="editTeacherModal(this)"
title="تعديل بيانات المعلم"
aria-label="تعديل بيانات المعلم"
>
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" aria-hidden="true"><path d="M12.854.146a.5.5 0 0 1 .707 0l2.586 2.586a.5.5 0 0 1 0 .707l-9.793 9.793a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168L12.854.146ZM11.207 2 3 10.207V13h2.793L14 4.793 11.207 2Z"/></svg>
<span class="visually-hidden">تعديل بيانات المعلم</span>
</button>
</div>
</td>
<?php endif; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php render_pagination($totalTeachers, $limit, $page, $_GET); ?>
<?php endif; ?>
</div>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
</section>
<!-- Teacher Modal -->
<div class="modal fade" id="teacherModal" tabindex="-1" aria-labelledby="teacherModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form method="post" id="teacherForm" novalidate>
<div class="modal-header">
<h5 class="modal-title" id="teacherModalLabel">إضافة عضو جديد للفريق</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
</div>
<div class="modal-body">
<input type="hidden" name="action" id="formAction" value="add">
<input type="hidden" name="teacher_id" id="formTeacherId" value="">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label" for="full_name">الاسم الكامل</label>
<input class="form-control <?= isset($errors['full_name']) ? 'is-invalid' : '' ?>" id="full_name" name="full_name" value="<?= e($values['full_name']) ?>" required>
<?php if (isset($errors['full_name'])): ?><div class="invalid-feedback"><?= e($errors['full_name']) ?></div><?php endif; ?>
</div>
<div class="col-md-6">
<label class="form-label" for="role_title">الدور الوظيفي</label>
<select class="form-select <?= isset($errors['role_title']) ? 'is-invalid' : '' ?>" id="role_title" name="role_title" required>
<option value="">اختر الدور</option>
<?php foreach (teacher_role_options() as $role): ?>
<option value="<?= e($role) ?>" <?= $values['role_title'] === $role ? 'selected' : '' ?>><?= e($role) ?></option>
<?php endforeach; ?>
</select>
<?php if (isset($errors['role_title'])): ?><div class="invalid-feedback"><?= e($errors['role_title']) ?></div><?php endif; ?>
</div>
<div class="col-md-6">
<label class="form-label" for="specialization">التخصص / المسار</label>
<input class="form-control" id="specialization" name="specialization" value="<?= e($values['specialization']) ?>" placeholder="مثال: الرياضيات، القرآن، الأنشطة">
</div>
<div class="col-md-6">
<label class="form-label" for="employment_status">الحالة</label>
<select class="form-select <?= isset($errors['employment_status']) ? 'is-invalid' : '' ?>" id="employment_status" name="employment_status">
<?php foreach (teacher_employment_status_map() as $status => $meta): ?>
<option value="<?= e($status) ?>" <?= $values['employment_status'] === $status ? 'selected' : '' ?>><?= e($meta['label']) ?></option>
<?php endforeach; ?>
</select>
<?php if (isset($errors['employment_status'])): ?><div class="invalid-feedback"><?= e($errors['employment_status']) ?></div><?php endif; ?>
</div>
<div class="col-12">
<label class="form-label d-block">المواد المسندة</label>
<?php if ($teacherSubjectMap === []): ?>
<div class="form-text text-muted">لا توجد مواد مفعّلة حالياً، لذلك لا يمكن ربط المعلم بمادة بعد.</div>
<?php else: ?>
<div class="teacher-subject-picker <?= isset($errors['subject_ids']) ? 'is-invalid' : '' ?>">
<?php foreach ($teacherSubjectMap as $subjectId => $subjectName): ?>
<label class="teacher-subject-option" for="teacher_subject_<?= e((string) $subjectId) ?>">
<input
class="form-check-input"
type="checkbox"
name="subject_ids[]"
value="<?= e((string) $subjectId) ?>"
id="teacher_subject_<?= e((string) $subjectId) ?>"
<?= in_array($subjectId, $values['subject_ids'], true) ? 'checked' : '' ?>
>
<span><?= e((string) $subjectName) ?></span>
</label>
<?php endforeach; ?>
</div>
<?php if (isset($errors['subject_ids'])): ?><div class="invalid-feedback d-block"><?= e($errors['subject_ids']) ?></div><?php endif; ?>
<div class="form-text">يمكنك ربط المعلم بأكثر من مادة داخل هذه الدورة.</div>
<?php endif; ?>
</div>
<div class="col-md-6">
<label class="form-label" for="phone">الهاتف</label>
<input class="form-control <?= isset($errors['phone']) ? 'is-invalid' : '' ?>" id="phone" name="phone" value="<?= e($values['phone']) ?>" dir="ltr" inputmode="tel">
<?php if (isset($errors['phone'])): ?><div class="invalid-feedback"><?= e($errors['phone']) ?></div><?php endif; ?>
</div>
<div class="col-md-6">
<label class="form-label" for="email">البريد الإلكتروني</label>
<input class="form-control <?= isset($errors['email']) ? 'is-invalid' : '' ?>" id="email" name="email" type="email" value="<?= e($values['email']) ?>" dir="ltr">
<?php if (isset($errors['email'])): ?><div class="invalid-feedback"><?= e($errors['email']) ?></div><?php endif; ?>
</div>
<div class="col-12">
<label class="form-label" for="notes">ملاحظات</label>
<textarea class="form-control" id="notes" name="notes" rows="2" placeholder="مثال: مسؤول عن مجموعة الصفوف العليا."><?= e($values['notes']) ?></textarea>
</div>
</div>
</div>
<div class="modal-footer d-flex justify-content-between">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">إلغاء</button>
<button type="submit" class="btn btn-primary">حفظ التغييرات</button>
</div>
</form>
</div>
</div>
</div>
<script>
function setTeacherSubjectSelection(subjectIds) {
const selected = new Set((subjectIds || []).map(String));
document.querySelectorAll('input[name="subject_ids[]"]').forEach((checkbox) => {
checkbox.checked = selected.has(checkbox.value);
});
}
function resetTeacherModal() {
document.getElementById('teacherModalLabel').innerText = 'إضافة عضو جديد للفريق';
document.getElementById('formAction').value = 'add';
document.getElementById('formTeacherId').value = '';
const form = document.getElementById('teacherForm');
form.reset();
document.getElementById('employment_status').value = 'active';
setTeacherSubjectSelection([]);
}
function editTeacherModal(btn) {
const teacher = JSON.parse(btn.getAttribute('data-teacher'));
document.getElementById('teacherModalLabel').innerText = 'تعديل عضو: ' + teacher.full_name;
document.getElementById('formAction').value = 'edit';
document.getElementById('formTeacherId').value = teacher.id;
document.getElementById('full_name').value = teacher.full_name || '';
document.getElementById('role_title').value = teacher.role_title || '';
document.getElementById('specialization').value = teacher.specialization || '';
document.getElementById('employment_status').value = teacher.employment_status || '';
document.getElementById('phone').value = teacher.phone || '';
document.getElementById('email').value = teacher.email || '';
document.getElementById('notes').value = teacher.notes || '';
setTeacherSubjectSelection(teacher.subject_ids || []);
}
// Show modal if there are errors (from POST)
<?php if (!empty($errors) && $_SERVER['REQUEST_METHOD'] === 'POST'): ?>
document.addEventListener('DOMContentLoaded', function() {
var myModal = new bootstrap.Modal(document.getElementById('teacherModal'));
myModal.show();
<?php if (isset($_POST['action']) && $_POST['action'] === 'edit'): ?>
document.getElementById('teacherModalLabel').innerText = 'تعديل عضو الفريق';
document.getElementById('formAction').value = 'edit';
document.getElementById('formTeacherId').value = '<?= e($_POST['teacher_id'] ?? '') ?>';
<?php endif; ?>
});
<?php endif; ?>
</script>
<?php render_page_end(); ?>