1
0
Fork 0
mirror of https://github.com/sbrl/Pepperminty-Wiki.git synced 2024-11-25 17:23:00 +00:00
Pepperminty-Wiki/modules/feature-firstrun.php
2019-05-11 00:35:47 +01:00

114 lines
5.4 KiB
PHP

<?php
register_module([
"name" => "First run wizard",
"version" => "0.1",
"author" => "Starbeamrainbowlabs",
"description" => "Displays a special page to aid in setting up a new wiki for the first time.",
"id" => "feature-firstrun",
"code" => function() {
// TODO: Remove this line once it's ready
return true; // Stop this module from actually being executed - it's not ready yet!
// TODO: Figure out how to detect pre-existing wikis here
// Perhaps this could be a setting instead? We'd need to update the settings logic a bit
$firstrun_complete = file_exists("._peppermint_installed");
/**
* @api {get} ?action=firstrun Display the firstrun page
* @apiName FirstRun
* @apiGroup Settings
* @apiPermission Anonymous
*
*/
/*
* ███████ ██ ██████ ███████ ████████ ██████ ██ ██ ███ ██
* ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██
* █████ ██ ██████ ███████ ██ ██████ ██ ██ ██ ██ ██
* ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
* ██ ██ ██ ██ ███████ ██ ██ ██ ██████ ██ ████
*/
add_action("firstrun", function() use($firstrun_complete) {
global $settings;
if($firstrun_complete) {
http_response_code(400);
exit(page_renderer::render_main("Setup complete - Error - $settings->sitename", "<p>Oops! Looks like $settings->sitename is already setup and ready to go! Go to the <a href='?action=$settings->defaultaction&page=".rawurlencode($settings->defaultpage)."'>" . htmlentities($settings->defaultpage)."</a> to get started!</p>"));
}
// TODO: Check the environment here first
// - Make sure peppermint.json isn't accessible
// - Check for required modules?
// TODO: Add a button to skip the firstrun wizard & do your own manual setup
$result = "<h1>Welcome!</h1>
<p>Welcome to Pepperminty Wiki.</p>
<p>Fill out the below form to get your wiki up and running!</p>
<form method='post' action='?action=firstrun-complete'>
<fieldset>
<legend>Admin account details</legend>
<label for='username'>Username:</label>
<input type='text' id='username' name='username' placeholder='e.g. bob, admin' required />
<br />
<p><em>Longer is better! Aim for at least 14 characters.</em></p>
<label for='username'>Password:</label>
<input type='text' id='password' name='password' required />
<br />
<label for='username'>Repeat Password:</label>
<input type='text' id='password-again' name='password-again' required />
</fieldset>
<fieldset>
<legend>Wiki Details</legend>
<label for='wiki-name'>Wiki Name:</label>
<input type='text' id='wiki-name' name='wiki-name' placeholder=\"e.g. Bob's Rockets Compendium\" required />
<!-- FUTURE: Have a logo url box here? -->
<p><em>The location on the server's disk to store the wiki data. Relative paths are ok - the default is <code>.</code> (i.e. the current directory).</em></p>
<label for='data-dir'>Data Storage Directory:</label>
<input type='text' id='data-dir' name='data-dir' value='.' required />
</fieldset>
<input type='submit' value='Create Wiki!' />
</form>";
});
add_action("firstrun-complete", function() {
global $version, $commit;
if($firstrun_complete) {
http_response_code(400);
exit(page_renderer::render_main("Setup complete - Error - $settings->sitename", "<p>Oops! Looks like $settings->sitename is already setup and ready to go! Go to the <a href='?action=$settings->defaultaction&page=".rawurlencode($settings->defaultpage)."'>" . htmlentities($settings->defaultpage)."</a> to get started!</p>"));
}
// $_POST: username, password, password-again, wiki-name, data-dir
if(empty($_POST["username"])) {
http_response_code(422);
exit(page_renderer::render_main("Missing information - Error - Pepperminty Wiki", "<p>Oops! Looks like you forgot to enter a username. Try going back in your browser and filling one in.</p>"));
}
if(empty($_POST["password"]) || empty($_POST["password-again"])) {
http_response_code(422);
exit(page_renderer::render_main("Missing information - Error - Pepperminty Wiki", "<p>Oops! Looks like you forgot to enter a password. Try going back in your browser and filling one in.</p>"));
}
if(empty($_POST["wiki-name"])) {
http_response_code(422);
exit(page_renderer::render_main("Missing information - Error - Pepperminty Wiki", "<p>Oops! Looks like you forgot to enter a name for your wiki. Try going back in your browser and filling one in.</p>"));
}
if(empty($_POST["data-dir"])) {
http_response_code(422);
exit(page_renderer::render_main("Missing information - Error - Pepperminty Wiki", "<p>Oops! Looks like you forgot to enter a directory on the server to store the wiki's data in. Try going back in your browser and filling one in. Relative paths are ok - the default is <code>.</code> (i.e. the current directory).</p>"));
}
// ----------------------------------------------------------------
file_put_contents("._peppermint_installed", "Install complete at " . date("c") . "with Pepperminty Wiki v$version-$commit");
});
}
]);