update admin page

This commit is contained in:
Flatlogic Bot 2026-04-16 09:11:38 +00:00
parent f43e1b9751
commit b7b7995909
11 changed files with 222 additions and 11 deletions

188
admin.php Normal file
View File

@ -0,0 +1,188 @@
<?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="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>
</section>
<?php render_page_end(); ?>

View File

@ -79,6 +79,7 @@ render_flash($flash);
<div class="mini-stat-label">الحالة الحالية</div>
<div class="mb-3"><?= status_badge((string) $application['status']) ?></div>
<div class="mini-stat-copy">هذا الملف مخصص لاتخاذ القرار وتوثيق الملاحظات بدلاً من خلطه مع قائمة الطلبات.</div>
<a class="btn btn-outline-secondary btn-sm mt-3" href="admin.php">العودة إلى لوحة الإدارة</a>
<?php if ((string) $application['status'] === 'approved'): ?>
<a class="btn btn-dark btn-sm mt-3" href="approved_school.php?id=<?= e((string) $application['id']) ?>">فتح صفحة المركز المعتمد</a>
<?php endif; ?>
@ -95,7 +96,10 @@ render_flash($flash);
<div class="section-title">بيانات المركز</div>
<div class="section-copy">عرض منظم لجميع البيانات المرسلة من صاحب الطلب في بطاقة واحدة.</div>
</div>
<a class="btn btn-outline-secondary btn-sm px-3" href="applications.php">العودة إلى القائمة</a>
<div class="d-flex flex-wrap gap-2">
<a class="btn btn-outline-secondary btn-sm px-3" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary btn-sm px-3" href="applications.php">العودة إلى القائمة</a>
</div>
</div>
<div class="row g-3 detail-grid">
@ -176,6 +180,7 @@ render_flash($flash);
<?php if ((string) $application['status'] === 'approved'): ?>
<a class="btn btn-outline-dark" href="approved_school.php?id=<?= e((string) $application['id']) ?>">معاينة صفحة المركز</a>
<?php endif; ?>
<a class="btn btn-outline-secondary" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary" href="applications.php">العودة إلى القائمة</a>
</div>
</form>

View File

@ -47,7 +47,8 @@ render_flash($flash);
<div class="section-copy">اختر حالة محددة للتركيز على شريحة واحدة من الطلبات، أو ارجع إلى الكل لمراجعة الصورة العامة.</div>
</div>
<div class="d-flex flex-wrap gap-2">
<a class="btn btn-dark btn-sm px-3" href="center_application.php">طلب جديد</a>
<a class="btn btn-dark btn-sm px-3" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary btn-sm px-3" href="center_application.php">طلب جديد</a>
<a class="btn btn-outline-secondary btn-sm px-3" href="applications.php">إعادة ضبط</a>
</div>
</div>
@ -73,7 +74,8 @@ render_flash($flash);
<div class="empty-title mb-2">لا توجد طلبات ضمن هذا التصنيف.</div>
<p class="text-muted mb-3">يمكنك إنشاء طلب جديد أو العودة إلى جميع الطلبات لاستكمال المراجعة.</p>
<div class="d-flex flex-wrap justify-content-center gap-2">
<a class="btn btn-dark" href="center_application.php">إنشاء طلب</a>
<a class="btn btn-dark" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary" href="center_application.php">إنشاء طلب</a>
<a class="btn btn-outline-secondary" href="applications.php">عرض الكل</a>
</div>
</div>

View File

