aboutsummaryrefslogtreecommitdiff
path: root/guestbook/index.php
diff options
context:
space:
mode:
authorHannah Isopod <me@bathynomus.xyz>2025-06-11 03:25:00 -0600
committerHannah Isopod <me@bathynomus.xyz>2025-06-11 03:25:00 -0600
commitb3bb0b898d3178963fefb9c0b16a00a76cf2a034 (patch)
treeeec6da7a21790183b15f31283fe3b8bcaabfaa4d /guestbook/index.php
parent5023bdef46281034c0476bc4201342a0a4cc2ae7 (diff)
total guestbook overhaul + new blog post + etc
- Added /about/pronouns/ in leiu of something like a pronouns.cc profile - New blog post about my new and improved AI opinions - Moved Stop Using Chromium to an actual blog post page - Blog posts now have previous and next buttons - New /blog/ background - Moved status.cafe widget from /blog/ to landing page - Total overhaul of guestbook: - Merged guestbook and blog comment section code - Beefed up bot protection - Added a word filter - Added a property to entries to facilitate holding comments for review and approving or denying them manually (The interface for this is somewhere else) - IP address from which a post originates is now tracked in order to IP ban malicious actors - Various new buttons - Updated /greenhouse/ - The site is now a member of the No AI Webring - a couple minor CSS fixes
Diffstat (limited to 'guestbook/index.php')
-rw-r--r--guestbook/index.php190
1 files changed, 8 insertions, 182 deletions
diff --git a/guestbook/index.php b/guestbook/index.php
index 7d85fd1..77d211e 100644
--- a/guestbook/index.php
+++ b/guestbook/index.php
@@ -10,144 +10,17 @@ error_reporting(E_ALL);
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Guestbook</title>
<link href="../style.css" rel="stylesheet" type="text/css" media="all">
+ <link href="./comments.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(); ?>
+ <?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); bg();
+ include($_SERVER['DOCUMENT_ROOT'] . '/common.php'); ?>
<h1>guestbook</h1>
<h2 id="caption">say hi!</h2>
<nav>
@@ -157,88 +30,41 @@ error_reporting(E_ALL);
$return = $_GET["return"];
?>
<form action="submit.php" method="post" autocomplete="off">
+ <textarea name="msg" placeholder="I know what you are." style="opacity: 0; position: absolute; left: -10000rem; height: 0; width: 0; overflow: clip;"></textarea>
<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>"; } ?>
+ <?php if($return) { echo("<tr><td></td><td>".$gbform_messages[$return]."</td></tr>"); }?>
<tr>
- <td colspan="2" style="text-align: center;"><input type="reset"><input type="submit" value="Post"></td>
+ <td colspan="2" style="text-align: center;"><input type="reset"><input type="submit" value="Submit"></td>
</tr>
</table>
+ <input type='text' name='entry' value='guestbook' style='display: none;' readonly>
</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; ?>
-
+ <?php include('./comments.php'); echo_comments('guestbook'); ?>
</body>
</html>