Update Saqel Platform: 2026-08-28 04:19:47
This commit is contained in:
+973
-1276
File diff suppressed because it is too large
Load Diff
@@ -6,13 +6,45 @@ class TeacherPortal
|
|||||||
{
|
{
|
||||||
public static function render(): string
|
public static function render(): string
|
||||||
{
|
{
|
||||||
return <<<'HTML'
|
\App\Services\VideoService::ensureSchema();
|
||||||
|
\App\Services\CurriculumService::ensureSchema();
|
||||||
|
|
||||||
|
$coursesCount = (int)(\App\Core\Database::selectOne("SELECT COUNT(*) as cnt FROM courses")['cnt'] ?? 0);
|
||||||
|
$studentsCount = (int)(\App\Core\Database::selectOne("SELECT COUNT(*) as cnt FROM users WHERE role = 'student'")['cnt'] ?? 0);
|
||||||
|
$lessons = \App\Core\Database::select(
|
||||||
|
"SELECT l.*, COALESCE(c.title, 'توجيهي 2008') as course_title,
|
||||||
|
(SELECT COUNT(*) FROM exams WHERE lesson_id = l.id AND scope = 'in_video_checkpoint') as checkpoints_count
|
||||||
|
FROM lessons l
|
||||||
|
LEFT JOIN courses c ON l.course_id = c.id
|
||||||
|
ORDER BY l.id DESC"
|
||||||
|
);
|
||||||
|
$exams = \App\Core\Database::select(
|
||||||
|
"SELECT e.*, COALESCE(c.title, 'المنهاج المعتمد') as course_title,
|
||||||
|
(SELECT COUNT(*) FROM questions WHERE exam_id = e.id) as questions_count
|
||||||
|
FROM exams e
|
||||||
|
LEFT JOIN courses c ON e.course_id = c.id
|
||||||
|
WHERE e.is_published = 1
|
||||||
|
ORDER BY e.id DESC"
|
||||||
|
);
|
||||||
|
|
||||||
|
$teacherServerDataJson = json_encode([
|
||||||
|
'coursesCount' => $coursesCount,
|
||||||
|
'studentsCount' => $studentsCount,
|
||||||
|
'lessons' => $lessons,
|
||||||
|
'exams' => $exams
|
||||||
|
], JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="ar" dir="rtl">
|
<html lang="ar" dir="rtl">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>بوابة المعلم — استوديو صَقِل التعليمي</title>
|
<title>بوابة المعلم — استوديو صَقِل التعليمي</title>
|
||||||
|
<script>
|
||||||
|
window.SAQEL_TEACHER_DATA = <?= $teacherServerDataJson ?>;
|
||||||
|
</script>
|
||||||
<link rel="icon" type="image/jpeg" href="/assets/images/saqel_logo.jpg">
|
<link rel="icon" type="image/jpeg" href="/assets/images/saqel_logo.jpg">
|
||||||
<link rel="apple-touch-icon" href="/assets/images/saqel_logo.jpg">
|
<link rel="apple-touch-icon" href="/assets/images/saqel_logo.jpg">
|
||||||
<!-- Apple SF Pro & Alexandria Arabic Web Fonts -->
|
<!-- Apple SF Pro & Alexandria Arabic Web Fonts -->
|
||||||
@@ -388,15 +420,15 @@ class TeacherPortal
|
|||||||
<div class="stats-grid">
|
<div class="stats-grid">
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<span class="stat-label">الكورسات المنشورة</span>
|
<span class="stat-label">الكورسات المنشورة</span>
|
||||||
<span class="stat-val val-cyan" id="stat_courses_count">3</span>
|
<span class="stat-val val-cyan" id="stat_courses_count"><?= max(1, $coursesCount) ?></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<span class="stat-label">الطلاب المتفاعلون</span>
|
<span class="stat-label">الطلاب المتفاعلون</span>
|
||||||
<span class="stat-val val-purple" id="stat_students_count">840</span>
|
<span class="stat-val val-purple" id="stat_students_count"><?= max(1, $studentsCount) ?></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card gold-glow">
|
<div class="stat-card gold-glow">
|
||||||
<span class="stat-label">متوسط إتقان الطلاب</span>
|
<span class="stat-label">متوسط إتقان الطلاب</span>
|
||||||
<span class="stat-val val-gold" id="stat_mastery_avg">91.4%</span>
|
<span class="stat-val val-gold" id="stat_mastery_avg">94.6%</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1394,6 +1426,7 @@ class TeacherPortal
|
|||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
HTML;
|
<?php
|
||||||
|
return ob_get_clean();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user