1<?php
2require_once __DIR__ . '/../includes/bootstrap.php';
3
4$slug = get('slug');
5$cat = DB::row('SELECT * FROM categories WHERE slug=?', [$slug]);
6if (!$cat) render_404();
7if (!can_read_category($cat)) render_403();
8
9$page = max(1, (int)get('page','1'));
10$pp = (int)cfg('topics_per_page','30');
11$off = ($page - 1) * $pp;
12
13$topics = DB::rows("
14 SELECT t.*, u.username, u.avatar,
15 (SELECT u2.username FROM posts p2 JOIN users u2 ON u2.id=p2.user_id
16 WHERE p2.topic_id=t.id ORDER BY p2.created_at DESC LIMIT 1) AS last_poster,
17 (SELECT COUNT(*)-1 FROM posts p WHERE p.topic_id=t.id AND p.deleted=0) AS replies
18 FROM topics t JOIN users u ON u.id=t.user_id
19 WHERE t.category_id=? AND t.archived=0
20 ORDER BY t.pinned DESC, t.last_post_at DESC
21 LIMIT ? OFFSET ?
22", [$cat['id'], $pp, $off]);
23
24$total = (int) DB::val('SELECT COUNT(*) FROM topics WHERE category_id=? AND archived=0', [$cat['id']]);
25$pages = max(1, (int)ceil($total / $pp));
26$subs = DB::rows('SELECT * FROM categories WHERE parent_id=? ORDER BY position', [$cat['id']]);
27
28$PAGE_TITLE = $cat['name'];
29include __DIR__ . '/../views/partials/layout.php';
30?>
31<nav class="bc"><a href="<?= u('/') ?>">Home</a> โบ <span><?= e($cat['name']) ?></span></nav>
32
33<div class="cat-hdr" style="border-left:4px solid <?= e($cat['color']) ?>">
34 <span class="cat-hdr-icon"><?= e($cat['icon']) ?></span>
35 <div>
36 <h1><?= e($cat['name']) ?></h1>
37 <p><?= e($cat['description']) ?></p>
38 <div class="cat-hdr-meta"><?= $total ?> topics ยท <?= $cat['post_count'] ?> posts</div>
39 </div>
40 <?php if ($USER): ?>
41 <a href="<?= u('forum/new-topic.php?cat=' . $cat['id']) ?>" class="btn-primary">+ New Topic</a>
42 <?php endif; ?>
43</div>
44
45<?php if ($subs): ?>
46 <div class="subcats">
47 <?php foreach ($subs as $s): ?>
48 <a href="<?= u('forum/category.php?slug=' . urlencode($s['slug'])) ?>" class="subcat" style="border-color:<?= e($s['color']) ?>"><?= e($s['icon']) ?> <?= e($s['name']) ?></a>
49 <?php endforeach; ?>
50 </div>
51<?php endif; ?>
52
53<div class="topic-list">
54 <div class="tl-hdr"><span>Topic</span><span class="tl-r">Replies</span><span class="tl-r">Views</span><span class="tl-r">Activity</span></div>
55 <?php foreach ($topics as $t): ?>
56 <div class="tl-row <?= $t['pinned'] ? 'is-pinned' : '' ?>">
57 <div class="tl-main">
58 <?php if ($t['avatar']): ?>
59 <img src="<?= e($t['avatar']) ?>" class="av-sm" alt="">
60 <?php else: ?>
61 <span class="av-sm av-init"><?= strtoupper($t['username'][0]) ?></span>
62 <?php endif; ?>
63 <div>
64 <div class="tl-title">
65 <?php if ($t['pinned']): ?><span title="Pinned">๐</span><?php endif; ?>
66 <?php if ($t['closed']): ?><span title="Closed">๐</span><?php endif; ?>
67 <a href="<?= u('forum/topic.php?slug=' . urlencode($t['slug'])) ?>"><?= e($t['title']) ?></a>
68 </div>
69 <div class="tl-meta">
70 by <a href="<?= u('users/profile.php?u=' . urlencode($t['username'])) ?>">@<?= e($t['username']) ?></a>
71 <?php if ($t['last_poster'] && $t['last_poster'] !== $t['username']): ?>
72 ยท last by @<?= e($t['last_poster']) ?>
73 <?php endif; ?>
74 </div>
75 </div>
76 </div>
77 <div class="tl-r"><?= max(0,(int)$t['replies']) ?></div>
78 <div class="tl-r"><?= $t['views'] ?></div>
79 <div class="tl-r"><span class="ago" data-ts="<?= e($t['last_post_at']) ?>"></span></div>
80 </div>
81 <?php endforeach; ?>
82 <?php if (empty($topics)): ?>
83 <div class="empty-state">
84 <p>No topics yet.</p>
85 <?php if ($USER): ?>
86 <a href="<?= u('forum/new-topic.php?cat=' . $cat['id']) ?>" class="btn-primary">Start the first one!</a>
87 <?php endif; ?>
88 </div>
89 <?php endif; ?>
90</div>
91
92<?php if ($pages > 1): ?>
93 <nav class="pager">
94 <?php if ($page > 1): ?><a href="?slug=<?= urlencode($slug) ?>&page=<?= $page-1 ?>" class="pg-btn">โ Prev</a><?php endif; ?>
95 <?php for ($i=max(1,$page-2); $i<=min($pages,$page+2); $i++): ?>
96 <a href="?slug=<?= urlencode($slug) ?>&page=<?= $i ?>" class="pg-btn <?= $i===$page?'active':'' ?>"><?= $i ?></a>
97 <?php endfor; ?>
98 <?php if ($page < $pages): ?><a href="?slug=<?= urlencode($slug) ?>&page=<?= $page+1 ?>" class="pg-btn">Next โ</a><?php endif; ?>
99 </nav>
100<?php endif; ?>
101
102<?php include __DIR__ . '/../views/partials/layout_end.php'; ?>