249 lines
16 KiB
PHP
249 lines
16 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/includes/app.php';
|
|
|
|
$flash = consume_flash();
|
|
$values = application_defaults();
|
|
$errors = [];
|
|
$stats = dashboard_metrics();
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
[$values, $errors] = validate_application_input($_POST);
|
|
|
|
if ($errors === []) {
|
|
try {
|
|
$applicationId = create_application($values);
|
|
set_flash('success', 'تم إرسال طلب فتح المركز بنجاح وهو الآن ظاهر في لوحة المشرف العام.');
|
|
header('Location: application_detail.php?id=' . urlencode((string) $applicationId));
|
|
exit;
|
|
} catch (Throwable $exception) {
|
|
$errors['form'] = 'تعذر حفظ الطلب حالياً. يرجى المحاولة مرة أخرى.';
|
|
}
|
|
}
|
|
}
|
|
|
|
render_page_start('طلب فتح مركز', 'apply', 'بوابة تقديم طلبات فتح المراكز الصيفية مع التحقق من بيانات التشغيل الأساسية.');
|
|
render_flash($flash);
|
|
?>
|
|
<section class="py-4 py-lg-5">
|
|
<div class="container-xxl">
|
|
|
|
<div class="row align-items-center mb-4 bg-white rounded-4 shadow-sm overflow-hidden" style="border: 1px solid var(--border-color);">
|
|
<div class="col-lg-8 p-4 p-lg-5">
|
|
<span class="badge bg-primary bg-opacity-10 text-primary mb-3 px-3 py-2 rounded-pill border border-primary border-opacity-25">نموذج التسجيل</span>
|
|
<h1 class="h3 fw-bold mb-3 text-primary">طلب فتح مركز صيفي</h1>
|
|
<p class="text-muted mb-0" style="line-height: 1.8; font-size: 0.95rem;">
|
|
هذه الصفحة مخصصة بالكامل لبيانات طلب المركز: تعريف الجهة، المسؤول المباشر، الطاقة التشغيلية، وملاحظات التنفيذ قبل انتقال الملف إلى لوحة المراجعة.
|
|
</p>
|
|
</div>
|
|
<div class="col-lg-4 p-4 p-lg-5 bg-light border-start d-flex flex-column justify-content-center h-100">
|
|
<div class="text-muted small fw-bold mb-2">حالة سير الطلبات الحالية</div>
|
|
<div class="fs-2 fw-bold text-dark mb-1"><?= e((string) $stats['all']) ?></div>
|
|
<div class="text-secondary small" style="line-height: 1.6;">إجمالي الطلبات المسجلة، منها <span class="fw-bold text-warning"><?= e((string) $stats['submitted']) ?></span> بانتظار الاستلام و<span class="fw-bold text-info"><?= e((string) $stats['under_review']) ?></span> تحت المراجعة.</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row g-4 align-items-start">
|
|
<div class="col-lg-8">
|
|
<div class="app-card form-card shadow-sm border-0">
|
|
<div class="section-head mb-4">
|
|
<div>
|
|
<div class="section-title">بيانات الطلب الأساسية</div>
|
|
<div class="section-copy">قسّمنا النموذج إلى مجموعات واضحة حتى لا تختلط بيانات المركز مع بيانات التشغيل والتواصل.</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<?php if (!empty($errors['form'])): ?>
|
|
<div class="alert alert-danger mb-4"><?= e($errors['form']) ?></div>
|
|
<?php endif; ?>
|
|
|
|
<form method="post" novalidate>
|
|
<div class="form-section-block mb-4">
|
|
<div class="form-section-heading">
|
|
<div>
|
|
<h2 class="form-section-title">تعريف المركز</h2>
|
|
<p class="form-section-copy">معلومات الهوية الرسمية للمركز ومكان تشغيله والفئة التي سيخدمها.</p>
|
|
</div>
|
|
</div>
|
|
<div class="row g-3">
|
|
<div class="col-md-8">
|
|
<label class="form-label" for="center_name">اسم المركز</label>
|
|
<input class="form-control <?= isset($errors['center_name']) ? 'is-invalid' : '' ?>" id="center_name" name="center_name" value="<?= e($values['center_name']) ?>" placeholder="مثال: مركز الريادة الصيفي">
|
|
<?php if (isset($errors['center_name'])): ?><div class="invalid-feedback"><?= e($errors['center_name']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<label class="form-label" for="city">المدينة / المنطقة</label>
|
|
<input class="form-control <?= isset($errors['city']) ? 'is-invalid' : '' ?>" id="city" name="city" value="<?= e($values['city']) ?>" placeholder="العاصمة">
|
|
<?php if (isset($errors['city'])): ?><div class="invalid-feedback"><?= e($errors['city']) ?></div><?php endif; ?>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<label class="form-label" for="center_type">نوع المركز</label>
|
|
<select class="form-select <?= isset($errors['center_type']) ? 'is-invalid' : '' ?>" id="center_type" name="center_type">
|
|
<option value="">اختر</option>
|
|
<?php foreach (['بنين', 'بنات', 'مختلط'] as $option): ?>
|
|
<option value="<?= e($option) ?>" <?= $values['center_type'] === $option ? 'selected' : '' ?>><?= e($option) ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
<?php if (isset($errors['center_type'])): ?><div class="invalid-feedback"><?= e($errors['center_type']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label" for="gender_scope">الفئة المستهدفة</label>
|
|
<select class="form-select <?= isset($errors['gender_scope']) ? 'is-invalid' : '' ?>" id="gender_scope" name="gender_scope">
|
|
<option value="">اختر</option>
|
|
<?php foreach (['طلاب', 'طالبات', 'طلاب وطالبات'] as $option): ?>
|
|
<option value="<?= e($option) ?>" <?= $values['gender_scope'] === $option ? 'selected' : '' ?>><?= e($option) ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
<?php if (isset($errors['gender_scope'])): ?><div class="invalid-feedback"><?= e($errors['gender_scope']) ?></div><?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-section-block mb-4">
|
|
<div class="form-section-heading">
|
|
<div>
|
|
<h2 class="form-section-title">بيانات المسؤول والتواصل</h2>
|
|
<p class="form-section-copy">تُستخدم هذه البيانات للتواصل السريع أثناء التحقق واستكمال الملاحظات.</p>
|
|
</div>
|
|
</div>
|
|
<div class="row g-3">
|
|
<div class="col-md-6">
|
|
<label class="form-label" for="director_name">اسم مدير / مديرة المركز</label>
|
|
<input class="form-control <?= isset($errors['director_name']) ? 'is-invalid' : '' ?>" id="director_name" name="director_name" value="<?= e($values['director_name']) ?>" placeholder="الاسم الرباعي">
|
|
<?php if (isset($errors['director_name'])): ?><div class="invalid-feedback"><?= e($errors['director_name']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label class="form-label" for="phone">رقم الهاتف</label>
|
|
<input class="form-control <?= isset($errors['phone']) ? 'is-invalid' : '' ?>" id="phone" name="phone" value="<?= e($values['phone']) ?>" placeholder="0500000000">
|
|
<?php if (isset($errors['phone'])): ?><div class="invalid-feedback"><?= e($errors['phone']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label class="form-label" for="email">البريد الإلكتروني</label>
|
|
<input type="email" class="form-control <?= isset($errors['email']) ? 'is-invalid' : '' ?>" id="email" name="email" value="<?= e($values['email']) ?>" placeholder="name@example.com">
|
|
<?php if (isset($errors['email'])): ?><div class="invalid-feedback"><?= e($errors['email']) ?></div><?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-section-block mb-4">
|
|
<div class="form-section-heading">
|
|
<div>
|
|
<h2 class="form-section-title">التشغيل والجدول الزمني</h2>
|
|
<p class="form-section-copy">قدّم تقديراً للطاقة الاستيعابية والفترة الزمنية واحتياجات التنفيذ المباشرة.</p>
|
|
</div>
|
|
</div>
|
|
<div class="row g-3">
|
|
<div class="col-md-4">
|
|
<label class="form-label" for="expected_students">الطاقة الاستيعابية المتوقعة</label>
|
|
<input type="number" min="10" max="2000" class="form-control <?= isset($errors['expected_students']) ? 'is-invalid' : '' ?>" id="expected_students" name="expected_students" value="<?= e($values['expected_students']) ?>" placeholder="150">
|
|
<?php if (isset($errors['expected_students'])): ?><div class="invalid-feedback"><?= e($errors['expected_students']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-8">
|
|
<label class="form-label" for="global_cycle_id">الدورة المطلوبة</label>
|
|
<select class="form-select <?= isset($errors['global_cycle_id']) ? 'is-invalid' : '' ?>" id="global_cycle_id" name="global_cycle_id">
|
|
<option value="">اختر الدورة...</option>
|
|
<?php foreach (get_active_global_cycles() as $cycle): ?>
|
|
<option value="<?= e((string)$cycle['id']) ?>" <?= ((string)($values['global_cycle_id'] ?? '')) === ((string)$cycle['id']) ? 'selected' : '' ?>>
|
|
<?= e((string)$cycle['cycle_name']) ?> (<?= e((string)$cycle['start_date']) ?> - <?= e((string)$cycle['end_date']) ?>)
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
<?php if (isset($errors['global_cycle_id'])): ?><div class="invalid-feedback"><?= e($errors['global_cycle_id']) ?></div><?php endif; ?>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<label class="form-label" for="notes">ملخص البرنامج والاحتياجات</label>
|
|
<textarea class="form-control" id="notes" name="notes" rows="5" placeholder="مثال: المسارات التعليمية، عدد القاعات، الشركاء، أو أي متطلبات تشغيلية."><?= e($values['notes']) ?></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="form-section-block mb-4">
|
|
<div class="form-section-heading">
|
|
<div>
|
|
<h2 class="form-section-title">المواد الدراسية</h2>
|
|
<p class="form-section-copy">اختر المواد الدراسية المطلوب تدريسها في هذا المركز.</p>
|
|
</div>
|
|
</div>
|
|
<div class="row g-3">
|
|
<div class="col-12">
|
|
<?php $available_subjects = get_enabled_subjects(); ?>
|
|
<?php if (empty($available_subjects)): ?>
|
|
<p class="text-muted small">لا توجد مواد دراسية مفعلة حالياً.</p>
|
|
<?php else: ?>
|
|
<div class="d-flex flex-wrap gap-3 <?= isset($errors['subjects']) ? 'is-invalid' : '' ?>">
|
|
<?php foreach ($available_subjects as $subject): ?>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" name="subjects[]" value="<?= e((string) $subject['id']) ?>" id="subject_<?= e((string) $subject['id']) ?>" <?= in_array((string) $subject['id'], array_map('strval', $values['subjects'] ?? []), true) ? 'checked' : '' ?>>
|
|
<label class="form-check-label" for="subject_<?= e((string) $subject['id']) ?>">
|
|
<?= e((string) $subject['name']) ?>
|
|
</label>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php if (isset($errors['subjects'])): ?><div class="invalid-feedback d-block"><?= e($errors['subjects']) ?></div><?php endif; ?>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-actions d-flex flex-wrap gap-2 pt-2">
|
|
<button class="btn btn-primary px-4" type="submit">إرسال الطلب</button>
|
|
<a class="btn btn-outline-secondary px-4" href="applications.php">العودة إلى لوحة الطلبات</a>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-4">
|
|
<div class="app-card sidebar-card mb-4 shadow-sm border-0">
|
|
<div class="section-title mb-3">مسار هذه الصفحة</div>
|
|
<div class="process-list">
|
|
<div class="process-item active"><span>1</span><div><strong>إدخال البيانات</strong><small>تجميع بيانات الهوية والتشغيل في صفحة واحدة.</small></div></div>
|
|
<div class="process-item"><span>2</span><div><strong>التحقق والحفظ</strong><small>الحقول الإلزامية تُراجع قبل إنشاء المرجع.</small></div></div>
|
|
<div class="process-item"><span>3</span><div><strong>الانتقال للمراجعة</strong><small>يظهر الطلب فوراً داخل لوحة المشرف العام.</small></div></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="app-card sidebar-card mb-4 shadow-sm border-0">
|
|
<div class="section-title mb-3">الحد الأدنى المطلوب</div>
|
|
<ul class="check-list mb-0">
|
|
<li>اسم المركز والمنطقة التشغيلية.</li>
|
|
<li>المسؤول المباشر ووسائل التواصل.</li>
|
|
<li>نوع المركز والفئة المستهدفة.</li>
|
|
<li>الطاقة التشغيلية ومواعيد البرنامج.</li>
|
|
<li>ملخص احتياجات التنفيذ أو الشراكات.</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="d-flex align-items-center justify-content-between mb-3 mt-4">
|
|
<h3 class="h6 mb-0 fw-bold text-dark">روابط سريعة</h3>
|
|
</div>
|
|
<div class="d-flex flex-column gap-2">
|
|
<a href="applications.php" class="text-decoration-none">
|
|
<article class="app-card link-card p-2 bg-white rounded-2 border-start border-primary border-4 shadow-sm" style="transition: transform 0.2s;">
|
|
<h4 class="small fw-bold text-dark mb-1">لوحة الطلبات</h4>
|
|
<p class="text-muted mb-0" style="font-size: 0.75rem;">متابعة جميع الطلبات بعد الإرسال.</p>
|
|
</article>
|
|
</a>
|
|
<a href="dashboard.php" class="text-decoration-none">
|
|
<article class="app-card link-card p-2 bg-white rounded-2 border-start border-warning border-4 shadow-sm" style="transition: transform 0.2s;">
|
|
<h4 class="small fw-bold text-dark mb-1">لوحة القيادة</h4>
|
|
<p class="text-muted mb-0" style="font-size: 0.75rem;">مراجعة المؤشرات العامة للولاية.</p>
|
|
</article>
|
|
</a>
|
|
<a href="modules.php" class="text-decoration-none">
|
|
<article class="app-card link-card p-2 bg-white rounded-2 border-start border-success border-4 shadow-sm" style="transition: transform 0.2s;">
|
|
<h4 class="small fw-bold text-dark mb-1">هيكل النظام</h4>
|
|
<p class="text-muted mb-0" style="font-size: 0.75rem;">فهم حدود النسخة الحالية ومسار العمل.</p>
|
|
</article>
|
|
</a>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<?php render_page_end(); ?>
|