aboutsummaryrefslogtreecommitdiff
path: root/guestbook/index.php
diff options
context:
space:
mode:
authorHannah Isopod <me@bathynomus.xyz>2025-05-10 03:03:58 -0600
committerHannah Isopod <me@bathynomus.xyz>2025-05-10 03:03:58 -0600
commiteb61c1bae2ffad114e17393d91d86fb00d7ac8cd (patch)
tree4f997d73e0843dab760e5d988679a1a86b76f5da /guestbook/index.php
parent4b9500ddeedbea21f80f41dfe4149cf3bf9be4c3 (diff)
Initialer commit
Just remade the repo because I don't *need* need a comprehensive source history for my personal website and this is easier than getting filter-repo to work good
Diffstat (limited to 'guestbook/index.php')
-rw-r--r--guestbook/index.php244
1 files changed, 244 insertions, 0 deletions
diff --git a/guestbook/index.php b/guestbook/index.php
new file mode 100644
index 0000000..7d85fd1
--- /dev/null
+++ b/guestbook/index.php
@@ -0,0 +1,244 @@
+<!--?php
+ini_set('display_errors', 1);
+ini_set('display_startup_errors', 1);
+error_reporting(E_ALL);
+?-->
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Guestbook</title>
+ <link href="../style.css" rel="stylesheet" type="text/css" media="all">
+ <style>
+ table {
+ border-collapse: collapse;
+ table-layout: fixed;
+ }
+ td {
+ padding: 0.3rem;
+ }
+
+ form > table {
+ width: 100%;
+ margin: auto;
+ margin-bottom: 1.5rem;
+ }
+ form td:first-child {
+ text-align: right;
+ }
+
+ article {
+ width: 100%;
+ margin: 2rem auto;
+ display: grid;
+ gap: 1rem;
+ grid-template-areas:
+ 'gb-name gb-date gb-index'
+ 'gb-cool gb-cool gb-cool'
+ 'gb-found gb-found gb-found'
+ 'gb-message gb-message gb-message'
+ 'gb-reply gb-reply gb-reply';
+ }
+ article :is(h1,h2,h3,h4,h5,h6) {
+ border: none;
+ padding-left: initial;
+ }
+
+ input, textarea {
+ border: none;
+ font-family: var(--stdfont);
+ }
+ input[type="text"], input[type="email"], textarea {
+ width: 100%;
+ background: none;
+ border-bottom: 2px solid #444444;
+ color: gainsboro;
+ padding: 0.35rem;
+ box-sizing: border-box;
+ font-size: .9em;
+ }
+ input[type="submit"], input[type="reset"] {
+ padding: 0.35rem 0.5rem;
+ box-shadow: 2px 2px 6px black;
+ margin: 0.3rem;
+ display: inline-block;
+ }
+ input[type="submit"]:active, input[type="reset"]:active {
+ transform: translate(1px, 1px); box-shadow: 0 0 2px black;
+ }
+ input[type="submit"]:hover, input[type="reset"]:hover {
+ cursor: pointer;
+ }
+
+ hr {
+ width: 30%;
+ }
+ .error {
+ color: red;
+ font-size: 0.85em;
+ }
+ .success {
+ color: #00ff00;
+ font-size: 0.85em;
+ }
+ .reply {
+ border-left: 3px solid gainsboro;
+ padding-left: 1rem;
+ }
+ .message {
+ padding-top: 1.5rem;
+ }
+ .gb-date {
+ text-align: center;
+ }
+ .gb-index {
+ text-align: right;
+ }
+ .gb-cool {
+ word-break: break-all;
+ }
+ .gb-name, .gb-date, .gb-index {
+ min-width: calc(var(--bodywidth) / 3);
+ }
+ @media only screen and (hover: none) {
+ form td:first-child {
+ text-align: left;
+ }
+ form td:nth-child(2) {
+ padding-left: 0;
+ padding-right: 0;
+ }
+ input[type="text"], input[type="email"], textarea {
+ background: none;
+ border: 2px solid #00000033;
+ border-bottom: 2px solid #888888;
+ }
+ article {
+ margin: 2rem auto;
+ }
+ @media (max-width: 43rem) {
+ article {
+ grid-template-areas:
+ 'gb-name gb-name gb-index'
+ 'gb-date gb-date gb-date'
+ 'gb-cool gb-cool gb-cool'
+ 'gb-found gb-found gb-found'
+ 'gb-message gb-message gb-message'
+ 'gb-reply gb-reply gb-reply';
+ }
+ }
+ }
+ @media (prefers-contrast: more) {
+ input[type="text"], input[type="email"], textarea {
+ outline: 1px solid white;
+ color: white;
+ }
+ input:focus, textarea:focus {
+ outline: 3px solid white;
+ }
+ input[type="submit"] {
+ background: none;
+ color: white;
+ outline: 1px solid white;
+ }
+ }
+ </style>
+ <?php include($_SERVER['DOCUMENT_ROOT'] . '/seasonal.php'); ?>
+ </head>
+ <body>
+ <?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); bg(); ?>
+ <h1>guestbook</h1>
+ <h2 id="caption">say hi!</h2>
+ <nav>
+ <a href="feed.php">RSS</a>
+ </nav>
+ <?php
+ $return = $_GET["return"];
+ ?>
+ <form action="submit.php" method="post" autocomplete="off">
+ <table>
+
+ <?php if($return == "noname") { echo "<td></td><td><span class='error'>Name required!</span></td>"; } ?>
+ <tr>
+ <td>Name<span style="color:red;">*</span></td>
+ <td><input type="text" name="name"></td>
+ </tr>
+
+ <?php if($return == "invalidwebsite") { echo "<td></td><td><span class='error'>Invalid URL!</span></td>"; } ?>
+ <tr>
+ <td>Website</td>
+ <td><input type="text" name="website" placeholder="https://"></td>
+ </tr>
+
+ <?php if($return == "invalidlink") { echo "<td></td><td><span class='error'>Invalid URL!</span></td>"; } ?>
+ <tr>
+ <td>Link something cool</td>
+ <td><input type="text" name="cool" placeholder="https://"></td>
+ </tr>
+
+ <tr>
+ <td>How did you find me?</td>
+ <td><textarea name="found"></textarea></td>
+ </tr>
+
+ <?php if($return == "nomessage") { echo "<td></td><td><span class='error'>Message required!</span></td>"; } ?>
+ <tr>
+ <td>Message<span style="color:red;">*</span></td>
+ <td><textarea name="message" placeholder="Now supports Markdown!"></textarea></td>
+ </tr>
+
+ <?php if($return == "botcheckfailed") { echo "<td></td><td><span class='error'>You failed the bot check!</span></td>"; } ?>
+ <tr>
+ <td>Bot test (six-letter scientific term for a roly-poly or woodlouse)<span style="color:red;">*</span></td>
+ <td><input type="text" name="botcheck" placeholder="*.cool"></td>
+ </tr>
+
+ <?php if($return == "success") { echo "<td></td><td><span class='success'>Successfully posted!</span></td>"; } ?>
+ <tr>
+ <td colspan="2" style="text-align: center;"><input type="reset"><input type="submit" value="Post"></td>
+ </tr>
+
+ </table>
+ </form>
+ <?php
+ include("../Parsedown.php");
+ $Parsedown = new Parsedown();
+ $Parsedown->setSafeMode(true);
+
+ $totaloutput = "";
+ $postlist = json_decode(file_get_contents("posts.json"));
+ $index = 1;
+ foreach($postlist as $post) {
+ $output = "";
+ $date = date("Y-m-d h:iA", $post->date);
+ $name = $post->name;
+ $message = $Parsedown->text(html_entity_decode($post->message));
+ $found = $post->found;
+ $website = $post->website;
+ $cool = $post->cool;
+ $coolsanitized = htmlentities(preg_replace("/https?:\/\//i", "", $cool));
+ $reply = $Parsedown->text($post->reply);
+
+ $output = $output."<hr><article><div style='grid-area:gb-name;' class='gb-name'>";
+ if($website) { $output = $output."<a href='$website'>$name</a>"; }
+ else { $output = $output.$name; }
+ $output = $output."</div><div style='grid-area:gb-date;' class='gb-date'>$date</div><div style='grid-area:gb-index;' class='gb-index'>Entry #$index</div>";
+ if($cool) {
+ $output = $output."<div style='grid-area:gb-cool;' class='gb-cool'><b>cool thing</b>: <a href='$cool'>$coolsanitized</a></div>";
+ }
+ if($found) {
+ $output = $output."<div style='grid-area:gb-found;'><b>How did you find me?</b><br>$found</div>";
+ }
+ $output = $output."<div style='grid-area:gb-message;'>$message</div>";
+ if($reply) {
+ $output = $output."<div style='grid-area:gb-reply;' class='reply'><b>Reply</b>:<br>$reply</div>";
+ }
+ $output = $output."</article>";
+ $index++;
+ $totaloutput = $output.$totaloutput;
+ }
+ echo $totaloutput; ?>
+
+ </body>
+</html>