diff --git a/admin.php b/admin.php index 816406b..e62a8a2 100644 --- a/admin.php +++ b/admin.php @@ -92,6 +92,11 @@ render_flash($flash);

إعداد تقييمات إشرافية للمراكز المعتمدة داخل كل دورة موسمية، تمهيداً لإضافة البنود والرصد بنفس نمط الطلاب.

فتح تقييم المراكز +
+

قوالب تقييم المراكز

+

إنشاء القوالب العامة وبنودها مركزياً حتى يستخدمها المشرف العام أو المقيمون المكلّفون عند تقييم المراكز واحداً تلو الآخر.

+ فتح قوالب التقييم +

هيكل النظام

مرجع سريع لفهم تنظيم الصفحات الحالية ومسار التطوير الإداري داخل التطبيق.

@@ -113,6 +118,7 @@ render_flash($flash);
طلبات جديدةابدأ مباشرة بالطلبات التي لم تُراجع بعد.
طلبات تحت المراجعةتابع الملفات المفتوحة حالياً حتى قرار نهائي.
تقييم المراكزابدأ بإعداد تقييمات إشرافية للمراكز المعتمدة حسب الدورة.
+
قوالب تقييم المراكزأنشئ التقييم العام وبنوده قبل بدء تقييم المراكز ميدانياً.
فتح طلب جديداختبار أو إنشاء طلب جديد من نموذج التقديم.
diff --git a/center_assessment_report.php b/center_assessment_report.php index 53e1ac3..96a0bd6 100644 --- a/center_assessment_report.php +++ b/center_assessment_report.php @@ -56,6 +56,12 @@ $buildCenterAssessmentScoreUrl = static function (int $targetApplicationId = 0, return 'center_assessment_score_sheet.php' . ($params !== [] ? '?' . http_build_query($params) : ''); }; +if ($applicationId <= 0 || $requestedCycleId <= 0) { + set_flash('error', 'اختر المركز والدورة أولاً ثم افتح تقرير التقييم من شاشة تقييم المراكز.'); + header('Location: ' . $buildCenterAssessmentsUrl($applicationId, $requestedCycleId)); + exit; +} + if ($isApprovedCenter) { $cycleContext = resolve_school_cycle_context((int) $application['id'], $application, $requestedCycleId); $selectedCycle = $cycleContext['selected']; @@ -86,7 +92,7 @@ $pageTitle = $application && $isApprovedCenter : 'تقرير تقييم المراكز'; $pageDescription = 'ملخص مجمع لنتائج تقييم المركز داخل الدورة المختارة، مع حالة كل تقييم ونسبة الإنجاز الكلية.'; -if (!$application) { +if (!$application && $applicationId > 0) { http_response_code(404); } diff --git a/center_assessment_score_sheet.php b/center_assessment_score_sheet.php index 5c9d9a4..08da428 100644 --- a/center_assessment_score_sheet.php +++ b/center_assessment_score_sheet.php @@ -87,6 +87,12 @@ $buildCenterAssessmentReportUrl = static function (int $targetApplicationId = 0, return 'center_assessment_report.php' . ($params !== [] ? '?' . http_build_query($params) : ''); }; +if ($applicationId <= 0 || $requestedCycleId <= 0) { + set_flash('error', 'اختر المركز والدورة أولاً ثم افتح صفحة رصد التقييم من شاشة تقييم المراكز.'); + header('Location: ' . $buildCenterAssessmentsUrl($applicationId, $requestedCycleId)); + exit; +} + if ($isApprovedCenter) { $cycleContext = resolve_school_cycle_context((int) $application['id'], $application, $requestedCycleId); $selectedCycle = $cycleContext['selected']; @@ -121,7 +127,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $application) { try { save_center_assessment_score_in_cycle((int) $application['id'], $selectedCycleId, $values); set_flash('success', 'تم حفظ رصد تقييم المركز بنجاح.'); - header('Location: ' . $buildCenterAssessmentScoreUrl((int) $application['id'], $selectedCycleId, $selectedAssessmentId)); + $returnUrl = filter_input(INPUT_GET, 'return_url', FILTER_SANITIZE_URL); header('Location: ' . ($returnUrl ?: $buildCenterAssessmentScoreUrl((int) $application['id'], $selectedCycleId, $selectedAssessmentId))); exit; } catch (Throwable $exception) { $errors['form'] = 'تعذر حفظ الرصد حالياً. يرجى المحاولة مرة أخرى.'; @@ -196,7 +202,7 @@ $pageTitle = $application && $isApprovedCenter : 'رصد تقييم المركز'; $pageDescription = 'إدخال درجة تقييم المركز نفسه داخل الدورة المختارة، مع دعم البنود التفصيلية والتقرير النهائي.'; -if (!$application) { +if (!$application && $applicationId > 0) { http_response_code(404); } @@ -248,6 +254,9 @@ render_flash($flash);
تنقّل سريع
+ + العودة للقائمة + كل التقييمات تقرير الدورة @@ -274,6 +283,7 @@ render_flash($flash);
+
+ +
+ + +
+
+ +
+ +
+ + +
+
الدرجة النهائية
المجموع المعتمد
+
البنود النشطة
من أصل
+
حالة الرصد
غير مرصود' ?>
آخر حفظ
+
آخر نسبة
للتقييم الحالي
+
+ + + +
+ + +
هذه الدورة مؤرشفة، لذلك الصفحة معروضة للقراءة فقط.
+ + + +
+
+ +
+
+ + > +
+
+
+ + +
+
+
+ الوزن + ٪ +
+
+
+ + +
+ + + +
+ + + + + + + + + + + + + + + + + + +
البندالدرجة القصوىالدرجة المرصودة
+
+
+
+ + > +
+
+
+
المجموع الحالي
+
المجموع الكلي
+
نسبة الإنجاز 0) ? center_score_display(((float) $values['score_raw'] / (float) $values['assessment_max_score']) * 100) . '%' : '—') ?>
+
+ +
+ + > +
+
+ + +
+ + +
+ + +
+ آخر حفظ: + + بتاريخ + % +
+ + + +
+
يمكنك تعديل نفس التقييم لاحقاً، وسيتم تحديث الدرجة والبنود الحالية بدلاً من إنشاء نسخة جديدة.
+ +
+ +
+
+ + + +
+
+ + + + + + 0) { + if ($action === 'import_global') { + $globalId = filter_input(INPUT_POST, 'global_assessment_id', FILTER_VALIDATE_INT) ?: 0; + if ($globalId > 0) { + import_global_center_assessment_to_center($globalId, (int) $application['id'], $selectedCycleId); + set_flash('success', 'تم إدراج القالب العام مع بنوده بنجاح.'); + } else { + set_flash('error', 'يجب اختيار قالب صحيح.'); + } + } elseif ($action === 'edit' && $assessmentId > 0) { update_center_assessment_type_in_cycle((int) $application['id'], $selectedCycleId, $assessmentId, $values); set_flash('success', 'تم تحديث تقييم المركز بنجاح.'); } else { @@ -192,7 +200,8 @@ render_flash($flash);
أنواع تقييم مركزية معرفة حالياً للمركز/الدورة المحددين.
0 && !$isCycleReadOnly): ?> - + + اختر مركزاً معتمداً @@ -402,7 +411,44 @@ render_flash($flash); 0): ?> -