view = new View(); } /** Seiten hinter der Anmeldung rufen das zuerst auf. */ protected function verlangeAnmeldung(): void { Auth::verlange(); } protected function render(string $template, array $daten = []): void { $daten['csrfToken'] = Auth::csrfToken(); $daten['benutzer'] = Auth::benutzer(); $this->view->render($template, $daten); } protected function post(string $feld, string $standard = ''): string { $wert = $_POST[$feld] ?? $standard; return is_string($wert) ? trim($wert) : $standard; } /** * Mehrfachauswahl aus dem Formular (Ankreuzfelder mit Namen wie „konten[]“). * * @return list */ protected function postIds(string $feld): array { $werte = $_POST[$feld] ?? []; if (!is_array($werte)) { return []; } return array_values(array_map('intval', array_filter($werte, 'is_scalar'))); } /** * Mehrfachauswahl mit Textwerten (Ankreuzfelder wie „konten[]“). * * @return list */ protected function postTexte(string $feld): array { $werte = $_POST[$feld] ?? []; if (!is_array($werte)) { return []; } $texte = []; foreach ($werte as $wert) { if (is_string($wert) && trim($wert) !== '') { $texte[] = trim($wert); } } return $texte; } protected function query(string $feld, string $standard = ''): string { $wert = $_GET[$feld] ?? $standard; return is_string($wert) ? trim($wert) : $standard; } /** * Ob die Anfrage per JavaScript im Hintergrund geschickt wurde, statt als * gewöhnliche Formularübermittlung. Nur dann erwartet der Aufrufer JSON * statt einer Weiterleitung – ohne JavaScript bleibt der bisherige Weg * über Location-Header und Flash-Meldung der einzige. */ protected function istAjax(): bool { return ($_SERVER['HTTP_X_REQUESTED_WITH'] ?? '') === 'XMLHttpRequest'; } /** @param array $daten */ protected function json(array $daten): void { header('Content-Type: application/json; charset=utf-8'); echo json_encode($daten, JSON_UNESCAPED_UNICODE); exit; } }