From cefe1c0325792f7215a1701dd994f1cdbc4693f6 Mon Sep 17 00:00:00 2001
From: Shish <shish@shishnet.org>
Date: Wed, 7 Nov 2018 00:08:26 +0000
Subject: [PATCH] a bunch of installer tweaks

---
 .travis.yml                      |  2 +-
 install.php => core/_install.php | 62 ++++++--------------------------
 core/util.php                    |  2 +-
 index.php                        | 22 +++++-------
 lib/shimmie.css                  | 52 ++++++++++++++++++++++++---
 5 files changed, 68 insertions(+), 72 deletions(-)
 rename install.php => core/_install.php (60%)

diff --git a/.travis.yml b/.travis.yml
index 5d4b46c0..880a0b28 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -38,7 +38,7 @@ install:
     fi
   - if [[ "$DB" == "sqlite" ]]; then echo '<?php define("DATABASE_DSN", "sqlite:shimmie.sqlite");' > data/config/auto_install.conf.php ; fi
   - composer install
-  - php install.php
+  - php index.php
 
 script:
   - vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover=data/coverage.clover
diff --git a/install.php b/core/_install.php
similarity index 60%
rename from install.php
rename to core/_install.php
index b2e7508d..d84fbbc4 100644
--- a/install.php
+++ b/core/_install.php
@@ -25,41 +25,8 @@ date_default_timezone_set('UTC');
 <html>
 	<head>
 		<title>Shimmie Installation</title>
-		<link rel="shortcut icon" href="data:image/x-icon;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREREREREREREQAAAAAAAAAAAAAAEREREREAAQEBAQEBAQEBAAARERERAAEBAQEBAQEBAQABABEREQABAQEBAQEBAQEAAQEAEREAAQEBAQEBAQEBAAEBABERAAYGBQQDAgEBAQACAQAREQAMDAwLCwoJCQcACQgAEREAEBAQEBAQDg4MAA0NABERABAQEBAQEBAQEAAQEAAREQAQEBAQEBAQEBAAEBAAEREAAAAAAAAAAAAAABAQABEREQAQEA8QEBAQEBAAEAARERERABAQEBAQEA8QEAAAEREREREAAAAAAAAAAAAAABERERERERERERERERERERER//8AAIAPAACABwAAgAMAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAwAEAAOABAADwAQAA//8AAA==" />
-		<style>
-			#installer {
-				background: #EEE;
-				font-family: "Arial", sans-serif;
-				font-size: 14px;
-				width: 512px;
-				margin: auto;
-				margin-top: 16px;
-				border: 1px solid black;
-				border-radius: 16px;
-			}
-			#installer > .container {
-				padding: 5px;
-			}
-			#installer A {
-				text-decoration: none;
-			}
-			#installer A:hover {
-				text-decoration: underline;
-			}
-			#installer H1, #installer H3 {
-				background: #DDD;
-				text-align: center;
-				margin: 0px;
-				padding: 2px;
-			}
-			#installer H1 {
-				border-bottom: 1px solid black;
-				border-radius: 16px 16px 0px 0px;
-			}
-			#installer H3 {
-				border-bottom: 1px solid black;
-			}
-		</style>
+		<link rel="shortcut icon" href="lib/static/favicon.ico">
+		<link rel="stylesheet" href="lib/shimmie.css" type="text/css">
 		<script type="text/javascript" src="lib/vendor/js/jquery-1.12.3.min.js"></script>
 	</head>
 	<body>
@@ -92,19 +59,11 @@ date_default_timezone_set('UTC');
 assert_options(ASSERT_ACTIVE, 1);
 assert_options(ASSERT_BAIL, 1);
 
-/*
- * Compute the path to the folder containing "install.php" and
- * store it as the 'Shimmie Root' folder for later on.
- *
- * Example:
- *	__SHIMMIE_ROOT__ = '/var/www/shimmie2/'
- *
- */
-define('__SHIMMIE_ROOT__', trim(rtrim(dirname(__FILE__), '/\\')) . '/');
-
 // Pull in necessary files
