Finish install step 1
This commit is contained in:
parent
30b6b46823
commit
624e2a7bc8
|
@ -26,6 +26,10 @@ body {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-red {
|
||||||
|
color: #d20f39;
|
||||||
|
}
|
||||||
|
|
||||||
.mb-1 {
|
.mb-1 {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,8 @@ if (installed()) redirect('/');
|
||||||
|
|
||||||
$db = new Database(DB);
|
$db = new Database(DB);
|
||||||
|
|
||||||
const STEPS = ['first', 'second', 'third', 'fourth', 'fifth'];
|
// Define our pages and whitelist the request
|
||||||
|
const STEPS = ['first', 'second', 'third'];
|
||||||
$step = isset($_GET['step']) && in_array($_GET['step'], STEPS) ? $_GET['step'] : 'first';
|
$step = isset($_GET['step']) && in_array($_GET['step'], STEPS) ? $_GET['step'] : 'first';
|
||||||
|
|
||||||
// Introduction; offer the user two options for installation;
|
// Introduction; offer the user two options for installation;
|
||||||
|
@ -21,7 +22,7 @@ if ($step == 'first') {
|
||||||
// Database setup; create tables and default data (if requested)
|
// Database setup; create tables and default data (if requested)
|
||||||
if ($step == 'second') {
|
if ($step == 'second') {
|
||||||
$istart = microtime(true); // time the database setup
|
$istart = microtime(true); // time the database setup
|
||||||
if (!isset($_POST['mode'])) redirect('/install/'); // dont run install if a button wasnt clicked
|
if (!required(['mode'])) redirect('/install/'); // dont run step two if a button wasnt clicked
|
||||||
$complete = $_POST['mode'] == 'complete'; // complete or partial setup
|
$complete = $_POST['mode'] == 'complete'; // complete or partial setup
|
||||||
|
|
||||||
// Create Control table
|
// Create Control table
|
||||||
|
@ -431,8 +432,8 @@ if ($step == 'second') {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create Users table
|
// Create Players table
|
||||||
$db->table('users')->create([
|
$db->table('players')->create([
|
||||||
'id INTEGER PRIMARY KEY',
|
'id INTEGER PRIMARY KEY',
|
||||||
'username TEXT NOT NULL',
|
'username TEXT NOT NULL',
|
||||||
'password TEXT NOT NULL',
|
'password TEXT NOT NULL',
|
||||||
|
@ -469,7 +470,7 @@ if ($step == 'second') {
|
||||||
// Create Fights table
|
// Create Fights table
|
||||||
$db->table('fights')->create([
|
$db->table('fights')->create([
|
||||||
'id INTEGER PRIMARY KEY',
|
'id INTEGER PRIMARY KEY',
|
||||||
'user_id INTEGER DEFAULT 1',
|
'player_id INTEGER DEFAULT 1',
|
||||||
'monster_id INTEGER DEFAULT 1',
|
'monster_id INTEGER DEFAULT 1',
|
||||||
'turn INTEGER DEFAULT 1',
|
'turn INTEGER DEFAULT 1',
|
||||||
'user_hp INTEGER DEFAULT 0',
|
'user_hp INTEGER DEFAULT 0',
|
||||||
|
@ -484,6 +485,41 @@ if ($step == 'second') {
|
||||||
'monster_sleep INTEGER DEFAULT 0',
|
'monster_sleep INTEGER DEFAULT 0',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
echo render('install/layout', ['title' => 'Database', 'step' => 'second', 'complete' => $complete]);
|
echo render('install/layout', ['title' => 'Database Setup', 'step' => 'second', 'complete' => $complete, 'start' => $istart]);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Admin account; create it from the provided info
|
||||||
|
if ($step == 'third') {
|
||||||
|
$errors = [];
|
||||||
|
|
||||||
|
if (!required(['username', 'password', 'email'])) {
|
||||||
|
$errors[] = 'All fields are required.';
|
||||||
|
} else {
|
||||||
|
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
|
||||||
|
$errors[] = 'Invalid email address format.';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen($_POST['password']) < 6) {
|
||||||
|
$errors[] = 'Password must be at least 6 characters long.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$class = isset($_POST['class']) && in_array($_POST['class'], [1, 2, 3]) ? $_POST['class'] : 0;
|
||||||
|
|
||||||
|
if (!empty($errors)) {
|
||||||
|
echo render('install/layout', ['title' => 'Admin Account', 'step' => 'third', 'errors' => $errors, 'complete' => $_POST['complete'] ?? false]);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->table('players')->insert([
|
||||||
|
'username' => trim($_POST['username']),
|
||||||
|
'password' => password_hash($_POST['password'], PASSWORD_ARGON2ID),
|
||||||
|
'email' => trim($_POST['email']),
|
||||||
|
'class' => $class,
|
||||||
|
'role' => 5
|
||||||
|
]);
|
||||||
|
|
||||||
|
echo render('install/layout', ['title' => 'Finished!', 'step' => 'done', 'name' => $_POST['username'], 'complete' => $_POST['complete'] ?? false]);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
BIN
server/database/dragon.db-shm
Normal file
BIN
server/database/dragon.db-shm
Normal file
Binary file not shown.
BIN
server/database/dragon.db-wal
Normal file
BIN
server/database/dragon.db-wal
Normal file
Binary file not shown.
|
@ -1,5 +1,11 @@
|
||||||
<?php // lib.php :: Common functions used throughout the program.
|
<?php // lib.php :: Common functions used throughout the program.
|
||||||
|
|
||||||
|
// A stopwatch function to return the elapsed time in seconds.
|
||||||
|
function stopwatch(float $start, int $roundTo = 3): float
|
||||||
|
{
|
||||||
|
return round(microtime(true) - $start, $roundTo);
|
||||||
|
}
|
||||||
|
|
||||||
// Redirect to another page.
|
// Redirect to another page.
|
||||||
function redirect(string $url): void
|
function redirect(string $url): void
|
||||||
{
|
{
|
||||||
|
@ -30,6 +36,23 @@ function render(string $baseView, array $data = []): string
|
||||||
return ob_get_clean();
|
return ob_get_clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Checks if all required POST variables are set.
|
||||||
|
function required(array $keys): bool
|
||||||
|
{
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
if (!isset($_POST[$key]) || empty($_POST[$key])) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function dd(mixed $var, bool $r = false)
|
||||||
|
{
|
||||||
|
echo '<pre>';
|
||||||
|
$r ? print_r($var) : var_dump($var);
|
||||||
|
echo '</pre>';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function gettemplate($templatename) { // SQL query for the template.
|
function gettemplate($templatename) { // SQL query for the template.
|
||||||
|
|
||||||
|
|
14
server/templates/install/done.php
Normal file
14
server/templates/install/done.php
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<p class="mb-1">
|
||||||
|
Congratulations, <?= $name ?>! Your installation is complete. Dragon Knight is ready to go.
|
||||||
|
All that's left is to log in and start playing. <?php if (!$complete): ?>Once you've set the
|
||||||
|
classes in the admin panel, you can assign yourself one.<?php endif; ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="mb-1">
|
||||||
|
<a href="/">Click here to log in.</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We'd love if you were to join the Sharkk community and let us know what you think!
|
||||||
|
@TODO
|
||||||
|
</p>
|
31
server/templates/install/partials/adminForm.php
Normal file
31
server/templates/install/partials/adminForm.php
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<form action="/install/?step=third" method="post" style="max-width: 300px;">
|
||||||
|
<input type="hidden" name="complete" value="<?= $complete ? "true" : "false" ?>">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="username">Username</label>
|
||||||
|
<input type="text" name="username" id="username">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="password">Password</label>
|
||||||
|
<input type="password" name="password" id="password" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="email">Email</label>
|
||||||
|
<input type="email" name="email" id="email" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php if ($complete): ?>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="class">Class</label>
|
||||||
|
<select name="class" id="class">
|
||||||
|
<option value="1">Mage</option>
|
||||||
|
<option value="2">Paladin</option>
|
||||||
|
<option value="3">Warrior</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<button type="submit" name="submit">Submit</button>
|
||||||
|
</form>
|
|
@ -1,5 +1,6 @@
|
||||||
<p class="mb-1">
|
<p class="mb-1">
|
||||||
If you're seeing this page with no errors, then database setup is complete!
|
If you're seeing this page with no errors, then database setup is complete!
|
||||||
|
It took about <?= stopwatch($start) ?> seconds.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<?php if ($complete): ?>
|
<?php if ($complete): ?>
|
||||||
|
@ -21,32 +22,4 @@
|
||||||
panel.<?php endif; ?>
|
panel.<?php endif; ?>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<form action="/install/?step=third" method="post" style="max-width: 300px;">
|
<?= render('install/partials/adminForm', ['complete' => $complete]) ?>
|
||||||
<div class="form-group">
|
|
||||||
<label for="username">Username</label>
|
|
||||||
<input type="text" name="username" id="username" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="password">Password</label>
|
|
||||||
<input type="password" name="password" id="password" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="email">Email</label>
|
|
||||||
<input type="email" name="email" id="email" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php if ($complete): ?>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="class">Class</label>
|
|
||||||
<select name="class" id="class">
|
|
||||||
<option value="1">Mage</option>
|
|
||||||
<option value="2">Paladin</option>
|
|
||||||
<option value="3">Warrior</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<button type="submit" name="submit">Submit</button>
|
|
||||||
</form>
|
|
||||||
|
|
12
server/templates/install/third.php
Normal file
12
server/templates/install/third.php
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<p class="mb-1">
|
||||||
|
It looks like we encountered some errors with the info provided for your
|
||||||
|
admin account. Let's try that again.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
foreach ($errors as $error) {
|
||||||
|
echo '<p class="mb-1 text-red">' . $error . '</p>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?= render('install/partials/adminForm', ['complete' => $complete]) ?>
|
Loading…
Reference in New Issue
Block a user