$lang, 'quality' => $quality); } } usort($preferences, function ($a, $b) { return $a['quality'] < $b['quality'] ? 1 : -1; }); foreach ($preferences as $preference) { $lang = $preference['lang']; $primary = explode('-', $lang, 2)[0]; if (isset($supported[$lang])) { return $lang; } if (isset($supported[$primary])) { return $primary; } } return $fallback; } $pageTitle = 'Racket ChatGPT Agent Sandbox Creator'; $templateData = RacketSandboxTemplate::dataFile('login.html'); $texts = $templateData['translations'] ?? array(); $language = detect_login_language($texts, 'en'); $styleVersion = @filemtime(__DIR__ . '/css/styles.css') ?: time(); if ($auth->currentUser() !== null && $_SERVER['REQUEST_METHOD'] !== 'POST') { header('Location: /'); exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { try { $auth->login($_POST['email'] ?? '', $_POST['password'] ?? ''); header('Location: /'); exit; } catch (Throwable $e) { $error = $e->getMessage(); } } header('Content-Type: text/html; charset=utf-8'); $loginText = $texts[$language]; $errorHtml = $error === '' ? '' : RacketSandboxTemplate::renderFile('partials/message.html', array( 'class' => 'error', 'message' => $error, )); echo RacketSandboxTemplate::renderFile('login.html', array( 'language' => $language, 'page_title' => $pageTitle, 'style_version' => $styleVersion, 'error_html' => $errorHtml, 'email_label' => $loginText['email'], 'password_label' => $loginText['password'], 'login_label' => $loginText['login'], 'account_title' => $loginText['account_title'], 'account_text' => $loginText['account_text'], 'account_link' => $loginText['account_link'], ));