-require_once __SHIMMIE_ROOT__."core/exceptions.class.php";
-require_once __SHIMMIE_ROOT__."core/database.class.php";
+require_once "core/exceptions.php";
+require_once "core/cacheengine.php";
+require_once "core/dbengine.php";
+require_once "core/database.php";
 
 if(is_readable("data/config/shimmie.conf.php")) die("Shimmie is already installed.");
 
@@ -160,6 +119,7 @@ function do_install() { // {{{
 		return;
 	}
 
+	define("DEBUG_SQL", false);
 	define("DATABASE_KA", true);
 	install_process();
 } // }}}
@@ -206,8 +166,8 @@ function ask_questions() { // {{{
 	$db_p = in_array("pgsql", $drivers)  ? '<option value="pgsql">PostgreSQL</option>' : "";
 	$db_s = in_array("sqlite", $drivers) ? '<option value="sqlite">SQLite</option>' : "";
 
-	$warn_msg = $warnings ? "<h3>Warnings</h3>".implode("\n<br>", $warnings) : "";
-	$err_msg = $errors ? "<h3>Errors</h3>".implode("\n<br>", $errors) : "";
+	$warn_msg = $warnings ? "<h3>Warnings</h3>".implode("\n<p>", $warnings) : "";
+	$err_msg = $errors ? "<h3>Errors</h3>".implode("\n<p>", $errors) : "";
 
 	print <<<EOD
 		<div id="installer">
@@ -218,7 +178,7 @@ function ask_questions() { // {{{
 				$err_msg
 
 				<h3>Database Install</h3>
-				<form action="install.php" method="POST">
+				<form action="index.php" method="POST">
 					<center>
 						<table class='form'>
 							<tr>
@@ -272,7 +232,7 @@ function ask_questions() { // {{{
 				</p>
 				<p class="dbconf none">
 					Drivers can generally be downloaded with your OS package manager;
-					for Debian / Ubuntu you want php5-pgsql, php5-mysql, or php5-sqlite.
+					for Debian / Ubuntu you want php-pgsql, php-mysql, or php-sqlite.
 				</p>
 			</div>
 		</div>
diff --git a/core/util.php b/core/util.php
index d838e5ae..d611aa88 100644
--- a/core/util.php
+++ b/core/util.php
@@ -513,7 +513,7 @@ function _get_user(): User {
  * @return string|null
  */
 function _get_query() {
-	return @$_POST["q"]?:@$_GET["q"];
+	return (@$_POST["q"]?:@$_GET["q"])?:"/";
 }
 
 
diff --git a/index.php b/index.php
index 32d37921..b944e3eb 100644
--- a/index.php
+++ b/index.php
@@ -44,28 +44,19 @@
  */
 
 if(!file_exists("data/config/shimmie.conf.php")) {
-	header("Location: install.php");
+	require_once "core/_install.php";
 	exit;
 }
 
 if(!file_exists("vendor/")) {
 	//CHECK: Should we just point to install.php instead? Seems unsafe though.
 	print <<<EOD
-
 <!DOCTYPE html>
 <html>
 	<head>
 		<title>Shimmie Error</title>
-		<link rel="shortcut icon" href="data:image/x-icon;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREREREREREREQAAAAAAAAAAAAAAEREREREAAQEBAQEBAQEBAAARERERAAEBAQEBAQEBAQABABEREQABAQEBAQEBAQEAAQEAEREAAQEBAQEBAQEBAAEBABERAAYGBQQDAgEBAQACAQAREQAMDAwLCwoJCQcACQgAEREAEBAQEBAQDg4MAA0NABERABAQEBAQEBAQEAAQEAAREQAQEBAQEBAQEBAAEBAAEREAAAAAAAAAAAAAABAQABEREQAQEA8QEBAQEBAAEAARERERABAQEBAQEA8QEAAAEREREREAAAAAAAAAAAAAABERERERERERERERERERERER//8AAIAPAACABwAAgAMAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAwAEAAOABAADwAQAA//8AAA==" />
-		<style>
-			#installer { background: #EEE; font-family: "Arial", sans-serif; font-size: 14px; width: 512px; margin: auto; margin-top: 16px; border: 1px solid black; border-radius: 16px; }
-			#installer > .container { padding: 5px; }
-			#installer A { text-decoration: none; }
-			#installer A:hover { text-decoration: underline; }
-			#installer H1, #installer H3 { background: #DDD; text-align: center; margin: 0px; padding: 2px; }
-			#installer H1 { border-bottom: 1px solid black; border-radius: 16px 16px 0px 0px; }
-			#installer H3 { border-bottom: 1px solid black; }
-		</style>
+		<link rel="shortcut icon" href="lib/static/favicon.ico">
+		<link rel="stylesheet" href="lib/shimmie.css" type="text/css">
 	</head>
 	<body>
 		<div id="installer">
@@ -73,9 +64,12 @@ if(!file_exists("vendor/")) {
 			<h3>Warning: Composer vendor folder does not exist!</h3>
 			<div class="container">
 				<p>Shimmie is unable to find the composer vendor directory.<br>
-				Have you followed the composer setup instructions found in the <a href="https://github.com/shish/shimmie2#installation-development">README</a>?</>
+				Have you followed the composer setup instructions found in the
+				<a href="https://github.com/shish/shimmie2#installation-development">README</a>?</>
 
-				<p>If you are not intending to do any development with Shimmie, it is highly recommend you use one of the pre-packaged releases found on <a href="https://github.com/shish/shimmie2/releases">Github</a> instead.</p>
+				<p>If you are not intending to do any development with Shimmie,
+				it is highly recommend you use one of the pre-packaged releases
+				found on <a href="https://github.com/shish/shimmie2/releases">Github</a> instead.</p>
 			</div>
 		</div>
 	</body>
diff --git a/lib/shimmie.css b/lib/shimmie.css
index 813f87ca..e4709711 100644
--- a/lib/shimmie.css
+++ b/lib/shimmie.css
@@ -1,11 +1,12 @@
 
 ARTICLE SELECT {width: 150px;}
 INPUT, TEXTAREA {box-sizing: border-box;}
-TD>INPUT[type="button"] {width: 100%;}
-TD>INPUT[type="submit"] {width: 100%;}
-TD>INPUT[type="text"] {width: 100%;}
-TD>INPUT[type="password"] {width: 100%;}
-TD>SELECT {width: 100%;}
+TD>INPUT[type="button"],
+TD>INPUT[type="submit"],
+TD>INPUT[type="text"],
+TD>INPUT[type="password"],
+TD>INPUT[type="email"],
+TD>SELECT,
 TD>TEXTAREA {width: 100%;}
 
 TABLE.form {width: 300px;}
@@ -30,3 +31,44 @@ IMG.lazy {display: none;}
 	margin: 8px;
 	border: 1px solid #882;
 }
+
+#installer {
+	background: #EEE;
+	font-family: "Arial", sans-serif;
+	font-size: 14px;
+	width: 512px;
+	margin: auto;
+	margin-top: 16px;
+	border: 1px solid black;
+	border-radius: 16px;
+}
+#installer P {
+	padding: 5px;
+}
+#installer A {
+	text-decoration: none;
+}
+#installer A:hover {
+	text-decoration: underline;
+}
+#installer H1, #installer H3 {
+	background: #DDD;
+	text-align: center;
+	margin: 0px;
+	padding: 2px;
+}
+#installer H1 {
+	border-bottom: 1px solid black;
+	border-radius: 16px 16px 0px 0px;
+}
+#installer H3 {
+	border-bottom: 1px solid black;
+}
+#installer TH {
+	text-align: right;
+}
+#installer INPUT,
+#installer SELECT {
+	width: 100%;
+	box-sizing: border-box;
+}