summaryrefslogtreecommitdiff
path: root/web/routes
diff options
context:
space:
mode:
Diffstat (limited to 'web/routes')
-rw-r--r--web/routes/error/controller.php20
-rw-r--r--web/routes/error/model.php31
-rw-r--r--web/routes/error/views/error.php4
-rw-r--r--web/routes/home/controller.php84
-rw-r--r--web/routes/home/model.php19
-rw-r--r--web/routes/home/views/main.php29
6 files changed, 187 insertions, 0 deletions
diff --git a/web/routes/error/controller.php b/web/routes/error/controller.php
new file mode 100644
index 0000000..3cb2345
--- /dev/null
+++ b/web/routes/error/controller.php
@@ -0,0 +1,20 @@
+<?php /* Copyright (c) 2024 Freya Murphy */
+class ErrorController extends Controller {
+
+ private $model;
+
+ function __construct($model) {
+ parent::__construct();
+ $this->model = $model;
+ }
+
+ public function index() {
+ parent::index();
+ $data = $this->model->get_data();
+ $this->view('header', $data);
+ $this->app_view('error', $data);
+ }
+
+}
+
+?>
diff --git a/web/routes/error/model.php b/web/routes/error/model.php
new file mode 100644
index 0000000..a30fccc
--- /dev/null
+++ b/web/routes/error/model.php
@@ -0,0 +1,31 @@
+<?php /* Copyright (c) 2024 Freya Murphy */
+class ErrorModel extends Model {
+
+ private function get_msg(&$data) {
+ if (!array_key_exists('code', $_GET)) {
+ $data['msg'] = lang('error');
+ $data['title'] = '500';
+ } else {
+ $code = $_GET['code'];
+ $data['title'] = $code;
+ switch ($code) {
+ case '404':
+ $data['msg'] = lang('error_404');
+ break;
+ case '500':
+ $data['msg'] = lang('error_500');
+ break;
+ default:
+ $data['msg'] = lang('error');
+ break;
+ }
+ }
+ }
+
+ public function get_data() {
+ $data = parent::get_data();
+ $this->get_msg($data);
+ return $data;
+ }
+}
+?>
diff --git a/web/routes/error/views/error.php b/web/routes/error/views/error.php
new file mode 100644
index 0000000..3b926bc
--- /dev/null
+++ b/web/routes/error/views/error.php
@@ -0,0 +1,4 @@
+<div id="error">
+ <h1><?=$title?></h1>
+ <span><?=$msg?></span>
+</div>
diff --git a/web/routes/home/controller.php b/web/routes/home/controller.php
new file mode 100644
index 0000000..775e43a
--- /dev/null
+++ b/web/routes/home/controller.php
@@ -0,0 +1,84 @@
+<?php /* Copyright (c) 2024 Freya Murphy */
+class HomeController extends Controller {
+
+ private $model;
+
+ function __construct($model) {
+ parent::__construct();
+ $this->model = $model;
+ }
+
+ public function index() {
+ parent::index();
+ $data = $this->model->get_data();
+ $this->view('header', $data);
+ $this->app_view('main', $data);
+ }
+
+ public function posts() {
+ $page = $this->main->get_num('page', 0);
+ $page_size = 20;
+ $offset = $page * $page_size;
+
+ $user = $this->main->user();
+
+ $query = $this->db;
+
+ if ($user) {
+ $query = $query->select('p.*, l.post_id IS NOT NULL as liked');
+ } else {
+ $query = $query->select('p.*, FALSE as liked');
+ }
+
+ $query = $query->from('admin.post p');
+
+ if ($user) {
+ $query = $query->join('admin.like l', 'p.id = l.post_id')
+ ->where('l.user_id')->eq($user['id'])
+ ->or()->where('l.user_id IS NULL');
+ }
+
+ $posts = $query->limit($page_size)
+ ->offset($offset)
+ ->rows();
+
+ $users = $this->main->get_users($posts);
+
+ foreach ($posts as $post) {
+ $data = array();
+ $data['user'] = $users[$post['user_id']];
+ $data['post'] = $post;
+ $this->view('template/post', $data);
+ }
+ }
+
+ public function comments() {
+ $page = $this->main->get_num('page', 0);
+ $id = $this->main->get_num('id');
+ $page_size = 20;
+ $offset = $page * $page_size;
+
+ $comments = $this->db
+ ->select('*')
+ ->from('admin.comment')
+ ->limit($page_size)
+ ->offset($offset)
+ ->rows();
+
+ $users = $this->main->get_users($comments);
+
+ foreach ($comments as $comment) {
+ $data = array();
+ $data['user'] = $users[$comment['user_id']];
+ $data['comment'] = $comment;
+ $this->view('template/comment', $data);
+ }
+ }
+
+ public function new_post_modal() {
+ $this->modal(lang('new_post_modal_title'), 'new-post');
+ }
+
+}
+
+?>
diff --git a/web/routes/home/model.php b/web/routes/home/model.php
new file mode 100644
index 0000000..44a8549
--- /dev/null
+++ b/web/routes/home/model.php
@@ -0,0 +1,19 @@
+<?php /* Copyright (c) 2024 Freya Murphy */
+class HomeModel extends Model {
+
+ private function get_posts() {
+ return $this->db
+ ->select('*')
+ ->from('admin.post')
+ ->limit(20)
+ ->rows();
+ }
+
+ public function get_data() {
+ $data = parent::get_data();
+ $data['title'] = lang('title');
+ $data['posts'] = $this->get_posts();
+ return $data;
+ }
+}
+?>
diff --git a/web/routes/home/views/main.php b/web/routes/home/views/main.php
new file mode 100644
index 0000000..bf0087b
--- /dev/null
+++ b/web/routes/home/views/main.php
@@ -0,0 +1,29 @@
+<?php // vi: syntax=php ?>
+<div id="main-content">
+<?php if ($self): ?>
+ <div id="new-post" class="card">
+ <div class="row grow">
+ <?php $this->view('template/pfp', array('user' => $self))?>
+ <a
+ id="action-new-post"
+ class="input btn-fake ml"
+ autocomplete="off"
+ aria-label="<?=lang('action_new_post_tip')?>"
+ >
+ <?=lang('action_new_post_text', sub: [$self['first_name']])?>
+ </a>
+ </div>
+ <script>
+ $('#action-new-post').on('click', function() {
+ $.get( "/home/new_post_modal", function (data) {
+ $(document.body).append(data);
+ });
+ })
+ </script>
+ </div>
+<?php endif; ?>
+ <div id="post-container">
+ <?=$this->posts()?>
+ </div>
+ <?=ilang('action_load_posts', id: 'action-load-posts', class: 'btn btn-line')?>
+</div>