Lizenz-Gate: Schueler ohne Lizenz gesperrt + Lehrer-Cockpit-Warnung
Teil 1 — Schueler-Lizenz-Gate (gilt fuer alle Klassen-Schueler ohne gueltige Lizenz = zugewiesen, nicht storniert, nicht abgelaufen): - Server-Gate zentral im Front-Controller (index.php + php/lib/license_gate.php): eingeloggte Klassen-Schueler ohne Lizenz sehen bei JEDER Sim-Route statt der Simulation eine Hinweis-Seite "Deine Lehrperson muss dir noch eine gueltige Lizenz zuweisen". Schnell-Ausstieg fuer Nicht-Schueler/Nicht-Sim (kein Cookie -> keine DB-Abfrage). Autodidakt ohne Klasse: nicht lizenzpflichtig. - modules.php?student=1 liefert 'licensed'; Schueler-Cockpit (schueler.html) zeigt oben die Meldung und sperrt die Start-Buttons. Teil 2 — Lehrer-Cockpit: - Rote Warnleiste ganz oben, wenn Schueler:innen ohne gueltige Lizenz in der Klasse sind (+ Link "Jetzt zuweisen"). licenses?class_id=X liefert dazu die Liste 'unlicensed'. - Lizenzen-Lasche: neue Sektion "Ohne gueltige Lizenz" mit Einzel- und Sammel-Zuweisung (auto_assign) — sonst fuehrt die Warnung ins Leere. Kunden-Vereinfachung (Feedback): keine Auto-Erkennung/Dedup mehr (Ansprech- partner koennen wechseln). Kunde = Freitext "Name/Verlag/Schule" + Mailadresse, je Bestellung gespeichert. Editierbares Kundennummer-Feld + Autocomplete entfernt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+12
-2
@@ -230,6 +230,9 @@ async function renderModules() {
|
||||
if (modList.error) modList = [];
|
||||
} catch(e) {}
|
||||
|
||||
// Lizenz-Gate: ohne gültige Lizenz sind die Sims nicht startbar (Hinweis oben).
|
||||
var licensed = !modList.length || modList[0].licensed !== false;
|
||||
|
||||
// Lehrer-gesteuerte Auftraege zuerst — erledigte Auftraege fallen automatisch
|
||||
// in die regulaere Modul-Liste, damit der Auftrag aus dem Cockpit verschwindet,
|
||||
// das Modul aber spielbar bleibt.
|
||||
@@ -257,7 +260,7 @@ async function renderModules() {
|
||||
s += '<h3 style="color:#c25e1e">'+(m.icon||'📚')+' '+m.name+(m.forcedLevel ? ' <span style="font-weight:600;color:#9a9a9a;font-size:.82rem">· Stufe '+m.forcedLevel+'</span>' : '')+'</h3>';
|
||||
s += '<p>Auftrag von deiner Lehrperson'+(meta.length ? '<br><span style="color:#8a8a8a">'+meta.join(' · ')+'</span>' : '')+'</p>';
|
||||
s += '<div class="mod-actions">';
|
||||
s += '<a href="'+url+'" class="mod-btn primary" style="background:#e8833a;border-color:#e8833a">▶ Jetzt starten</a>';
|
||||
s += licensed ? '<a href="'+url+'" class="mod-btn primary" style="background:#e8833a;border-color:#e8833a">▶ Jetzt starten</a>' : '<span class="mod-btn primary" style="background:#c9a99a;border-color:#c9a99a;opacity:.7;pointer-events:none">🔑 Lizenz nötig</span>';
|
||||
s += '</div></div></div>';
|
||||
return s;
|
||||
}
|
||||
@@ -293,7 +296,7 @@ async function renderModules() {
|
||||
s += '<h3>'+(m.icon||'📚')+' '+m.name+'</h3>';
|
||||
s += '<p>'+(m.desc||'')+'</p>';
|
||||
s += '<div class="mod-actions">';
|
||||
if (isSpielbar) s += '<a href="'+url+'" class="mod-btn primary">▶ Starten</a>';
|
||||
if (isSpielbar) s += licensed ? '<a href="'+url+'" class="mod-btn primary">▶ Starten</a>' : '<span class="mod-btn primary" style="opacity:.5;pointer-events:none" title="Deine Lehrperson muss dir eine Lizenz zuweisen">🔑 Lizenz nötig</span>';
|
||||
s += '<a href="'+infoHref+'" class="mod-btn" title="Mehr Infos">📖 Infos</a>';
|
||||
if (!isComing) s += '<a href="'+glossarHref+'" class="mod-btn" title="Glossar zu diesem Modul">📚 Glossar</a>';
|
||||
if (buchHref) s += '<a href="'+buchHref+'" class="mod-btn" title="Schulbuch-Kapitel zu diesem Modul">📘 Schulbuch</a>';
|
||||
@@ -323,6 +326,13 @@ async function renderModules() {
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
if (!licensed) {
|
||||
html = '<div style="background:#fdece9;border:1px solid #f3c9c1;border-left:5px solid #c0392b;border-radius:12px;padding:1rem 1.1rem;margin-bottom:1.2rem;color:#7a2318">'
|
||||
+ '<div style="font-size:1.4rem;margin-bottom:.15rem">🔑</div>'
|
||||
+ '<div style="font-weight:800;font-size:.98rem;margin-bottom:.25rem">Noch keine Lizenz</div>'
|
||||
+ '<div style="font-size:.84rem;line-height:1.55">Deine Lehrperson muss dir noch eine gültige Lizenz zuweisen. Sobald das erledigt ist, kannst du die Simulationen starten.</div>'
|
||||
+ '</div>' + html;
|
||||
}
|
||||
document.getElementById('tab-modules').innerHTML = html;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user