Lehrer-Live: laufende Klima-Balken farbig (Ampel) + "Heute bereits erledigt" zeigt alle heutigen Durchgaenge

- klima game-2d/3d: GGS_LIVE_STATE liefert laufenden Punktestand (score, gleiche Formel wie Endbewertung)
- live.php summary: laufende Sessions jeder Sim bekommen Ampel-Score (nicht mehr nur Farmer) -> Tag-Ansicht faerbt laufende Balken statt grau
- teacher.html _renderInactiveToday: zeigt jetzt ALLE heute abgeschlossenen Laeufe (auch von gerade aktiven Schueler:innen); nur das laufende Spiel bleibt oben. Titel -> "Heute bereits erledigt"

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 23:19:23 +02:00
parent 8cc48b1bc6
commit 2160a99896
4 changed files with 44 additions and 8 deletions
+8 -6
View File
@@ -1378,18 +1378,20 @@ async function _renderInactiveToday(activeSet) {
if (!data || data.error || !Array.isArray(data.students)) return '';
var groups = [];
data.students.forEach(function(s){
if (activeSet && activeSet[s.studentId]) return; // gerade online → oben
var sess = (s.sessions||[]).filter(function(x){ return x.startMs; });
if (!sess.length) return; // heute nichts gespielt
if (sess.some(function(x){ return x.isLive || x.success==='running'; })) return; // läuft noch → oben
// Alle HEUTE abgeschlossenen Durchgänge (das gerade laufende Spiel steht
// oben in der Live-Liste und wird hier ausgelassen). Auch für Schüler:innen,
// die gerade online sind — ihre schon fertigen Läufe sollen sichtbar bleiben.
var sess = (s.sessions||[]).filter(function(x){ return x.startMs && !x.isLive && x.success!=='running'; });
if (!sess.length) return; // heute nichts abgeschlossen
sess.sort(function(a,b){ return (a.startMs||0)-(b.startMs||0); }); // chronologisch
var lastEnd = 0; sess.forEach(function(x){ if((x.endMs||0)>lastEnd) lastEnd = x.endMs||0; });
groups.push({ s:s, sess:sess, lastEnd:lastEnd });
});
if (!groups.length) return '';
groups.sort(function(a,b){ return b.lastEnd - a.lastEnd; }); // zuletzt aktive Person oben
var html = '<div class="card" style="margin-top:.8rem"><div class="card-h">Heute bereits aktiv · '+groups.length+'</div>';
html += '<p style="font-size:.7rem;color:#8a8a8a;margin-bottom:.5rem">Heute schon gearbeitet, gerade aber offline — alle Aktivitäten mit Uhrzeit und Leistung.</p>';
var totalRuns = groups.reduce(function(n,g){ return n + g.sess.length; }, 0);
var html = '<div class="card" style="margin-top:.8rem"><div class="card-h">Heute bereits erledigt · '+groups.length+' Schüler*innen · '+totalRuns+' Durchgänge</div>';
html += '<p style="font-size:.7rem;color:#8a8a8a;margin-bottom:.5rem">Alle heute abgeschlossenen Durchgänge (Weltküche, Klima, Farmer …) mit Uhrzeit und Leistung. Gerade laufende Spiele stehen oben.</p>';
html += '<div style="overflow-x:auto"><table style="width:100%;border-collapse:collapse;font-size:.74rem">';
html += '<thead><tr style="background:#f7f6f3;border-bottom:2px solid rgba(0,0,0,.08)">'
+ '<th style="text-align:left;padding:.4rem .5rem;white-space:nowrap">Schüler*in</th>'