Move forum to new router model
This commit is contained in:
parent
d10d69fb1a
commit
b5c271e77b
|
@ -6,6 +6,11 @@ require_once '../src/lib.php';
|
|||
require_once '../src/router.php';
|
||||
require_once '../src/users.php';
|
||||
require_once '../src/help.php';
|
||||
require_once '../src/towns.php';
|
||||
require_once '../src/explore.php';
|
||||
require_once '../src/fight.php';
|
||||
require_once '../src/heal.php';
|
||||
require_once '../src/forum.php';
|
||||
|
||||
if (!file_exists('../.installed')) redirect('install.php');
|
||||
|
||||
|
@ -42,11 +47,6 @@ if (!$controlrow["gameopen"]) {
|
|||
exit;
|
||||
}
|
||||
|
||||
require_once '../src/towns.php';
|
||||
require_once '../src/explore.php';
|
||||
require_once '../src/fight.php';
|
||||
require_once '../src/heal.php';
|
||||
|
||||
$r = new Router;
|
||||
|
||||
$r->get('/', function() {
|
||||
|
@ -73,6 +73,7 @@ Towns\register_routes($r);
|
|||
Fights\register_routes($r);
|
||||
Users\register_routes($r);
|
||||
Help\register_routes($r);
|
||||
Forum\register_routes($r);
|
||||
|
||||
$r->post('/move', 'move');
|
||||
|
||||
|
@ -86,7 +87,7 @@ $r->post('/babblebox', 'babblebox');
|
|||
// [code, handler, params, middleware]
|
||||
$l = $r->lookup($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
|
||||
|
||||
if ($l['code'] !== 200) exit($l['code']);
|
||||
if ($l['code'] !== 200) exit("Error: {$l['code']}");
|
||||
if (!empty($l['middleware'])) foreach ($l['middleware'] as $middleware) $middleware();
|
||||
$l['handler'](...$l['params'] ?? []);
|
||||
|
||||
|
|
|
@ -2,59 +2,31 @@
|
|||
|
||||
// forum.php :: Internal forums script for the game.
|
||||
|
||||
require_once '../src/lib.php';
|
||||
namespace Forum;
|
||||
|
||||
if (!file_exists('../.installed')) redirect('install.php');
|
||||
use Router;
|
||||
|
||||
$controlrow = get_control_row();
|
||||
|
||||
// Login (or verify) if not logged in.
|
||||
if (($userrow = checkcookies()) === false) {
|
||||
if (isset($_GET['do']) && $_GET['do'] === 'verify') {
|
||||
header("Location: users.php?do=verify");
|
||||
exit;
|
||||
}
|
||||
|
||||
header("Location: /login");
|
||||
exit;
|
||||
function register_routes(Router $r): Router
|
||||
{
|
||||
$r->get('/forum/thread/:x/:x', 'Forum\showthread');
|
||||
$r->get('/forum/new', 'Forum\newthread');
|
||||
$r->post('/forum/new', 'Forum\newthread');
|
||||
$r->post('/forum/reply', 'Forum\reply');
|
||||
$r->get('/forum/list/:x', 'Forum\donothing');
|
||||
$r->get('/forum', 'Forum\donothing');
|
||||
return $r;
|
||||
}
|
||||
|
||||
// Close game.
|
||||
if ((bool) $controlrow["gameopen"] === false) {
|
||||
display("The game is currently closed for maintanence. Please check back later.", "Game Closed");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Force verify if the user isn't verified yet.
|
||||
if ((bool) $controlrow["verifyemail"] && (bool) $userrow["verify"] === false) {
|
||||
header("Location: users.php?do=verify");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Block user if he/she has been banned.
|
||||
if ($userrow["authlevel"] === 2) {
|
||||
exit("Your account has been blocked.");
|
||||
}
|
||||
|
||||
$do = explode(':', $_GET['do'] ?? '');
|
||||
match ($do[0]) {
|
||||
'thread' => showthread($do[1], $do[2]),
|
||||
'new' => newthread(),
|
||||
'reply' => reply(),
|
||||
'list' => donothing($do[1]),
|
||||
default => donothing()
|
||||
};
|
||||
|
||||
function donothing($start = 0)
|
||||
{
|
||||
$query = db()->query('SELECT * FROM forum WHERE parent=0 ORDER BY newpostdate DESC LIMIT 20 OFFSET ?;', [20 * $start]);
|
||||
$page = "<table width=\"100%\"><tr><td style=\"padding:1px; background-color:black;\"><table width=\"100%\" style=\"margins:0px;\" cellspacing=\"1\" cellpadding=\"3\"><tr><th colspan=\"3\" style=\"background-color:#dddddd;\"><center><a href=\"forum.php?do=new\">New Thread</a></center></th></tr><tr><th width=\"50%\" style=\"background-color:#dddddd;\">Thread</th><th width=\"10%\" style=\"background-color:#dddddd;\">Replies</th><th style=\"background-color:#dddddd;\">Last Post</th></tr>\n";
|
||||
$page = "<table width=\"100%\"><tr><td style=\"padding:1px; background-color:black;\"><table width=\"100%\" style=\"margins:0px;\" cellspacing=\"1\" cellpadding=\"3\"><tr><th colspan=\"3\" style=\"background-color:#dddddd;\"><center><a href=\"/forum/new\">New Thread</a></center></th></tr><tr><th width=\"50%\" style=\"background-color:#dddddd;\">Thread</th><th width=\"10%\" style=\"background-color:#dddddd;\">Replies</th><th style=\"background-color:#dddddd;\">Last Post</th></tr>\n";
|
||||
|
||||
$hasRows = false;
|
||||
|
||||
while ($row = $query->fetchArray(SQLITE3_ASSOC)) {
|
||||
$hasRows = true;
|
||||
$page .= "<tr><td style=\"background-color:#ffffff;\"><a href=\"forum.php?do=thread:".$row["id"].":0\">".$row["title"]."</a></td><td style=\"background-color:#ffffff;\">".$row["replies"]."</td><td style=\"background-color:#ffffff;\">".$row["newpostdate"]."</td></tr>\n";
|
||||
$page .= "<tr><td style=\"background-color:#ffffff;\"><a href=\"/forum/thread/".$row["id"]."/0\">".$row["title"]."</a></td><td style=\"background-color:#ffffff;\">".$row["replies"]."</td><td style=\"background-color:#ffffff;\">".$row["newpostdate"]."</td></tr>\n";
|
||||
}
|
||||
|
||||
if (!$hasRows) {
|
||||
|
@ -71,12 +43,12 @@ function showthread($id, $start)
|
|||
$posts = db()->query('SELECT * FROM forum WHERE id=? OR parent=? ORDER BY id LIMIT 15 OFFSET ?;', [$id, $id, $start * 15]);
|
||||
$title = db()->query('SELECT title FROM forum WHERE id=? LIMIT 1;', [$id])->fetchArray(SQLITE3_ASSOC);
|
||||
|
||||
$page = "<table width=\"100%\"><tr><td style=\"padding:1px; background-color:black;\"><table width=\"100%\" style=\"margins:0px;\" cellspacing=\"1\" cellpadding=\"3\"><tr><td colspan=\"2\" style=\"background-color:#dddddd;\"><b><a href=\"forum.php\">Forum</a> :: ".$title['title']."</b></td></tr>\n";
|
||||
$page = "<table width=\"100%\"><tr><td style=\"padding:1px; background-color:black;\"><table width=\"100%\" style=\"margins:0px;\" cellspacing=\"1\" cellpadding=\"3\"><tr><td colspan=\"2\" style=\"background-color:#dddddd;\"><b><a href=\"/forum\">Forum</a> :: ".$title['title']."</b></td></tr>\n";
|
||||
while ($row = $posts->fetchArray(SQLITE3_ASSOC)) {
|
||||
$page .= "<tr><td width=\"25%\" style=\"background-color:#ffffff; vertical-align:top;\"><span class=\"small\"><b>".$row["author"]."</b><br><br>".prettyforumdate($row["postdate"])."</td><td style=\"background-color:#ffffff; vertical-align:top;\">".nl2br($row["content"])."</td></tr>\n";
|
||||
}
|
||||
$page .= "</table></td></tr></table><br>";
|
||||
$page .= "<table width=\"100%\"><tr><td><b>Reply To This Thread:</b><br><form action=\"forum.php?do=reply\" method=\"post\"><input type=\"hidden\" name=\"parent\" value=\"$id\" /><input type=\"hidden\" name=\"title\" value=\"Re: ".$title["title"]."\" /><textarea name=\"content\" rows=\"7\" cols=\"40\"></textarea><br><input type=\"submit\" name=\"submit\" value=\"Submit\" /> <input type=\"reset\" name=\"reset\" value=\"Reset\" /></form></td></tr></table>";
|
||||
$page .= "<table width=\"100%\"><tr><td><b>Reply To This Thread:</b><br><form action=\"/forum/reply\" method=\"post\"><input type=\"hidden\" name=\"parent\" value=\"$id\" /><input type=\"hidden\" name=\"title\" value=\"Re: ".$title["title"]."\" /><textarea name=\"content\" rows=\"7\" cols=\"40\"></textarea><br><input type=\"submit\" name=\"submit\" value=\"Submit\" /> <input type=\"reset\" name=\"reset\" value=\"Reset\" /></form></td></tr></table>";
|
||||
|
||||
display($page, "Forum");
|
||||
}
|
||||
|
@ -86,7 +58,7 @@ function reply()
|
|||
global $userrow;
|
||||
|
||||
$form = validate($_POST, [
|
||||
'title' => ['length:2-30', 'alphanum-spaces'],
|
||||
'title' => [],
|
||||
'content' => []
|
||||
]);
|
||||
|
||||
|
@ -100,7 +72,7 @@ function reply()
|
|||
$userrow['username'], $form['title'], $form['content'], $form['parent']
|
||||
]);
|
||||
db()->query('UPDATE forum SET newpostdate=CURRENT_TIMESTAMP, replies=replies + 1 WHERE id=?;', [$form['parent']]);
|
||||
redirect("forum.php?do=thread:{$form['parent']}:0");
|
||||
redirect("/forum/thread/{$form['parent']}/0");
|
||||
}
|
||||
|
||||
function newthread()
|
||||
|
@ -109,7 +81,7 @@ function newthread()
|
|||
|
||||
if (isset($_POST["submit"])) {
|
||||
$form = validate($_POST, [
|
||||
'title' => ['length:2-30', 'alphanum-spaces'],
|
||||
'title' => ['length:2-30'],
|
||||
'content' => []
|
||||
]);
|
||||
|
||||
|
@ -121,9 +93,9 @@ function newthread()
|
|||
db()->query('INSERT INTO forum (author, title, content) VALUES (?, ?, ?);', [
|
||||
$userrow['username'], $form['title'], $form['content']
|
||||
]);
|
||||
redirect('forum.php');
|
||||
redirect('/forum');
|
||||
}
|
||||
|
||||
$page = "<table width=\"100%\"><tr><td><b>Make A New Post:</b><br><br/ ><form action=\"forum.php?do=new\" method=\"post\">Title:<br><input type=\"text\" name=\"title\" size=\"50\" maxlength=\"50\" /><br><br>Message:<br><textarea name=\"content\" rows=\"7\" cols=\"40\"></textarea><br><br><input type=\"submit\" name=\"submit\" value=\"Submit\" /> <input type=\"reset\" name=\"reset\" value=\"Reset\" /></form></td></tr></table>";
|
||||
$page = "<table width=\"100%\"><tr><td><b>Make A New Post:</b><br><br/ ><form action=\"/forum/new\" method=\"post\">Title:<br><input type=\"text\" name=\"title\" size=\"50\" maxlength=\"50\" /><br><br>Message:<br><textarea name=\"content\" rows=\"7\" cols=\"40\"></textarea><br><br><input type=\"submit\" name=\"submit\" value=\"Submit\" /> <input type=\"reset\" name=\"reset\" value=\"Reset\" /></form></td></tr></table>";
|
||||
display($page, "Forum");
|
||||
}
|
|
@ -134,7 +134,7 @@ function display($content, $title, $topnav=true, $leftnav=true, $rightnav=true,
|
|||
$userrow["currenttown"] = "";
|
||||
}
|
||||
|
||||
$userrow["forumslink"] = "<a href=\"forum.php\">Forum</a><br>";
|
||||
$userrow["forumslink"] = '<a href="/forum">Forum</a><br>';
|
||||
|
||||
// Format various userrow stuffs...
|
||||
if ($userrow["latitude"] < 0) { $userrow["latitude"] = $userrow["latitude"] * -1 . "S"; } else { $userrow["latitude"] .= "N"; }
|
||||
|
|
|
@ -174,10 +174,5 @@ class Router
|
|||
if (!str_starts_with($route, '/')) {
|
||||
throw new InvalidArgumentException("Route must start with a '/'");
|
||||
}
|
||||
|
||||
// Optional: Check for consecutive dynamic segments or invalid characters
|
||||
if (preg_match('/(:x.*){2,}/', $route)) {
|
||||
throw new InvalidArgumentException("Invalid route pattern: consecutive dynamic segments");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user