238 lines
18 KiB
PHP
238 lines
18 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/includes/app.php';
|
|
|
|
$flash = consume_flash();
|
|
$stats = dashboard_metrics();
|
|
$recentApplications = latest_applications(6);
|
|
$approvedCenters = array_slice(list_applications('approved'), 0, 6);
|
|
$reviewBacklog = $stats['submitted'] + $stats['under_review'];
|
|
$approvalRate = $stats['all'] > 0 ? (int) round(($stats['approved'] / $stats['all']) * 100) : 0;
|
|
$recentApproved = $approvedCenters[0] ?? null;
|
|
|
|
render_page_start('لوحة الإدارة', 'admin', 'لوحة إدارة مركزية تجمع صفحات المتابعة التشغيلية، الطلبات، والمراكز المعتمدة في نقطة دخول واحدة للمشرف العام.');
|
|
render_flash($flash);
|
|
?>
|
|
<section class="py-4 py-lg-5">
|
|
<div class="container-xxl">
|
|
|
|
<div class="row g-4 align-items-start">
|
|
<div class="col-lg-3">
|
|
<aside class="admin-sidebar sticky-top" style="top: 2rem; z-index: 10;">
|
|
<div class="sidebar-nav">
|
|
<div class="sidebar-label">الإدارة المركزية</div>
|
|
<a href="admin.php" class="sidebar-link active">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M6 1H1v14h5V1zm9 0h-5v5h5V1zm0 9h-5v5h5v-5z"/><path d="M0 1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V1zm9 0a1 1 0 0 1 1-1h5a1 1 0 0 1 1-1v5a1 1 0 0 1-1 1h-5a1 1 0 0 1-1-1V1zm0 9a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-5a1 1 0 0 1-1-1v-5z"/></svg>
|
|
لوحة الإدارة
|
|
</a>
|
|
<a href="dashboard.php" class="sidebar-link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M8 4a.5.5 0 0 1 .5.5V6a.5.5 0 0 1-1 0V4.5A.5.5 0 0 1 8 4zM3.732 5.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 10a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 10zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 9.31a.91.91 0 1 0 1.302 1.258l3.434-4.297a.389.389 0 0 0-.029-.518z"/><path fill-rule="evenodd" d="M0 10a8 8 0 1 1 15.547 2.661c-.442 1.253-1.845 1.602-2.932 1.25C11.309 13.488 9.475 13 8 13c-1.474 0-3.31.488-4.615.911-1.087.352-2.49.003-2.932-1.25A7.988 7.988 0 0 1 0 10zm8-7a7 7 0 0 0-6.603 9.329c.203.575.923.876 1.68.63C4.397 12.533 6.358 12 8 12s3.604.532 4.923.96c.757.245 1.477-.056 1.68-.631A7 7 0 0 0 8 3z"/></svg>
|
|
لوحة القيادة
|
|
</a>
|
|
<a href="applications.php" class="sidebar-link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M4.98 4a.5.5 0 0 0-.39.188L1.54 8H6a.5.5 0 0 1 .5.5 1.5 1.5 0 1 0 3 0A.5.5 0 0 1 10 8h4.46l-3.05-3.812A.5.5 0 0 0 11.02 4H4.98zm-1.17-.437A1.5 1.5 0 0 1 4.98 3h6.04a1.5 1.5 0 0 1 1.17.563l3.7 4.625a.5.5 0 0 1 .106.304l-.228 6.2a1.5 1.5 0 0 1-1.5 1.464H1.74a1.5 1.5 0 0 1-1.498-1.464l-.228-6.2a.5.5 0 0 1 .106-.304l3.7-4.625zM1 8.5v6a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5v-6h-3.415a2.5 2.5 0 0 1-4.17 0H1z"/></svg>
|
|
لوحة الطلبات
|
|
</a>
|
|
<a href="applications.php?status=approved" class="sidebar-link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M14.763.075A.5.5 0 0 1 15 .5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5V14h-1v1.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V10a.5.5 0 0 1 .342-.474L6 7.64V4.5a.5.5 0 0 1 .276-.447l8-4a.5.5 0 0 1 .487.022zM6 8.694 1 10.36V15h5V8.694zM7 15h2v-1.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 .5.5V15h2V1.309l-7 3.5V15z"/><path d="M2 11h1v1H2v-1zm2 0h1v1H4v-1zm-2 2h1v1H2v-1zm2 0h1v1H4v-1zm4-4h1v1H8V9zm2 0h1v1h-1V9zm-2 2h1v1H8v-1zm2 0h1v1h-1v-1zm2-2h1v1h-1V9zm0 2h1v1h-1v-1zM8 7h1v1H8V7zm2 0h1v1h-1V7zm2 0h1v1h-1V7zM8 5h1v1H8V5zm2 0h1v1h-1V5zm2 0h1v1h-1V5zm0-2h1v1h-1V3z"/></svg>
|
|
المراكز المعتمدة
|
|
</a>
|
|
<a href="center_application.php" class="sidebar-link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M8 6.5a.5.5 0 0 1 .5.5v1.5H10a.5.5 0 0 1 0 1H8.5V11a.5.5 0 0 1-1 0V9.5H6a.5.5 0 0 1 0-1h1.5V7a.5.5 0 0 1 .5-.5z"/><path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/></svg>
|
|
طلب فتح مركز
|
|
</a>
|
|
|
|
<div class="sidebar-label mt-3">هيكلية النظام</div>
|
|
<a href="modules.php" class="sidebar-link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.817.113A.5.5 0 0 1 16 .5v14a.5.5 0 0 1-.402.49l-5 1a.502.502 0 0 1-.196 0L5.5 15.01l-4.902.98A.5.5 0 0 1 0 15.5v-14a.5.5 0 0 1 .402-.49l5-1a.5.5 0 0 1 .196 0L10.5.99l4.902-.98a.5.5 0 0 1 .415.103zM10 1.91l-4-.8v12.98l4 .8V1.91zm1 12.98 4-.8V1.11l-4 .8v12.98zm-6-.8V1.11l-4 .8v12.98l4-.8z"/></svg>
|
|
خريطة الصفحات
|
|
</a>
|
|
|
|
<?php if (isset($recentApproved)): ?>
|
|
<div class="sidebar-label mt-3">أحدث مركز معتمد</div>
|
|
<a href="approved_school.php?id=<?= e((string) $recentApproved["id"]) ?>" class="sidebar-link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M4 16s-1 0-1-1 1-4 5-4 5 3 5 4-1 1-1 1H4Zm4-5.95a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z"/><path d="M2 1a2 2 0 0 0-2 2v9.5A1.5 1.5 0 0 0 1.5 14h.653a5.373 5.373 0 0 1 1.066-2H1V3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v9h-2.219c.554.654.89 1.373 1.066 2h.653a1.5 1.5 0 0 0 1.5-1.5V3a2 2 0 0 0-2-2H2Z"/></svg>
|
|
<?= e((string) $recentApproved["center_name"]) ?>
|
|
</a>
|
|
<?php endif; ?>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
<div class="col-lg-9">
|
|
|
|
<div class="page-banner mb-4 mb-lg-5">
|
|
<div class="row g-4 align-items-start">
|
|
<div class="col-lg-8">
|
|
<span class="eyebrow mb-3">بوابة الإدارة المركزية</span>
|
|
<h1 class="page-title mb-3">لوحة الإدارة الرئيسية</h1>
|
|
<p class="page-copy mb-3">هذه الصفحة أصبحت نقطة الدخول الواحدة لكل الصفحات الإدارية: مؤشرات عامة، مراجعة الطلبات، الوصول إلى المراكز المعتمدة، ثم الانتقال إلى الطلاب والمعلمين والتقييمات والغياب حسب المركز والدورة.</p>
|
|
<div class="hero-meta">
|
|
<span>إجمالي الطلبات <?= e((string) $stats['all']) ?></span>
|
|
<span>العمل المفتوح الآن <?= e((string) $reviewBacklog) ?></span>
|
|
<span>نسبة الاعتماد <?= e((string) $approvalRate) ?>٪</span>
|
|
</div>
|
|
<div class="cta-stack mt-4">
|
|
<a class="btn btn-dark" href="dashboard.php">لوحة القيادة</a>
|
|
<a class="btn btn-outline-secondary" href="applications.php">لوحة الطلبات</a>
|
|
<a class="btn btn-outline-secondary" href="applications.php?status=approved">المراكز المعتمدة</a>
|
|
<a class="btn btn-outline-secondary" href="modules.php">خريطة الصفحات</a>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4">
|
|
<div class="page-banner-panel h-100">
|
|
<div class="mini-stat-label">التركيز الإداري الحالي</div>
|
|
<div class="mini-stat-value"><?= e((string) $reviewBacklog) ?></div>
|
|
<div class="mini-stat-copy mb-3">طلبات تحتاج متابعة مباشرة الآن بين الاستلام والمراجعة، مع <?= e((string) $stats['approved']) ?> مركزاً معتمداً جاهزاً للتشغيل.</div>
|
|
<?php if ($recentApproved): ?>
|
|
<a class="btn btn-dark btn-sm" href="approved_school.php?id=<?= e((string) $recentApproved['id']) ?>">فتح أحدث مركز معتمد</a>
|
|
<?php else: ?>
|
|
<a class="btn btn-dark btn-sm" href="applications.php">بدء مراجعة الطلبات</a>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-md-6 col-xl-3"><div class="app-card stat-tile"><div class="mini-stat-label">إجمالي الطلبات</div><div class="mini-stat-value"><?= e((string) $stats['all']) ?></div><div class="mini-stat-copy">كل طلبات فتح المراكز المسجلة.</div></div></div>
|
|
<div class="col-md-6 col-xl-3"><div class="app-card stat-tile"><div class="mini-stat-label">بانتظار الاستلام</div><div class="mini-stat-value"><?= e((string) $stats['submitted']) ?></div><div class="mini-stat-copy">طلبات جديدة تحتاج بدء المعالجة.</div></div></div>
|
|
<div class="col-md-6 col-xl-3"><div class="app-card stat-tile"><div class="mini-stat-label">تحت المراجعة</div><div class="mini-stat-value"><?= e((string) $stats['under_review']) ?></div><div class="mini-stat-copy">ملفات نشطة داخل مسار القرار.</div></div></div>
|
|
<div class="col-md-6 col-xl-3"><div class="app-card stat-tile"><div class="mini-stat-label">معتمد</div><div class="mini-stat-value"><?= e((string) $stats['approved']) ?></div><div class="mini-stat-copy">مراكز جاهزة للإدارة التشغيلية.</div></div></div>
|
|
</div>
|
|
|
|
<div class="row g-4 mb-4 align-items-start">
|
|
<div class="col-lg-7">
|
|
<div class="app-card h-100">
|
|
<div class="section-head mb-3">
|
|
<div>
|
|
<div class="section-title">المسارات الإدارية الأساسية</div>
|
|
<div class="section-copy">كل صفحة إدارية أصبحت مرتبطة بهذه اللوحة حتى يعود المشرف العام دائماً إلى نقطة تحكم واضحة.</div>
|
|
</div>
|
|
</div>
|
|
<div class="module-list">
|
|
<article class="module-item">
|
|
<h2>لوحة القيادة التشغيلية</h2>
|
|
<p>للمؤشرات اليومية، آخر الطلبات، والحمل التشغيلي الحالي على مستوى الولاية.</p>
|
|
<a class="btn btn-outline-secondary btn-sm" href="dashboard.php">فتح لوحة القيادة</a>
|
|
</article>
|
|
<article class="module-item">
|
|
<h2>لوحة الطلبات</h2>
|
|
<p>لفرز الطلبات حسب الحالة وفتح ملف كل مركز واتخاذ القرار الإداري.</p>
|
|
<a class="btn btn-outline-secondary btn-sm" href="applications.php">فتح لوحة الطلبات</a>
|
|
</article>
|
|
<article class="module-item">
|
|
<h2>المراكز المعتمدة</h2>
|
|
<p>للوصول إلى المراكز الجاهزة للتشغيل ثم الانتقال إلى الطلاب والمعلمين والتقييمات والحضور لكل مركز.</p>
|
|
<a class="btn btn-outline-secondary btn-sm" href="applications.php?status=approved">فتح المراكز المعتمدة</a>
|
|
</article>
|
|
<article class="module-item">
|
|
<h2>هيكل النظام</h2>
|
|
<p>مرجع سريع لفهم تنظيم الصفحات الحالية ومسار التطوير الإداري داخل التطبيق.</p>
|
|
<a class="btn btn-outline-secondary btn-sm" href="modules.php">عرض خريطة الصفحات</a>
|
|
</article>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-5">
|
|
<div class="app-card h-100 sidebar-card">
|
|
<div class="section-title mb-3">كيف تستخدم لوحة الإدارة؟</div>
|
|
<div class="process-list mb-4">
|
|
<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 class="section-title mb-2">الوصول السريع</div>
|
|
<div class="quick-link-stack">
|
|
<a class="quick-link-item" href="applications.php?status=submitted"><div><strong>طلبات جديدة</strong><span>ابدأ مباشرة بالطلبات التي لم تُراجع بعد.</span></div></a>
|
|
<a class="quick-link-item" href="applications.php?status=under_review"><div><strong>طلبات تحت المراجعة</strong><span>تابع الملفات المفتوحة حالياً حتى قرار نهائي.</span></div></a>
|
|
<a class="quick-link-item" href="center_application.php"><div><strong>فتح طلب جديد</strong><span>اختبار أو إنشاء طلب جديد من نموذج التقديم.</span></div></a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row g-4 align-items-start">
|
|
<div class="col-lg-7">
|
|
<div class="app-card h-100">
|
|
<div class="section-head mb-3">
|
|
<div>
|
|
<div class="section-title">آخر الطلبات الواردة</div>
|
|
<div class="section-copy">نظرة سريعة من نفس لوحة الإدارة دون الحاجة لفتح لوحة الطلبات أولاً.</div>
|
|
</div>
|
|
<a class="btn btn-outline-secondary btn-sm" href="applications.php">فتح القائمة الكاملة</a>
|
|
</div>
|
|
<?php if ($recentApplications === []): ?>
|
|
<div class="empty-state text-center py-5">
|
|
<div class="empty-title mb-2">لا توجد طلبات بعد</div>
|
|
<p class="text-muted mb-3">يمكنك إنشاء أول طلب أو العودة لاحقاً عند وصول طلبات جديدة.</p>
|
|
<a class="btn btn-dark" href="center_application.php">إنشاء طلب جديد</a>
|
|
</div>
|
|
<?php else: ?>
|
|
<div class="table-responsive">
|
|
<table class="table app-table align-middle mb-0">
|
|
<thead>
|
|
<tr>
|
|
<th>المرجع</th>
|
|
<th>المركز</th>
|
|
<th>المدينة</th>
|
|
<th>الحالة</th>
|
|
<th>الإجراء</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($recentApplications as $application): ?>
|
|
<tr>
|
|
<td><a class="table-link" href="application_detail.php?id=<?= e((string) $application['id']) ?>">#<?= e((string) $application['id']) ?></a></td>
|
|
<td>
|
|
<div class="fw-semibold"><?= e((string) $application['center_name']) ?></div>
|
|
<div class="text-muted small"><?= e((string) $application['director_name']) ?></div>
|
|
</td>
|
|
<td><?= e((string) $application['city']) ?></td>
|
|
<td><?= status_badge((string) $application['status']) ?></td>
|
|
<td>
|
|
<?php if ((string) $application['status'] === 'approved'): ?>
|
|
<a class="btn btn-dark btn-sm px-3" href="approved_school.php?id=<?= e((string) $application['id']) ?>">صفحة المركز</a>
|
|
<?php else: ?>
|
|
<a class="btn btn-outline-secondary btn-sm px-3" href="application_detail.php?id=<?= e((string) $application['id']) ?>">فتح الملف</a>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-5">
|
|
<div class="app-card h-100 sidebar-card">
|
|
<div class="section-title mb-3">المراكز المعتمدة الجاهزة للإدارة</div>
|
|
<?php if ($approvedCenters === []): ?>
|
|
<div class="empty-state text-center py-5">
|
|
<div class="empty-title mb-2">لا توجد مراكز معتمدة بعد</div>
|
|
<p class="text-muted mb-3">بعد اعتماد أي مركز سيظهر هنا للوصول السريع إلى صفحته الإدارية.</p>
|
|
<a class="btn btn-outline-secondary" href="applications.php">العودة إلى الطلبات</a>
|
|
</div>
|
|
<?php else: ?>
|
|
<div class="quick-link-stack">
|
|
<?php foreach ($approvedCenters as $center): ?>
|
|
<a class="quick-link-item" href="approved_school.php?id=<?= e((string) $center['id']) ?>">
|
|
<div>
|
|
<strong><?= e((string) $center['center_name']) ?></strong>
|
|
<span><?= e((string) $center['city']) ?> — <?= e((string) $center['director_name']) ?> — سعة <?= e((string) $center['expected_students']) ?> طالب</span>
|
|
</div>
|
|
</a>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</section>
|
|
<?php render_page_end(); ?>
|