@ -155,7 +155,8 @@ render_flash($flash);
<span>مرجع الطلب #<?= e((string) $application['id']) ?></span>
</div>
<div class="cta-stack mt-4">
<a class="btn btn-dark" href="application_detail.php?id=<?= e((string) $application['id']) ?>">العودة لملف المراجعة</a>
<a class="btn btn-dark" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary" href="application_detail.php?id=<?= e((string) $application['id']) ?>">العودة لملف المراجعة</a>
<a class="btn btn-outline-secondary" href="applications.php">لوحة الطلبات</a>
</div>
</div>
@ -174,7 +175,8 @@ render_flash($flash);
<span>من <?= e((string) $application['start_date']) ?> إلى <?= e((string) $application['end_date']) ?></span>
</div>
<div class="cta-stack mt-4">
<a class="btn btn-dark" href="application_detail.php?id=<?= e((string) $application['id']) ?>">فتح ملف الاعتماد</a>
<a class="btn btn-dark" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary" href="application_detail.php?id=<?= e((string) $application['id']) ?>">فتح ملف الاعتماد</a>
<a class="btn btn-outline-secondary" href="<?= e($studentsUrl) ?>">تسجيل الطلاب</a>
<a class="btn btn-outline-secondary" href="<?= e($teachersUrl) ?>">فريق المعلمين</a>
<a class="btn btn-outline-secondary" href="<?= e($assessmentsUrl) ?>">التقييمات والأوزان</a>
@ -409,6 +411,7 @@ render_flash($flash);
<a class="quick-link-item" href="application_detail.php?id=<?= e((string) $application['id']) ?>"><strong>ملف الاعتماد</strong><span>العودة إلى سجل القرار والتقييم.</span></a>
<a class="quick-link-item" href="applications.php?status=approved"><strong>المراكز المعتمدة</strong><span>عرض بقية المراكز الجاهزة للتشغيل.</span></a>
<a class="quick-link-item" href="dashboard.php"><strong>لوحة القيادة</strong><span>الرجوع إلى المؤشرات العامة على مستوى الولاية.</span></a>
<a class="quick-link-item" href="admin.php"><strong>لوحة الإدارة</strong><span>الرجوع إلى البوابة المركزية لكل الشاشات الإدارية.</span></a>
</div>
</div>
</div>

View File

@ -131,7 +131,8 @@ render_flash($flash);
<span>إجمالي الأوزان المفعلة <?= e(number_format($activeWeight, 2, '.', '')) ?>%</span>
</div>
<div class="cta-stack mt-4">
<a class="btn btn-dark" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-dark" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-outline-secondary" href="<?= e($studentsUrl) ?>">تسجيل الطلاب</a>
<a class="btn btn-outline-secondary" href="<?= e($teachersUrl) ?>">فريق المعلمين</a>
<a class="btn btn-outline-secondary" href="<?= e($attendanceUrl) ?>">غياب الطلاب</a>

View File

@ -149,7 +149,8 @@ render_flash($flash);
<span>آخر تحديث <?= e($latestDateLabel) ?></span>
</div>
<div class="cta-stack mt-4">
<a class="btn btn-dark" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-dark" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-outline-secondary" href="<?= e($studentsUrl) ?>">تسجيل الطلاب</a>
<a class="btn btn-outline-secondary" href="<?= e($teachersUrl) ?>">فريق المعلمين</a>
<a class="btn btn-outline-secondary" href="<?= e($assessmentsUrl) ?>">التقييمات والأوزان</a>

View File

@ -18,7 +18,8 @@ render_flash($flash);
<div class="section-copy">هذه الصفحة مخصصة للمتابعة اليومية للمشرف العام: مؤشرات سريعة، آخر الطلبات، وروابط التحرك المباشر.</div>
</div>
<div class="d-flex flex-wrap gap-2">
<a class="btn btn-dark btn-sm px-3" href="applications.php?status=submitted">طلبات جديدة</a>
<a class="btn btn-dark btn-sm px-3" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary btn-sm px-3" href="applications.php?status=submitted">طلبات جديدة</a>
<a class="btn btn-outline-secondary btn-sm px-3" href="applications.php">كل الطلبات</a>
</div>
</div>
@ -98,6 +99,11 @@ render_flash($flash);
<div class="app-card h-100">
<div class="section-title mb-3">إجراءات سريعة</div>
<div class="module-list">
<article class="module-item">
<h2>لوحة الإدارة</h2>
<p class="mb-3">الرجوع إلى البوابة المركزية التي تجمع كل الصفحات الإدارية في مكان واحد.</p>
<a class="btn btn-outline-secondary btn-sm" href="admin.php">فتح اللوحة</a>
</article>
<article class="module-item">
<h2>بدء طلب جديد</h2>
<p class="mb-3">الانتقال مباشرة إلى شاشة التقديم دون المرور على تفاصيل أخرى.</p>

