diff options
author | Freya Murphy <freya@freyacat.org> | 2024-03-29 22:29:56 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2024-03-29 22:29:56 -0400 |
commit | 944b6b0526032ad8c1b4a2612d6723bec75e0e4c (patch) | |
tree | d3da5584df33a7878c087622b4fc2ec2883cf880 /web/routes | |
download | xssbook2-944b6b0526032ad8c1b4a2612d6723bec75e0e4c.tar.gz xssbook2-944b6b0526032ad8c1b4a2612d6723bec75e0e4c.tar.bz2 xssbook2-944b6b0526032ad8c1b4a2612d6723bec75e0e4c.zip |
start database (user and post), and initial barebones home page
Diffstat (limited to '')
-rw-r--r-- | web/routes/error/controller.php | 20 | ||||
-rw-r--r-- | web/routes/error/model.php | 31 | ||||
-rw-r--r-- | web/routes/error/views/error.php | 4 | ||||
-rw-r--r-- | web/routes/home/controller.php | 84 | ||||
-rw-r--r-- | web/routes/home/model.php | 19 | ||||
-rw-r--r-- | web/routes/home/views/main.php | 29 |
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> |