0 ? get_application($applicationId) : null; $isApprovedCenter = $application && (string) ($application['status'] ?? '') === 'approved'; $errors = []; $cycleContext = ['cycles' => [], 'selected' => null, 'active' => null, 'read_only' => false]; $selectedCycle = null; $selectedCycleId = 0; $isCycleReadOnly = false; $cycleLabel = 'لا توجد دورة بعد'; $values = [ 'assessment_type_id' => '', 'assessed_on' => date('Y-m-d'), 'status' => 'completed', 'assessment_max_score' => 0.0, 'has_criteria' => false, 'criteria' => [], 'criteria_scores' => [], 'score' => null, 'score_raw' => '', 'notes' => '', 'should_save' => false, ]; $buildCenterAssessmentsUrl = static function (int $targetApplicationId = 0, int $targetCycleId = 0): string { $params = []; if ($targetApplicationId > 0) { $params['id'] = $targetApplicationId; } if ($targetCycleId > 0) { $params['cycle'] = $targetCycleId; } return 'center_assessments.php' . ($params !== [] ? '?' . http_build_query($params) : ''); }; $buildCenterAssessmentCriteriaUrl = static function (int $targetApplicationId = 0, int $targetCycleId = 0, int $targetAssessmentId = 0): string { $params = []; if ($targetApplicationId > 0) { $params['id'] = $targetApplicationId; } if ($targetCycleId > 0) { $params['cycle'] = $targetCycleId; } if ($targetAssessmentId > 0) { $params['assessment_id'] = $targetAssessmentId; } return 'center_assessment_criteria.php' . ($params !== [] ? '?' . http_build_query($params) : ''); }; $buildCenterAssessmentScoreUrl = static function (int $targetApplicationId = 0, int $targetCycleId = 0, int $targetAssessmentId = 0): string { $params = []; if ($targetApplicationId > 0) { $params['id'] = $targetApplicationId; } if ($targetCycleId > 0) { $params['cycle'] = $targetCycleId; } if ($targetAssessmentId > 0) { $params['assessment_id'] = $targetAssessmentId; } return 'center_assessment_score_sheet.php' . ($params !== [] ? '?' . http_build_query($params) : ''); }; $buildCenterAssessmentReportUrl = static function (int $targetApplicationId = 0, int $targetCycleId = 0): string { $params = []; if ($targetApplicationId > 0) { $params['id'] = $targetApplicationId; } if ($targetCycleId > 0) { $params['cycle'] = $targetCycleId; } return 'center_assessment_report.php' . ($params !== [] ? '?' . http_build_query($params) : ''); }; $buildCenterAssessmentPrintUrl = static function (int $targetApplicationId = 0, int $targetCycleId = 0, int $targetAssessmentId = 0): string { $params = []; if ($targetApplicationId > 0) { $params['id'] = $targetApplicationId; } if ($targetCycleId > 0) { $params['cycle'] = $targetCycleId; } if ($targetAssessmentId > 0) { $params['assessment_id'] = $targetAssessmentId; } return 'center_assessment_print_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']; $selectedCycleId = $selectedCycle ? (int) ($selectedCycle['id'] ?? 0) : 0; $isCycleReadOnly = (bool) ($cycleContext['read_only'] ?? false); $cycleLabel = $selectedCycle ? (string) ($selectedCycle['cycle_name'] ?? $cycleLabel) : $cycleLabel; } $assessmentOptions = $isApprovedCenter && $selectedCycleId > 0 ? center_assessment_type_options_by_cycle((int) $application['id'], $selectedCycleId, false) : []; $selectedAssessmentId = $requestedAssessmentId; if ($selectedAssessmentId <= 0 && $assessmentOptions !== []) { $keys = array_keys($assessmentOptions); $selectedAssessmentId = (int) ($keys[0] ?? 0); } if ($selectedAssessmentId > 0) { $values['assessment_type_id'] = (string) $selectedAssessmentId; } if ($_SERVER['REQUEST_METHOD'] === 'POST' && $application) { if (!$isApprovedCenter) { $errors['form'] = 'لا يمكن رصد تقييم المركز قبل اعتماد المركز.'; } elseif ($selectedCycleId <= 0) { $errors['form'] = 'يرجى إنشاء دورة موسمية أولاً من صفحة المركز.'; } elseif ($isCycleReadOnly) { $errors['form'] = 'هذه الدورة مؤرشفة للقراءة فقط. اختر دورة نشطة لإدخال تقييم جديد.'; } else { [$values, $errors, $selectedAssessmentMeta] = validate_center_assessment_score_input((int) $application['id'], $selectedCycleId, $_POST); $selectedAssessmentId = (int) ($values['assessment_type_id'] ?? 0); if ($errors === []) { try { save_center_assessment_score_in_cycle((int) $application['id'], $selectedCycleId, $values); set_flash('success', 'تم حفظ رصد تقييم المركز بنجاح.'); $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'] = 'تعذر حفظ الرصد حالياً. يرجى المحاولة مرة أخرى.'; } } } } $selectedAssessment = $selectedAssessmentId > 0 ? ($assessmentOptions[$selectedAssessmentId] ?? null) : null; $criteria = $isApprovedCenter && $selectedCycleId > 0 && $selectedAssessmentId > 0 ? list_center_assessment_criteria_by_assessment((int) $application['id'], $selectedCycleId, $selectedAssessmentId, true) : []; $hasCriteria = $criteria !== []; if ($_SERVER['REQUEST_METHOD'] !== 'POST') { $values['has_criteria'] = $hasCriteria; $values['criteria'] = $criteria; if ($hasCriteria) { $values['assessment_max_score'] = round(array_reduce($criteria, static function (float $carry, array $criterion): float { return $carry + (float) ($criterion['max_score'] ?? 0); }, 0.0), 2); } elseif ($selectedAssessment) { $values['assessment_max_score'] = (float) ($selectedAssessment['max_score'] ?? 0); } } $existingBundle = $isApprovedCenter && $selectedCycleId > 0 && $selectedAssessmentId > 0 ? center_assessment_score_bundle_by_assessment((int) $application['id'], $selectedCycleId, $selectedAssessmentId) : ['score' => null, 'criteria_scores' => []]; $existingScore = $existingBundle['score'] ?? null; $existingCriteriaScores = $existingBundle['criteria_scores'] ?? []; if ($_SERVER['REQUEST_METHOD'] !== 'POST' && is_array($existingScore) && $existingScore !== []) { if (!empty($existingScore['assessed_on'])) { $values['assessed_on'] = (string) $existingScore['assessed_on']; } $values['status'] = center_assessment_normalize_status((string) ($existingScore['status'] ?? 'completed')); $values['notes'] = (string) ($existingScore['notes'] ?? ''); if ($hasCriteria) { foreach ($criteria as $criterion) { $criterionId = (int) ($criterion['id'] ?? 0); if ($criterionId <= 0) { continue; } $existingCriterion = $existingCriteriaScores[$criterionId] ?? []; $values['criteria_scores'][$criterionId] = [ 'criterion_id' => $criterionId, 'score' => isset($existingCriterion['score']) ? (float) $existingCriterion['score'] : null, 'score_raw' => isset($existingCriterion['score']) && $existingCriterion['score'] !== null ? center_score_display((float) $existingCriterion['score']) : '', 'max_score' => (float) ($criterion['max_score'] ?? 0), ]; } } else { $values['score'] = isset($existingScore['score']) ? (float) $existingScore['score'] : null; $values['score_raw'] = isset($existingScore['score']) && $existingScore['score'] !== null ? center_score_display((float) $existingScore['score']) : ''; } } $criteriaMetrics = $isApprovedCenter && $selectedCycleId > 0 && $selectedAssessmentId > 0 ? center_assessment_criteria_metrics((int) $application['id'], $selectedCycleId, $selectedAssessmentId) : ['total' => 0, 'active' => 0, 'active_max_score' => 0.0]; $scoreMetrics = $isApprovedCenter && $selectedCycleId > 0 && $selectedAssessmentId > 0 ? center_assessment_score_metrics_by_cycle((int) $application['id'], $selectedCycleId, $selectedAssessmentId) : ['total' => 0, 'completed' => 0, 'pending' => 0, 'waived' => 0, 'average_score' => 0.0, 'latest_date' => '']; $pageTitle = $application && $isApprovedCenter ? 'رصد تقييم المركز: ' . (string) ($application['center_name'] ?? '') . ($selectedAssessment ? ' — ' . (string) ($selectedAssessment['title'] ?? '') : '') : 'رصد تقييم المركز'; $pageDescription = 'إدخال درجة تقييم المركز نفسه داخل الدورة المختارة، مع دعم البنود التفصيلية والتقرير النهائي.'; if (!$application && $applicationId > 0) { http_response_code(404); } $assessmentsUrl = $application ? $buildCenterAssessmentsUrl((int) $application['id'], $selectedCycleId) : 'center_assessments.php'; $criteriaUrl = $application && $selectedAssessmentId > 0 ? $buildCenterAssessmentCriteriaUrl((int) $application['id'], $selectedCycleId, $selectedAssessmentId) : 'center_assessment_criteria.php'; $reportUrl = $application ? $buildCenterAssessmentReportUrl((int) $application['id'], $selectedCycleId) : 'center_assessment_report.php'; $maxScoreLabel = center_score_display((float) ($values['assessment_max_score'] ?? 0)); $existingStatus = is_array($existingScore) ? center_assessment_normalize_status((string) ($existingScore['status'] ?? 'pending')) : ''; $existingPercentage = (is_array($existingScore) && isset($existingScore['score']) && $existingScore['score'] !== null && (float) ($existingScore['max_score'] ?? 0) > 0) ? round(((float) $existingScore['score'] / (float) $existingScore['max_score']) * 100, 2) : null; render_page_start($pageTitle, 'approved', $pageDescription, (string) ($application['favicon'] ?? '')); render_flash($flash); ?>
المركز غير موجود

تحقق من الرابط أو ارجع إلى قائمة المراكز المعتمدة.

المراكز المعتمدة
الرصد يُفتح بعد الاعتماد

اعتمد المركز أولاً حتى يظهر رصد تقييمه الإشرافي.

ملف الاعتماد
رصد المركز

إدخال تقييم إشرافي للمركز

اختر التقييم، ثم أدخل النتيجة مباشرة أو عبر البنود التفصيلية داخل دورة .

تقييمات متاحة
لا توجد دورة متاحة لهذا المركز بعد. أنشئ دورة أولاً من صفحة المركز.
لا توجد تقييمات مراكز جاهزة للرصد

أضف نوع تقييم أولاً من صفحة تقييم المراكز ثم ارجع هنا لإدخال الدرجة.

إضافة تقييم
الدرجة النهائية
المجموع المعتمد
البنود النشطة
من أصل
حالة الرصد
غير مرصود' ?>
آخر حفظ
آخر نسبة
للتقييم الحالي
هذه الدورة مؤرشفة، لذلك الصفحة معروضة للقراءة فقط.
>
الوزن ٪
البند الدرجة القصوى الدرجة المرصودة
>
المجموع الحالي
المجموع الكلي
نسبة الإنجاز 0) ? center_score_display(((float) $values['score_raw'] / (float) $values['assessment_max_score']) * 100) . '%' : '—') ?>
>
آخر حفظ: بتاريخ %
يمكنك تعديل نفس التقييم لاحقاً، وسيتم تحديث الدرجة والبنود الحالية بدلاً من إنشاء نسخة جديدة.