Add flash messages, work on layout
This commit is contained in:
parent
56524da0c6
commit
167f28ff2c
|
@ -11,6 +11,7 @@ class App
|
||||||
public static Request $req;
|
public static Request $req;
|
||||||
public static Auth $auth;
|
public static Auth $auth;
|
||||||
public static array $s = []; // game settings
|
public static array $s = []; // game settings
|
||||||
|
public static array $flashes = []; // flash messages
|
||||||
|
|
||||||
public function __construct(string $dbPath)
|
public function __construct(string $dbPath)
|
||||||
{
|
{
|
||||||
|
@ -18,12 +19,18 @@ class App
|
||||||
self::$db = new Database($dbPath); // the database
|
self::$db = new Database($dbPath); // the database
|
||||||
self::$dbPath = $dbPath; // the database path
|
self::$dbPath = $dbPath; // the database path
|
||||||
|
|
||||||
// load game settings
|
// stuff that can only be loaded if the database is installed
|
||||||
$s = self::$db->q('SELECT * FROM settings WHERE id = 1;');
|
if (INSTALLED) {
|
||||||
self::$s = $s ? $s->fetch() : [];
|
// load game settings
|
||||||
|
$s = self::$db->q('SELECT * FROM settings WHERE id = 1;');
|
||||||
|
self::$s = $s ? $s->fetch() : [];
|
||||||
|
|
||||||
// init authentication
|
// init authentication
|
||||||
self::$auth = new Auth();
|
self::$auth = new Auth();
|
||||||
|
}
|
||||||
|
|
||||||
|
// load flash messages
|
||||||
|
self::$flashes = $_SESSION['flash'] ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function performDatabaseReset(): void
|
public static function performDatabaseReset(): void
|
||||||
|
@ -38,4 +45,20 @@ class App
|
||||||
{
|
{
|
||||||
return self::$auth->good();
|
return self::$auth->good();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function flash(string $key, mixed $value = null): mixed
|
||||||
|
{
|
||||||
|
// get a flash message
|
||||||
|
if ($value === null) return self::$flashes[$key] ?? null;
|
||||||
|
|
||||||
|
// set a flash message
|
||||||
|
$_SESSION['flash'][$key] = $value;
|
||||||
|
self::$flashes[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
// clean up flash messages
|
||||||
|
$_SESSION['flash'] = [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ class Player
|
||||||
public static function validateCredentials(string $identifier, string $password, bool $fetch = false): int|false
|
public static function validateCredentials(string $identifier, string $password, bool $fetch = false): int|false
|
||||||
{
|
{
|
||||||
// get the player from their username or email
|
// get the player from their username or email
|
||||||
$player = App::$db->do("SELECT " . ($fetch ? '*' : 'id, password') . " FROM players WHERE username = :i OR email = :i LIMIT 1;", ['i' => $identifier]);
|
$player = App::$db->do("SELECT " . ($fetch ? '*' : 'id, password') . " FROM players WHERE LOWER(username) = :i OR LOWER(email) = :i LIMIT 1;", ['i' => strtolower($identifier)]);
|
||||||
if ($player == false) return false;
|
if ($player == false) return false;
|
||||||
$player = $player->fetch();
|
$player = $player->fetch();
|
||||||
|
|
||||||
|
@ -52,4 +52,4 @@ class Player
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,11 +9,37 @@ class GateModule
|
||||||
$s = App::$req->uri(1) ?? ''; // second segment
|
$s = App::$req->uri(1) ?? ''; // second segment
|
||||||
$m = App::$req->method; // request method
|
$m = App::$req->method; // request method
|
||||||
|
|
||||||
if ($s == '' || $s == 'login') return self::login();
|
if ($s == '' || $s == 'login') return self::login($m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function login()
|
public static function login(string $method)
|
||||||
{
|
{
|
||||||
echo render('layout', ['title' => 'Login']);
|
// just display the login page
|
||||||
|
if ($method == 'GET') {
|
||||||
|
echo render('layout', ['title' => 'Login', 'content' => 'gate/login']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle the login form
|
||||||
|
$id = trim($_POST['id'] ?? ''); // identifier; let a user log in with email or username
|
||||||
|
$pw = $_POST['pw'] ?? ''; // password
|
||||||
|
|
||||||
|
// fields are required
|
||||||
|
if (empty($id) || empty($pw)) {
|
||||||
|
App::flash('error', 'Please fill out all fields.');
|
||||||
|
redirect('/gate/login');
|
||||||
|
}
|
||||||
|
|
||||||
|
// find the user, login if valid
|
||||||
|
$found = App::$auth->login($id, $pw, isset($_POST['remember']));
|
||||||
|
|
||||||
|
// Login is valid!
|
||||||
|
if ($found) {
|
||||||
|
App::flash('success', 'Welcome back!');
|
||||||
|
redirect('/');
|
||||||
|
} else {
|
||||||
|
App::flash('error', 'Player account not found.');
|
||||||
|
redirect('/gate/login');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,19 +16,19 @@
|
||||||
<aside id="left">
|
<aside id="left">
|
||||||
left
|
left
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<main>
|
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<?= render($content, $data) ?>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<aside id="right">
|
<aside id="right">
|
||||||
right
|
right
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<?= render('partials/footer', $data) ?>
|
<?= render('partials/footer', $data) ?>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user