c5307017e4
- Kapitel-Kopf: alte Links (Modulseite/Simulation/Glossar/Lehrplan) raus, stattdessen einheitliches App-Menü je Rolle (Schüler: Module/Erfolge/Schulbuch/Profil; Lehrer: Cockpit/Schulbuch; öffentlich: Simulationen/Schulbuch), Schulbuch aktiv - Modus je Rolle: Schüler:in → Schüler:innen/Leichte Sprache (Default Schüler:innen, Lehreransicht gesperrt, auch bei ?lehrer=1); Lehrperson → +Lehreransicht (Default Lehrperson) - teacher.html: Menüpunkt "📖 Schulbuch" ergänzt - buch.php-Übersicht: gleiches rollen-Menü statt "← Zu den Simulationen" Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
100 lines
4.9 KiB
PHP
100 lines
4.9 KiB
PHP
<?php
|
||
/**
|
||
* Schulbuch — gemeinsame Helfer für alle Kapitel (buch-<sim>.php)
|
||
* ---------------------------------------------------------------
|
||
* Verwendung im Kapitel:
|
||
* define('BUCH_SIM', 'tourismustal'); // Ordner für Foto-Slots
|
||
* require __DIR__ . '/_partials/buch_helpers.php';
|
||
*
|
||
* Stellt bereit:
|
||
* $MODE 'schueler' | 'leicht' | 'lehrer' (?leicht=1 / ?lehrer=1)
|
||
* $LEHRER, $LEICHT Bequemlichkeits-Booleans
|
||
* buchBild($slug, $vorschlag, $unterschrift, $klein) Foto-Slot
|
||
* g($slug, $label) Glossar-Tooltip
|
||
* buchNav($links) Kopfzeile mit Modus-Umschalter
|
||
*
|
||
* Fotos: echte Bilder unter assets/img/buch/<BUCH_SIM>/<slug>.jpg ablegen —
|
||
* Platzhalter tauschen sich automatisch aus. Bild-Exporte immer ohne
|
||
* EXIF/GPS (magick -strip).
|
||
*/
|
||
|
||
require_once __DIR__ . '/../../php/lib/Session.php';
|
||
Session::start();
|
||
$IS_TEACHER = (Session::teacherId() !== null);
|
||
$IS_STUDENT = (Session::studentId() !== null);
|
||
|
||
// Modus je Rolle. Lehrer-Ansicht nur für Lehrpersonen erreichbar.
|
||
// Buttons: ?schueler=1 / ?leicht=1 / ?lehrer=1. Ohne Parameter: Default je Rolle
|
||
// (Lehrperson → Lehreransicht, sonst → Schüler:innen).
|
||
if (isset($_GET['leicht'])) $MODE = 'leicht';
|
||
elseif (isset($_GET['lehrer'])) $MODE = 'lehrer';
|
||
elseif (isset($_GET['schueler'])) $MODE = 'schueler';
|
||
else $MODE = $IS_TEACHER ? 'lehrer' : 'schueler';
|
||
if (!$IS_TEACHER && $MODE === 'lehrer') $MODE = 'schueler'; // Sperre für Nicht-Lehrpersonen
|
||
$LEHRER = ($MODE === 'lehrer');
|
||
$LEICHT = ($MODE === 'leicht');
|
||
|
||
/** Foto-Slot: echtes Bild, sobald es existiert – sonst Platzhalter mit Vorschlag. */
|
||
function buchBild(string $slug, string $vorschlag, string $unterschrift = '', bool $klein = false): string {
|
||
global $bp;
|
||
$cls = $klein ? 'b-foto b-klein' : 'b-foto';
|
||
foreach (['jpg', 'jpeg', 'webp', 'png'] as $ext) {
|
||
$rel = 'assets/img/buch/' . BUCH_SIM . "/{$slug}.{$ext}";
|
||
if (is_file(__DIR__ . '/../../' . $rel)) {
|
||
$cap = $unterschrift !== '' ? "<figcaption>{$unterschrift}</figcaption>" : '';
|
||
return "<figure class=\"{$cls}\"><img src=\"{$bp}/{$rel}\" alt=\"" . htmlspecialchars($unterschrift ?: $slug) . "\" loading=\"lazy\">{$cap}</figure>";
|
||
}
|
||
}
|
||
return "<div class=\"b-foto-platzhalter\"><span>📷</span><b>Foto gesucht</b><small>" . htmlspecialchars($vorschlag) . "</small><code>assets/img/buch/" . BUCH_SIM . "/{$slug}.jpg</code></div>";
|
||
}
|
||
|
||
/** Kapitel-Symbol: generiertes Icon-Bild, solange keins da ist das Emoji. */
|
||
function buchKapIcon(string $emoji): string {
|
||
global $bp;
|
||
$rel = 'assets/img/buch/icon-' . BUCH_SIM . '.webp';
|
||
if (is_file(__DIR__ . '/../../' . $rel)) {
|
||
return '<img class="b-kapicon" src="' . $bp . '/' . $rel . '" alt="">';
|
||
}
|
||
return $emoji;
|
||
}
|
||
|
||
/** Glossar-Begriff mit Tooltip */
|
||
function g(string $slug, string $label): string {
|
||
return "<span class=\"ggs-g\" data-glossar=\"{$slug}\">{$label}</span>";
|
||
}
|
||
|
||
/**
|
||
* Kopfzeile: einheitliches App-Menü (rollenabhängig) + Modus-Umschalter.
|
||
* Der $links-Parameter wird nicht mehr verwendet (die alten Kapitel-Links —
|
||
* Modulseite/Simulation/Glossar/Lehrplan — gehören nicht ins Schulbuch); die
|
||
* Signatur bleibt, damit die Kapitel unverändert `buchNav([...])` aufrufen können.
|
||
*/
|
||
function buchNav(array $links = []): void {
|
||
global $bp, $MODE, $IS_TEACHER, $IS_STUDENT;
|
||
echo '<nav class="b-nav">';
|
||
// App-Menü passend zur Rolle (bleibt oben stehen, wie auf der Schüler-/Lehrerseite)
|
||
if ($IS_TEACHER) {
|
||
echo '<a href="' . $bp . '/teacher.html">📊 Lehrer-Cockpit</a>';
|
||
echo ' · <span class="b-here">📖 Schulbuch</span>';
|
||
} elseif ($IS_STUDENT) {
|
||
echo '<a href="' . $bp . '/schueler.html">Module</a>';
|
||
echo ' · <a href="' . $bp . '/schueler.html#achievements">Erfolge</a>';
|
||
echo ' · <span class="b-here">Schulbuch</span>';
|
||
echo ' · <a href="' . $bp . '/profil.html">Profil</a>';
|
||
} else {
|
||
echo '<a href="' . $bp . '/simulationen">🎮 Simulationen</a>';
|
||
echo ' · <span class="b-here">📖 Schulbuch</span>';
|
||
}
|
||
echo '<span class="spacer"></span>';
|
||
// Modus-Umschalter — Lehreransicht nur für Lehrpersonen
|
||
echo '<a class="b-mode ' . ($MODE === 'schueler' ? 'active' : '') . '" href="?schueler=1">👩🎓 Schüler:innen</a>';
|
||
echo '<a class="b-mode ' . ($MODE === 'leicht' ? 'active' : '') . '" href="?leicht=1">🌱 Leichte Sprache</a>';
|
||
if ($IS_TEACHER) {
|
||
echo '<a class="b-mode ' . ($MODE === 'lehrer' ? 'active' : '') . '" href="?lehrer=1">👩🏫 Lehrperson</a>';
|
||
}
|
||
echo '</nav>';
|
||
if ($MODE === 'leicht') {
|
||
echo '<div class="b-leicht-hinweis">🌱 Dieses Heft ist in <b>Leichter Sprache</b>. Kurze Sätze. Einfache Wörter. Die Bilder und Zahlen sind die gleichen wie im großen Heft.</div>';
|
||
}
|
||
}
|