summaryrefslogtreecommitdiff
path: root/blog
diff options
context:
space:
mode:
Diffstat (limited to 'blog')
-rw-r--r--blog/index.php62
-rw-r--r--blog/post.php78
2 files changed, 140 insertions, 0 deletions
diff --git a/blog/index.php b/blog/index.php
new file mode 100644
index 0000000..773cc6f
--- /dev/null
+++ b/blog/index.php
@@ -0,0 +1,62 @@
+<?php
+include_once $_SERVER['DOCUMENT_ROOT'] . '/lib/time.php';
+include_once $_SERVER['DOCUMENT_ROOT'] . '/lib/post.php';
+
+$post_id = null;
+$url = parse_url($_SERVER['REQUEST_URI']);
+if (strlen($url['path']) > 1) {
+ $post_id = explode("/", substr($url['path'], 1), 2);
+ $post_id = $post_id[count($post_id) - 1];
+}
+
+if ($post_id) {
+ $post = read_post(urldecode($post_id));
+ if (!$post) {
+ http_response_code(404);
+ exit("Post not found");
+ }
+} else {
+ $posts = get_posts();
+}
+?>
+<!DOCTYPE html>
+<html>
+
+<head>
+ <title>blog - ilt.su</title>
+ <meta name="description" content="my blog.">
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+ <link rel="stylesheet" href="/static/style.css">
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+ <meta name="robots" content="noindex, nofollow">
+</head>
+
+<body>
+ <main>
+ <p><a href="/">ilt.su</a> - <a href="/blog/">blog</a></p>
+ <?php if (isset($post)): ?>
+ <h1><?= $post['name'] ?? '<i>No title.</i>' ?></h1>
+ <div>
+ <?= $post['contents'] ?? '<i>No contents.</i>' ?>
+ </div>
+ <p><i>Posted <?= format_timestamp(time() - $post['time']) ?> ago</i></p>
+ <?php endif; ?>
+
+ <?php if (isset($posts)): ?>
+ <h1>Blog</h1>
+ <ul>
+ <?php foreach ($posts as $s): ?>
+ <li><a href="/blog/<?= urlencode($s['name']) ?>"><?= $s['name'] ?></a>
+ <i><?= format_timestamp(time() - $s['time']) ?>
+ ago</i>
+ </li>
+ <?php endforeach; ?>
+ <?php if (empty($posts)): ?>
+ <i>No posts yet.</i>
+ <?php endif; ?>
+ </ul>
+ <?php endif; ?>
+ </main>
+</body>
+
+</html> \ No newline at end of file
diff --git a/blog/post.php b/blog/post.php
new file mode 100644
index 0000000..90dc9ee
--- /dev/null
+++ b/blog/post.php
@@ -0,0 +1,78 @@
+<?php
+include_once $_SERVER['DOCUMENT_ROOT'] . '/lib/time.php';
+
+function str_safe(string $s, int|null $max_length, bool $remove_new_lines = true): string
+{
+ $output = $s;
+
+ if ($remove_new_lines) {
+ $output = str_replace(PHP_EOL, "", $output);
+ }
+
+ $output = htmlspecialchars($output);
+ $output = strip_tags($output);
+
+ if ($max_length) {
+ $output = substr($output, 0, $max_length);
+ }
+
+ $output = trim($output);
+
+ return $output;
+}
+
+if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ $title = basename(str_safe($_POST['title'], 500, true) ?: null);
+ $contents = $_POST['contents'] ?: null;
+ $path = "{$_SERVER['DOCUMENT_ROOT']}/postsources";
+
+ if (!is_dir($path) && !mkdir($path, 0777, true)) {
+ http_response_code(500);
+ exit("Failed to create a directory for blog posts!");
+ }
+
+ if (!file_put_contents("$path/$title.txt", $contents)) {
+ http_response_code(500);
+ exit("Failed to save the blog post!");
+ }
+
+ header("Location: /blog/" . urlencode($title));
+ exit;
+}
+?>
+<!DOCTYPE html>
+<html>
+
+<head>
+ <title>new post - ilt.su</title>
+ <meta name="description" content="my blog.">
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+ <link rel="stylesheet" href="/static/style.css">
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+ <meta name="robots" content="noindex, nofollow">
+</head>
+
+<body>
+ <main>
+ <p><a href="/">ilt.su</a> - <a href="/blog/">blog</a></p>
+ <h1>post a new status</h1>
+ <form action="/blog/post.php" method="post">
+ <table>
+ <tr>
+ <th>title:</th>
+ <td><input type="text" name="title" required></td>
+ </tr>
+ <tr>
+ <th>contents:</th>
+ <td><textarea name="contents" placeholder="Can be empty"></textarea></td>
+ </tr>
+ <tr>
+ <th></th>
+ <td><button type="submit">post</button></td>
+ </tr>
+ </table>
+ </form>
+ </main>
+</body>
+
+</html> \ No newline at end of file