View File

@ -1262,6 +1262,7 @@ function render_page_start(string $pageTitle, string $active = 'home', string $p
<div class="collapse navbar-collapse justify-content-between" id="mainNav">
<ul class="navbar-nav ms-auto me-0 mb-2 mb-lg-0 gap-lg-2">
<li class="nav-item"><a class="nav-link <?= $active === 'home' ? 'active' : '' ?>" href="index.php">الرئيسية</a></li>
<li class="nav-item"><a class="nav-link <?= $active === 'admin' ? 'active' : '' ?>" href="admin.php">لوحة الإدارة</a></li>
<li class="nav-item"><a class="nav-link <?= $active === 'dashboard' ? 'active' : '' ?>" href="dashboard.php">لوحة القيادة</a></li>
<li class="nav-item"><a class="nav-link <?= $active === 'apply' ? 'active' : '' ?>" href="center_application.php">طلب فتح مركز</a></li>
<li class="nav-item"><a class="nav-link <?= $active === 'applications' ? 'active' : '' ?>" href="applications.php">لوحة الطلبات</a></li>
@ -1316,6 +1317,7 @@ function render_page_end(): void
<div class="footer-meta">© <?= e($year) ?> <?= e(project_name()) ?> — واجهة عربية RTL، Bootstrap 5، وPHP.</div>
</div>
<div class="d-flex flex-wrap gap-2">
<a class="btn btn-outline-secondary btn-sm" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary btn-sm" href="dashboard.php">لوحة القيادة</a>
<a class="btn btn-outline-secondary btn-sm" href="center_application.php">إنشاء طلب جديد</a>
<a class="btn btn-outline-secondary btn-sm" href="applications.php">استعراض جميع الطلبات</a>

View File

@ -58,7 +58,8 @@ render_flash($flash);
<div class="section-title mb-2">المرحلة التالية المقترحة</div>
<p class="text-muted mb-3">بعد هذا التنظيم، الخطوة الطبيعية التالية هي بناء وحدات الطلاب والتسجيل في المراكز المعتمدة مع نفس المبدأ: صفحة مستقلة لكل وظيفة.</p>
<div class="d-flex flex-wrap gap-2">
<a class="btn btn-dark btn-sm" href="dashboard.php">لوحة القيادة</a>
<a class="btn btn-dark btn-sm" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary btn-sm" href="dashboard.php">لوحة القيادة</a>
<a class="btn btn-outline-secondary btn-sm" href="application_detail.php?id=1">طلب نموذجي</a>
</div>
</div>

View File

@ -119,7 +119,8 @@ render_flash($flash);
<span>المقاعد المتبقية <?= e((string) $remainingSeats) ?></span>
</div>
<div class="cta-stack mt-4">
<a class="btn btn-dark" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-dark" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-outline-secondary" href="<?= e($teachersUrl) ?>">فريق المعلمين</a>
<a class="btn btn-outline-secondary" href="<?= e($assessmentsUrl) ?>">التقييمات والأوزان</a>
<a class="btn btn-outline-secondary" href="<?= e($attendanceUrl) ?>">غياب الطلاب</a>

View File

@ -118,7 +118,8 @@ render_flash($flash);
<span><?= e((string) $metrics['supervisors']) ?> أدوار إشرافية</span>
</div>
<div class="cta-stack mt-4">
<a class="btn btn-dark" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-dark" href="admin.php">لوحة الإدارة</a>
<a class="btn btn-outline-secondary" href="<?= e($approvedSchoolUrl) ?>">العودة لصفحة المركز</a>
<a class="btn btn-outline-secondary" href="<?= e($studentsUrl) ?>">تسجيل الطلاب</a>
<a class="btn btn-outline-secondary" href="<?= e($assessmentsUrl) ?>">التقييمات والأوزان</a>
<a class="btn btn-outline-secondary" href="<?= e($attendanceUrl) ?>">غياب الطلاب</a>