xgit simple git

nexus

nexus

clone git clone https://kb.hax.al/nexus

index.php

1 <?php
2 require_once __DIR__ . '/includes/bootstrap.php';
3 
4 $PAGE_TITLE = cfg('site_name', 'Nexus Forum');
5 
6 $cats = DB::rows("
7     SELECT c.*,
8       (SELECT t.title FROM topics t WHERE t.category_id=c.id ORDER BY t.last_post_at DESC LIMIT 1) AS last_title,
9       (SELECT t.slug  FROM topics t WHERE t.category_id=c.id ORDER BY t.last_post_at DESC LIMIT 1) AS last_slug
10     FROM categories c WHERE c.parent_id IS NULL ORDER BY c.position, c.id
11 ");
12 
13 $recent = DB::rows("
14     SELECT t.*, u.username, u.avatar, c.name AS cat_name, c.slug AS cat_slug, c.color AS cat_color
15     FROM topics t
16     JOIN users u ON u.id = t.user_id
17     JOIN categories c ON c.id = t.category_id
18     WHERE t.archived = 0
19     ORDER BY t.last_post_at DESC LIMIT 15
20 ");
21 
22 $stats = [
23     'topics' => (int) DB::val('SELECT COUNT(*) FROM topics'),
24     'posts'  => (int) DB::val('SELECT COUNT(*) FROM posts WHERE deleted=0'),
25     'users'  => (int) DB::val('SELECT COUNT(*) FROM users'),
26     'newest' => DB::row('SELECT username FROM users ORDER BY joined_at DESC LIMIT 1'),
27 ];
28 
29 include __DIR__ . '/views/partials/layout.php';
30 ?>
31 
32 <div class="home-hero">
33   <h1><?= e(cfg('site_name','Nexus Forum')) ?></h1>
34   <p><?= e(cfg('site_desc','A community for discussion.')) ?></p>
35   <?php if (!$USER): ?>
36     <div class="hero-btns">
37       <a href="<?= u('auth/register.php') ?>" class="btn-primary btn-lg">Join the Community</a>
38       <a href="<?= u('auth/login.php') ?>" class="btn-ghost btn-lg">Log In</a>
39     </div>
40   <?php else: ?>
41     <a href="<?= u('forum/new-topic.php') ?>" class="btn-primary btn-lg">+ New Topic</a>
42   <?php endif; ?>
43 </div>
44 
45 <div class="stats-row">
46   <div class="stat"><strong><?= number_format($stats['topics']) ?></strong><span>Topics</span></div>
47   <div class="stat-div"></div>
48   <div class="stat"><strong><?= number_format($stats['posts']) ?></strong><span>Posts</span></div>
49   <div class="stat-div"></div>
50   <div class="stat"><strong><?= number_format($stats['users']) ?></strong><span>Members</span></div>
51   <?php if ($stats['newest']): ?>
52     <div class="stat-div"></div>
53     <div class="stat"><span>Newest: <a href="<?= u('users/profile.php?u=' . urlencode($stats['newest']['username'])) ?>">@<?= e($stats['newest']['username']) ?></a></span></div>
54   <?php endif; ?>
55 </div>
56 
57 <div class="home-grid">
58   <section>
59     <h2 class="sec-title">Categories</h2>
60     <?php foreach ($cats as $c): ?>
61       <a href="<?= u('forum/category.php?slug=' . urlencode($c['slug'])) ?>" class="cat-card">
62         <div class="cat-stripe" style="background:<?= e($c['color']) ?>"></div>
63         <div class="cat-icon" style="color:<?= e($c['color']) ?>"><?= e($c['icon']) ?></div>
64         <div class="cat-body">
65           <div class="cat-name"><?= e($c['name']) ?></div>
66           <div class="cat-desc"><?= e($c['description']) ?></div>
67           <div class="cat-stats"><?= $c['topic_count'] ?> topics · <?= $c['post_count'] ?> posts</div>
68         </div>
69         <div class="cat-chevron">›</div>
70       </a>
71     <?php endforeach; ?>
72     <?php if (empty($cats)): ?>
73       <p class="empty-msg">No categories yet.</p>
74     <?php endif; ?>
75   </section>
76 
77   <section>
78     <h2 class="sec-title">Latest Activity</h2>
79     <?php foreach ($recent as $t): ?>
80       <div class="topic-row">
81         <?php if ($t['avatar']): ?>
82           <img src="<?= e($t['avatar']) ?>" class="av-sm" alt="">
83         <?php else: ?>
84           <span class="av-sm av-init"><?= strtoupper($t['username'][0]) ?></span>
85         <?php endif; ?>
86         <div class="tr-body">
87           <a href="<?= u('forum/topic.php?slug=' . urlencode($t['slug'])) ?>" class="tr-title">
88             <?= e($t['title']) ?>
89           </a>
90           <div class="tr-meta">
91             <a href="<?= u('forum/category.php?slug=' . urlencode($t['cat_slug'])) ?>" class="cat-tag" style="--cc:<?= e($t['cat_color']) ?>"><?= e($t['cat_name']) ?></a>
92             by <a href="<?= u('users/profile.php?u=' . urlencode($t['username'])) ?>">@<?= e($t['username']) ?></a>
93             <span class="ago" data-ts="<?= e($t['last_post_at']) ?>"></span>
94           </div>
95         </div>
96         <div class="tr-counts">
97           <span>💬 <?= $t['reply_count'] ?></span>
98         </div>
99       </div>
100     <?php endforeach; ?>
101     <?php if (empty($recent)): ?>
102       <p class="empty-msg">No topics yet. <a href="<?= u('forum/new-topic.php') ?>">Start one!</a></p>
103     <?php endif; ?>
104   </section>
105 </div>
106 
107 <?php include __DIR__ . '/views/partials/layout_end.php'; ?>