Implement verified curriculum, video review, watch sessions, ledger safeguards, and remove demo data

This commit is contained in:
Hamza-Ayed
2026-09-09 17:04:08 +03:00
parent 0dc5df7b5e
commit 5af684a892
49 changed files with 1809 additions and 3005 deletions
+15 -15
View File
@@ -418,15 +418,15 @@ class TeacherPortal
<div class="stats-grid">
<div class="stat-card">
<span class="stat-label">الكورسات المنشورة</span>
<span class="stat-val val-cyan" id="stat_courses_count"><?= max(1, $coursesCount) ?></span>
<span class="stat-val val-cyan" id="stat_courses_count"><?= (int)$coursesCount ?></span>
</div>
<div class="stat-card">
<span class="stat-label">الطلاب المتفاعلون</span>
<span class="stat-val val-purple" id="stat_students_count"><?= max(1, $studentsCount) ?></span>
<span class="stat-val val-purple" id="stat_students_count"><?= (int)$studentsCount ?></span>
</div>
<div class="stat-card gold-glow">
<span class="stat-label">متوسط إتقان الطلاب</span>
<span class="stat-val val-gold" id="stat_mastery_avg">94.6%</span>
<span class="stat-val val-gold" id="stat_mastery_avg">غير متاح</span>
</div>
</div>
</div>
@@ -494,25 +494,25 @@ class TeacherPortal
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; margin-bottom: 24px;">
<div style="background: rgba(11,19,43,0.8); border: 1px solid var(--border); border-radius: 16px; padding: 18px;">
<span style="font-size: 11px; color: var(--text-muted); display: block; margin-bottom: 4px;">مؤشر الجدارة الكلي المركب</span>
<span style="font-size: 24px; font-weight: 900; color: var(--accent-gold);" id="rep_merit_score">96.8%</span>
<span style="font-size: 11px; color: var(--accent-cyan); display: block; margin-top: 4px;" id="rep_tier_badge">معلم نخبوي معتمد 💎</span>
<span style="font-size: 24px; font-weight: 900; color: var(--accent-gold);" id="rep_merit_score">غير متاح</span>
<span style="font-size: 11px; color: var(--accent-cyan); display: block; margin-top: 4px;" id="rep_tier_badge">قيد بناء سجل التقييم</span>
</div>
<div style="background: rgba(11,19,43,0.8); border: 1px solid var(--border); border-radius: 16px; padding: 18px;">
<span style="font-size: 11px; color: var(--text-muted); display: block; margin-bottom: 4px;">سرعة الاستجابة (Workerman SLA)</span>
<span style="font-size: 24px; font-weight: 900; color: #34D399;" id="rep_response_speed">3 دقائق ⚡</span>
<span style="font-size: 11px; color: var(--text-muted); display: block; margin-top: 4px;" id="rep_response_rate">نسبة التجاوب: 99.2%</span>
<span style="font-size: 24px; font-weight: 900; color: #34D399;" id="rep_response_speed">غير متاح</span>
<span style="font-size: 11px; color: var(--text-muted); display: block; margin-top: 4px;" id="rep_response_rate">نسبة التجاوب: غير متاحة</span>
</div>
<div style="background: rgba(11,19,43,0.8); border: 1px solid var(--border); border-radius: 16px; padding: 18px;">
<span style="font-size: 11px; color: var(--text-muted); display: block; margin-bottom: 4px;">تقييم الطلاب المعاير والموزون</span>
<span style="font-size: 24px; font-weight: 900; color: #A78BFA;" id="rep_weighted_rating">★ 4.90 / 5.0</span>
<span style="font-size: 24px; font-weight: 900; color: #A78BFA;" id="rep_weighted_rating">لا توجد تقييمات موثقة</span>
<span style="font-size: 11px; color: var(--text-muted); display: block; margin-top: 4px;" id="rep_reviews_count">بناءً على التقييمات الموثقة</span>
</div>
<div style="background: rgba(11,19,43,0.8); border: 1px solid var(--border); border-radius: 16px; padding: 18px;">
<span style="font-size: 11px; color: var(--text-muted); display: block; margin-bottom: 4px;">معدل رفع إتقان الطلاب (Mastery)</span>
<span style="font-size: 24px; font-weight: 900; color: var(--accent-cyan);" id="rep_mastery_gain">+94.6%</span>
<span style="font-size: 24px; font-weight: 900; color: var(--accent-cyan);" id="rep_mastery_gain">غير متاح</span>
<span style="font-size: 11px; color: var(--text-muted); display: block; margin-top: 4px;">في الكويزات السقراطية والامتحانات</span>
</div>
</div>
@@ -1517,13 +1517,13 @@ class TeacherPortal
const data = await res.json();
if (res.ok && data.status === 'success' && data.data) {
const m = data.data;
document.getElementById('rep_merit_score').textContent = `${parseFloat(m.composite_merit_score || 96.8).toFixed(1)}%`;
document.getElementById('rep_tier_badge').textContent = m.reputation_tier || 'معلم نخبوي معتمد 💎';
document.getElementById('rep_response_speed').textContent = `${parseInt(m.avg_response_minutes || 3)} دقائق ⚡`;
document.getElementById('rep_response_rate').textContent = `نسبة التجاوب: ${parseFloat(m.response_rate_percentage || 99.2).toFixed(1)}%`;
document.getElementById('rep_weighted_rating').textContent = `★ ${parseFloat(m.star_equivalent || 4.9).toFixed(2)} / 5.0`;
document.getElementById('rep_merit_score').textContent = m.composite_merit_score == null ? 'غير متاح' : `${parseFloat(m.composite_merit_score).toFixed(1)}%`;
document.getElementById('rep_tier_badge').textContent = m.reputation_tier || 'قيد بناء سجل التقييم';
document.getElementById('rep_response_speed').textContent = m.avg_response_minutes == null ? 'غير متاح' : `${parseInt(m.avg_response_minutes)} دقائق ⚡`;
document.getElementById('rep_response_rate').textContent = m.response_rate_percentage == null ? 'نسبة التجاوب: غير متاحة' : `نسبة التجاوب: ${parseFloat(m.response_rate_percentage).toFixed(1)}%`;
document.getElementById('rep_weighted_rating').textContent = m.star_equivalent == null ? 'لا توجد تقييمات موثقة' : `★ ${parseFloat(m.star_equivalent).toFixed(2)} / 5.0`;
document.getElementById('rep_reviews_count').textContent = `بناءً على ${m.total_reviews_count || 0} تقييم موثق`;
document.getElementById('rep_mastery_gain').textContent = `+${parseFloat(m.mastery_impact_score || 94.6).toFixed(1)}%`;
document.getElementById('rep_mastery_gain').textContent = m.mastery_impact_score == null ? 'غير متاح' : `+${parseFloat(m.mastery_impact_score).toFixed(1)}%`;
}
} catch (e) {
console.error('Load rep data notice:', e);