xgit simple git

nexus

nexus

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

admin/topics.php


1<?php
2require_once __DIR__ . '/../includes/bootstrap.php';
3must_admin();
4$PAGE_TITLE = 'Topics';
5$ADMIN_PAGE = 'topics';
6$q    = get('q');
7$page = max(1,(int)get('page','1'));
8$pp   = 30; $off = ($page-1)*$pp;
9$like = '%'.$q.'%';
10$where = $q ? "WHERE t.title LIKE ?" : "";
11$params = $q ? [$like] : [];
12$topics = DB::rows("SELECT t.*,u.username,c.name AS cat FROM topics t JOIN users u ON u.id=t.user_id JOIN categories c ON c.id=t.category_id $where ORDER BY t.created_at DESC LIMIT $pp OFFSET $off", $params);
13$total = (int)DB::val("SELECT COUNT(*) FROM topics t $where", $params);
14$pages = max(1,(int)ceil($total/$pp));
15include __DIR__ . '/../views/partials/admin_layout.php';
16?>
17<div class="admin-toolbar">
18  <form method="GET" class="at-form">
19    <input type="text" name="q" value="<?= e($q) ?>" placeholder="Search topics…" class="fi at-fi">
20    <button type="submit" class="btn-primary">Search</button>
21    <?php if ($q): ?><a href="<?= u('admin/topics.php') ?>" class="btn-ghost">Clear</a><?php endif; ?>
22  </form>
23</div>
24<div class="acard">
25  <table class="atable">
26    <thead><tr><th>Title</th><th>Category</th><th>By</th><th>Status</th><th>Actions</th></tr></thead>
27    <tbody>
28      <?php foreach ($topics as $t): ?>
29        <tr>
30          <td><a href="<?= u('forum/topic.php?slug='.urlencode($t['slug'])) ?>" target="_blank"><?= e(mb_substr($t['title'],0,50)) ?></a></td>
31          <td><?= e($t['cat']) ?></td>
32          <td>@<?= e($t['username']) ?></td>
33          <td><?= $t['pinned']?'πŸ“Œ':'' ?><?= $t['closed']?'πŸ”’':'' ?><?= $t['archived']?'πŸ“¦':'' ?><?= (!$t['pinned']&&!$t['closed']&&!$t['archived'])?'Active':'' ?></td>
34          <td>
35            <?php foreach ([['pin','unpin','πŸ“Œ'],['close','open','πŸ”’'],['archive','unarchive','πŸ“¦']] as [$a,$b,$icon]): ?>
36              <form method="POST" action="<?= u('api/topic_action.php') ?>" style="display:inline">
37                <?= csrf_input() ?><input type="hidden" name="id" value="<?= $t['id'] ?>">
38                <input type="hidden" name="action" value="<?= $t[$a==='pin'?'pinned':($a==='close'?'closed':'archived')] ? $b : $a ?>">
39                <button class="btn-ghost btn-sm" title="<?= $a ?>"><?= $icon ?></button>
40              </form>
41            <?php endforeach; ?>
42          </td>
43        </tr>
44      <?php endforeach; ?>
45      <?php if (!$topics): ?><tr><td colspan="5" style="text-align:center;color:#6b7280;padding:2rem">No topics.</td></tr><?php endif; ?>
46    </tbody>
47  </table>
48</div>
49<?php if ($pages>1): ?>
50  <nav class="pager">
51    <?php for($i=1;$i<=$pages;$i++): ?>
52      <a href="?page=<?= $i ?>&q=<?= urlencode($q) ?>" class="pg-btn <?= $i===$page?'active':'' ?>"><?= $i ?></a>
53    <?php endfor; ?>
54  </nav>
55<?php endif; ?>
56<?php include __DIR__ . '/../views/partials/admin_layout_end.php'; ?>