diff options
Diffstat (limited to 'blog')
| -rw-r--r-- | blog/index.php | 62 | ||||
| -rw-r--r-- | blog/post.php | 78 |
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 |
