Clean up some redundancy
This commit is contained in:
parent
ae0f0802cb
commit
f7f6e7fb97
|
@ -179,3 +179,19 @@ div.town-content {
|
|||
div.town-content div.options, div.town-content div.news {
|
||||
grid-column: span 2;
|
||||
}
|
||||
|
||||
div.stat-table div.stat-row {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
div.stat-bar {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
div.stat-bar > div {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ $r->get('/', function() {
|
|||
}
|
||||
|
||||
display($page, $title);
|
||||
})->middleware('auth_only');
|
||||
});
|
||||
|
||||
$r->get('/ninja', function() {
|
||||
exit('NINJA! 🥷');
|
||||
|
@ -89,7 +89,12 @@ function dotown()
|
|||
|
||||
// Who's Online. Currently just members. Guests maybe later.
|
||||
if ($controlrow["showonline"] == 1) {
|
||||
$onlinequery = db()->query("SELECT id, username FROM users WHERE strftime('%s', onlinetime) >= strftime('%s', 'now') - 600 ORDER BY username;");
|
||||
$onlinequery = db()->query(<<<SQL
|
||||
SELECT id, username
|
||||
FROM users
|
||||
WHERE onlinetime >= datetime('now', '-600 seconds')
|
||||
ORDER BY username;
|
||||
SQL);
|
||||
|
||||
$online_count = 0;
|
||||
$online_rows = [];
|
||||
|
|
|
@ -20,8 +20,6 @@ function register_routes(Router $r): Router
|
|||
*/
|
||||
function login()
|
||||
{
|
||||
if (checkcookies() !== false) redirect('/');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$form = validate($_POST, [
|
||||
'username' => ['length:3-18', 'alpha-spaces'],
|
||||
|
|
|
@ -16,6 +16,7 @@ require_once 'actions/admin.php';
|
|||
env_load('../.env');
|
||||
|
||||
$uri = uri();
|
||||
$GLOBALS['cache'] = [];
|
||||
|
||||
if (!file_exists('../.installed') && $uri[0] !== 'install') {
|
||||
redirect('/install');
|
||||
|
@ -40,7 +41,7 @@ if (!file_exists('../.installed') && $uri[0] !== 'install') {
|
|||
}
|
||||
|
||||
// Force verify if the user isn't verified yet.
|
||||
if ($controlrow['verifyemail'] && $userrow['verify'] !== 'g2g') {
|
||||
if ($controlrow['verifyemail'] && $userrow['verify'] !== 'g2g' && $uri[0] !== 'verify') {
|
||||
redirect('/verify');
|
||||
}
|
||||
|
||||
|
|
110
src/lib.php
110
src/lib.php
|
@ -126,15 +126,14 @@ function display($content, $title, bool $topnav = true, bool $leftnav = true, bo
|
|||
$userrow = $userquery->fetchArray(SQLITE3_ASSOC);
|
||||
|
||||
// Current town name.
|
||||
if ($userrow["currentaction"] == "In Town") {
|
||||
$townquery = db()->query('SELECT * FROM towns WHERE latitude = ? AND longitude = ? LIMIT 1;', [$userrow["latitude"], $userrow["longitude"]]);
|
||||
$townrow = $townquery->fetchArray(SQLITE3_ASSOC);
|
||||
$userrow["currenttown"] = "Welcome to <b>".$townrow["name"]."</b>.<br><br>";
|
||||
if ($userrow['currentaction'] == 'In Town') {
|
||||
$townrow = get_town_by_xy($userrow['latitude'], $userrow['longitude']);
|
||||
$userrow['currenttown'] = "Welcome to <b>{$townrow['name']}</b>.<br><br>";
|
||||
} else {
|
||||
$userrow["currenttown"] = "";
|
||||
$userrow['currenttown'] = '';
|
||||
}
|
||||
|
||||
$userrow["forumslink"] = '<a href="/forum">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"; }
|
||||
|
@ -144,42 +143,22 @@ function display($content, $title, bool $topnav = true, bool $leftnav = true, bo
|
|||
if ($userrow["authlevel"] == 1) { $userrow["adminlink"] = "<a href=\"/admin\">Admin</a><br>"; } else { $userrow["adminlink"] = ""; }
|
||||
|
||||
// HP/MP/TP bars.
|
||||
$stathp = ceil($userrow["currenthp"] / $userrow["maxhp"] * 100);
|
||||
if ($userrow["maxmp"] != 0) { $statmp = ceil($userrow["currentmp"] / $userrow["maxmp"] * 100); } else { $statmp = 0; }
|
||||
$stattp = ceil($userrow["currenttp"] / $userrow["maxtp"] * 100);
|
||||
$stattable = "<table width=\"100\"><tr><td width=\"33%\">\n";
|
||||
$stattable .= "<table cellspacing=\"0\" cellpadding=\"0\"><tr><td style=\"padding:0px; width:15px; height:100px; border:solid 1px black; vertical-align:bottom;\">\n";
|
||||
if ($stathp >= 66) { $stattable .= "<div style=\"padding:0px; height:".$stathp."px; border-top:solid 1px black; background-image:url(/img/bars_green.gif);\"><img src=\"/img/bars_green.gif\" alt=\"\" /></div>"; }
|
||||
if ($stathp < 66 && $stathp >= 33) { $stattable .= "<div style=\"padding:0px; height:".$stathp."px; border-top:solid 1px black; background-image:url(/img/bars_yellow.gif);\"><img src=\"/img/bars_yellow.gif\" alt=\"\" /></div>"; }
|
||||
if ($stathp < 33) { $stattable .= "<div style=\"padding:0px; height:".$stathp."px; border-top:solid 1px black; background-image:url(/img/bars_red.gif);\"><img src=\"/img/bars_red.gif\" alt=\"\" /></div>"; }
|
||||
$stattable .= "</td></tr></table></td><td width=\"33%\">\n";
|
||||
$stattable .= "<table cellspacing=\"0\" cellpadding=\"0\"><tr><td style=\"padding:0px; width:15px; height:100px; border:solid 1px black; vertical-align:bottom;\">\n";
|
||||
if ($statmp >= 66) { $stattable .= "<div style=\"padding:0px; height:".$statmp."px; border-top:solid 1px black; background-image:url(/img/bars_green.gif);\"><img src=\"/img/bars_green.gif\" alt=\"\" /></div>"; }
|
||||
if ($statmp < 66 && $statmp >= 33) { $stattable .= "<div style=\"padding:0px; height:".$statmp."px; border-top:solid 1px black; background-image:url(/img/bars_yellow.gif);\"><img src=\"/img/bars_yellow.gif\" alt=\"\" /></div>"; }
|
||||
if ($statmp < 33) { $stattable .= "<div style=\"padding:0px; height:".$statmp."px; border-top:solid 1px black; background-image:url(/img/bars_red.gif);\"><img src=\"/img/bars_red.gif\" alt=\"\" /></div>"; }
|
||||
$stattable .= "</td></tr></table></td><td width=\"33%\">\n";
|
||||
$stattable .= "<table cellspacing=\"0\" cellpadding=\"0\"><tr><td style=\"padding:0px; width:15px; height:100px; border:solid 1px black; vertical-align:bottom;\">\n";
|
||||
if ($stattp >= 66) { $stattable .= "<div style=\"padding:0px; height:".$stattp."px; border-top:solid 1px black; background-image:url(/img/bars_green.gif);\"><img src=\"/img/bars_green.gif\" alt=\"\" /></div>"; }
|
||||
if ($stattp < 66 && $stattp >= 33) { $stattable .= "<div style=\"padding:0px; height:".$stattp."px; border-top:solid 1px black; background-image:url(/img/bars_yellow.gif);\"><img src=\"/img/bars_yellow.gif\" alt=\"\" /></div>"; }
|
||||
if ($stattp < 33) { $stattable .= "<div style=\"padding:0px; height:".$stattp."px; border-top:solid 1px black; background-image:url(/img/bars_red.gif);\"><img src=\"/img/bars_red.gif\" alt=\"\" /></div>"; }
|
||||
$stattable .= "</td></tr></table></td>\n";
|
||||
$stattable .= "</tr><tr><td>HP</td><td>MP</td><td>TP</td></tr></table>\n";
|
||||
$userrow["statbars"] = $stattable;
|
||||
$userrow['statbars'] = create_stat_table($userrow);
|
||||
|
||||
// Now make numbers stand out if they're low.
|
||||
if ($userrow["currenthp"] <= ($userrow["maxhp"]/5)) { $userrow["currenthp"] = "<blink><span class=\"highlight\"><b>*".$userrow["currenthp"]."*</b></span></blink>"; }
|
||||
if ($userrow["currentmp"] <= ($userrow["maxmp"]/5)) { $userrow["currentmp"] = "<blink><span class=\"highlight\"><b>*".$userrow["currentmp"]."*</b></span></blink>"; }
|
||||
|
||||
$spellquery = db()->query('SELECT id, name, type FROM spells;');
|
||||
$userspells = explode(",",$userrow["spells"]);
|
||||
$userrow["magiclist"] = "";
|
||||
while ($spellrow = $spellquery->fetchArray(SQLITE3_ASSOC)) {
|
||||
$user_spells = explode(',', $userrow['spells']);
|
||||
$spellquery = get_spells_from_list($user_spells);
|
||||
$userrow['magiclist'] = '';
|
||||
while ($spell = $spellquery->fetchArray(SQLITE3_ASSOC)) {
|
||||
$spell = false;
|
||||
foreach($userspells as $a => $b) {
|
||||
if ($b == $spellrow["id"] && $spellrow["type"] == 1) { $spell = true; }
|
||||
foreach($user_spells as $id) {
|
||||
if ($id === $spell['id'] && $spell['type'] == 1) $spell = true;
|
||||
}
|
||||
if ($spell == true) {
|
||||
$userrow["magiclist"] .= "<a href=\"/spell/{$spellrow["id"]}\">".$spellrow["name"]."</a><br>";
|
||||
$userrow['magiclist'] .= "<a href=\"/spell/{$spell['id']}\">".$spell['name']."</a><br>";
|
||||
}
|
||||
}
|
||||
if ($userrow["magiclist"] == "") { $userrow["magiclist"] = "None"; }
|
||||
|
@ -269,9 +248,15 @@ function get_control_row(): array|false
|
|||
*/
|
||||
function get_town_by_xy(int $x, int $y): array|false
|
||||
{
|
||||
$query = db()->query('SELECT * FROM towns WHERE longitude = ? AND latitude = ? LIMIT 1;', [$x, $y]);
|
||||
if ($query === false) return false;
|
||||
return $query->fetchArray(SQLITE3_ASSOC);
|
||||
$cache_tag = "town-$x-$y";
|
||||
|
||||
if (!isset($GLOBALS['cache'][$cache_tag])) {
|
||||
$query = db()->query('SELECT * FROM towns WHERE longitude = ? AND latitude = ? LIMIT 1;', [$x, $y]);
|
||||
if ($query === false) return false;
|
||||
$GLOBALS['cache'][$cache_tag] = $query->fetchArray(SQLITE3_ASSOC);
|
||||
}
|
||||
|
||||
return $GLOBALS['cache'][$cache_tag];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -552,22 +537,6 @@ function uri(): array
|
|||
return explode('/', trim($_SERVER['REQUEST_URI'], '/'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirect to login if not authenticated.
|
||||
*/
|
||||
function auth_only(): void
|
||||
{
|
||||
if (!checkcookies()) redirect('/login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirect to home if authenticated.
|
||||
*/
|
||||
function guest_only(): void
|
||||
{
|
||||
if (checkcookies()) redirect('/login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the environment variables from the .env file.
|
||||
*/
|
||||
|
@ -613,3 +582,38 @@ function env(string $key, mixed $default = null): mixed
|
|||
default => $v
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data on spells from a given list of IDs.
|
||||
*/
|
||||
function get_spells_from_list(array|string $spell_ids): SQLite3Result|false
|
||||
{
|
||||
if (is_string($spell_ids)) $spell_ids = explode(',', $spell_ids);
|
||||
$placeholders = implode(',', array_fill(0, count($spell_ids), '?'));
|
||||
$query = db()->query("SELECT id, name, type FROM spells WHERE id IN($placeholders)", $spell_ids);
|
||||
if ($query === false) return false;
|
||||
return $query;
|
||||
}
|
||||
|
||||
function generate_stat_bar($current, $max)
|
||||
{
|
||||
$percent = ($max === 0) ? 0 : ceil($current / $max * 100);
|
||||
$color = $percent >= 66 ? 'green' : ($percent >= 33 ? 'yellow' : 'red');
|
||||
|
||||
return '<div class="stat-bar" style="width: 15px; height: 100px; border: solid 1px black;">' .
|
||||
'<div style="height: ' . $percent . 'px; background-image: url(/img/bars_' . $color . '.gif);"></div>' .
|
||||
'</div>';
|
||||
}
|
||||
|
||||
function create_stat_table($userrow)
|
||||
{
|
||||
$stat_table = '<div class="stat-table">' .
|
||||
'<div class="stat-row">' .
|
||||
'<div class="stat-col">' . generate_stat_bar($userrow['currenthp'], $userrow['maxhp']) . '<div>HP</div></div>' .
|
||||
'<div class="stat-col">' . generate_stat_bar($userrow['currentmp'], $userrow['maxmp']) . '<div>MP</div></div>' .
|
||||
'<div class="stat-col">' . generate_stat_bar($userrow['currenttp'], $userrow['maxtp']) . '<div>TP</div></div>' .
|
||||
'</div>' .
|
||||
'</div>';
|
||||
|
||||
return $stat_table;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
Gold: <?= $user['gold'] ?><br>
|
||||
HP: <?= $user['currenthp'] ?><br>
|
||||
MP: <?= $user['currentmp'] ?><br>
|
||||
TP: <?= $user['currenttp'] ?><br>
|
||||
TP: <?= $user['currenttp'] ?><br><br>
|
||||
<?= $user['statbars'] ?><br>
|
||||
<a href="javascript:opencharpopup()">Extended Stats</a>
|
||||
</section>
|
||||
|
|
Loading…
Reference in New Issue
Block a user