<?php declare(strict_types=1); namespace mystic\forum\utils; use mystic\forum\Database; use mystic\forum\Messaging; use mystic\forum\orm\User; final class RequestUtils { use StaticClass; private static ?string $formErrorDestination = null; public static function getRequestMethod(): string { return strtoupper($_SERVER["REQUEST_METHOD"] ?? "GET"); } public static function isRequestMethod(string $method): bool { $rMethod = self::getRequestMethod(); return strcasecmp($rMethod, $method) === 0; } public static function ensureRequestMethod(string $method): void { if (!self::isRequestMethod($method)) { http_response_code(405); Messaging::error("Invalid request method " . self::getRequestMethod()); exit; } } public static function getRequiredField(string $field, string $formId): string { $fieldValue = $_POST[$field] ?? null; if ($fieldValue === null) { //http_response_code(400); //Messaging::error("Missing required field $field"); RequestUtils::triggerFormError("Missing required field '$field'", $formId); //exit; } return $fieldValue; } public static function storeForm(string $formId): void { $_SESSION["lastForm"] = $_POST ?? []; $_SESSION["lastForm_uri"] = $_SERVER["REQUEST_URI"]; $_SESSION["lastForm_id"] = $formId; } public static function setFormErrorDestination(?string $dest): ?string { $prev = self::$formErrorDestination; self::$formErrorDestination = $dest; return $prev; } public static function triggerFormError(string $message, string $formId, ?string $next = null): never { $next ??= self::$formErrorDestination ?? $_SERVER["REQUEST_URI"]; $_SESSION["formError/$formId"] = $message; // store last form submission self::storeForm($formId); header("Location: $next"); exit; } public static function getAndClearFormError(string $formId): ?string { $err = $_SESSION["formError/$formId"] ?? null; unset($_SESSION["formError/$formId"]); return $err; } public static function getLastForm_legacy(string &$lastFormUri): ?array { $lastFormUri = $_SESSION["lastForm_uri"] ?? ""; return $_SESSION["lastForm"] ?? null; } public static function getLastForm(string &$lastFormId): ?array { $lastFormId = $_SESSION["lastForm_id"] ?? ""; return $_SESSION["lastForm"] ?? null; } public static function clearLastForm(): void { unset($_SESSION["lastForm"]); unset($_SESSION["lastForm_uri"]); unset($_SESSION["lastForm_id"]); } public static function getAuthorizedUser(Database &$db): ?User { $userId = $_SESSION["authedUser"] ?? null; if ($userId === null) return null; $user = new User(); $user->id = $userId; if (!$db->fetch($user)) return null; return $user; } public static function setAuthorizedUser(User &$user): void { $_SESSION["authedUser"] = $user->id; } public static function unsetAuthorizedUser(): void { unset($_SESSION["authedUser"]); } }