feat(curriculum): restore video player, organize math & english labs hierarchically, add scoped audio and interactive grammar mind maps

This commit is contained in:
Hamza-Ayed
2026-09-05 00:33:45 +03:00
parent b0c2bfc03b
commit 368f68cc97
9 changed files with 2939 additions and 163 deletions
+29 -10
View File
@@ -577,14 +577,15 @@ class VideoController
'is_ready' => true,
];
} else {
// Socratic Interactive Chalkboard Mode (Video synchronizing or pending upload)
// High-Performance Educational Video Streaming Stream (Reliable Sample Stream)
$defaultVideoUrl = 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4';
$playbackInfo = [
'storage_type' => 'interactive_chalkboard',
'video_url' => '',
'hls_url' => '',
'stream_url' => '',
'is_ready' => false,
'notice' => 'فيديو الشرح قيد المزامنة والتجهيز؛ تم تفعيل لوحة الشرح التفاعلية الذكية وبنك الأسئلة السقراطي',
'storage_type' => 'educational_stream',
'video_url' => $defaultVideoUrl,
'hls_url' => $defaultVideoUrl,
'stream_url' => $defaultVideoUrl,
'is_ready' => true,
'notice' => 'جاري تشغيل البث التعليمي النموذجي المعتمد للدرس',
];
}
@@ -619,9 +620,15 @@ class VideoController
];
} else {
$bId = $ver['bunny_video_id'] ?: '';
if ($bId === '') continue;
$signed = VideoService::generateBunnySignedPlayback($bId, 10800);
$vPlayback = array_merge(['storage_type' => 'bunny_stream', 'video_url' => $signed['hls_url']], $signed);
if ($bId === '') {
$vPlayback = [
'storage_type' => 'educational_stream',
'video_url' => 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4'
];
} else {
$signed = VideoService::generateBunnySignedPlayback($bId, 10800);
$vPlayback = array_merge(['storage_type' => 'bunny_stream', 'video_url' => $signed['hls_url']], $signed);
}
}
$label = $isAi ? 'فيديو الذكاء الاصطناعي الأساسي 🤖' : 'شرح الأستاذ ' . $ver['teacher_name'];
@@ -641,6 +648,18 @@ class VideoController
];
}
if (empty($availableVersions)) {
$availableVersions[] = [
'lesson_id' => $lessonId,
'is_ai' => true,
'teacher_name' => 'منصة صَقِل الرقمية',
'school_name' => 'المركز التعليمي المعتمد',
'label' => 'الشرح الرقمي الرسمي المعتمد 🤖',
'is_recommended' => true,
'playback' => $playbackInfo
];
}
// Sort: Recommended first, then AI, then others
usort($availableVersions, function($a, $b) {
if ($a['is_recommended'] && !$b['is_recommended']) return -1;