Files
geograsim/App/pages/_partials/buch_helpers.php
T
Adminator c5307017e4 Schulbuch: einheitliches App-Menü + rollenabhängiger Modus
- 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>
2026-07-17 02:53:23 +02:00

100 lines
4.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>';
}
}