- initial

This commit is contained in:
Ty Clifford
2026-04-24 08:41:52 -04:00
commit b57091e4ad
49 changed files with 7371 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
<?php
$adminTitle = 'Reviews';
include __DIR__.'/admin_header.php';
if (isPost()) {
csrfCheck();
$act = p('_act');
if ($act === 'approve') { qrun("UPDATE reviews SET is_approved=1 WHERE id=?",[(int)p('id')]); flash('Review approved.','success'); }
if ($act === 'hide') { qrun("UPDATE reviews SET is_approved=0 WHERE id=?",[(int)p('id')]); flash('Review hidden.','success'); }
if ($act === 'delete') { qrun("DELETE FROM reviews WHERE id=?",[(int)p('id')]); flash('Review deleted.','success'); }
go('/admin/reviews.php');
}
$page = max(1,iget('page')); $perPage = 30;
$total = (int)qval("SELECT COUNT(*) FROM reviews");
$pages = max(1,(int)ceil($total/$perPage));
$page = min($page,$pages);
$offset = ($page-1)*$perPage;
$reviews = qall("SELECT r.*,u.username,b.name biz_name,b.slug biz_slug FROM reviews r JOIN users u ON u.id=r.user_id JOIN businesses b ON b.id=r.business_id ORDER BY r.created_at DESC LIMIT $perPage OFFSET $offset");
?>
<?php adminTitle('Manage Reviews','Approve, hide, or delete user reviews.') ?>
<div class="tbl-wrap">
<table class="dtbl">
<thead><tr><th>BUSINESS</th><th>USER</th><th>RATING</th><th>TITLE</th><th>STATUS</th><th>DATE</th><th>ACTIONS</th></tr></thead>
<tbody>
<?php foreach($reviews as $r): ?>
<tr>
<td><a href="/business.php?slug=<?=e($r['biz_slug'])?>" target="_blank" class="td-name"><?=e($r['biz_name'])?></a></td>
<td><?=e($r['username'])?></td>
<td><?=starDisplay((float)$r['rating'])?></td>
<td style="font-size:.82rem;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap"><?=e($r['title']?:$r['body'])?></td>
<td><?=$r['is_approved']?'<span class="badge badge-green">Visible</span>':'<span class="badge badge-gray">Hidden</span>'?></td>
<td style="font-size:.8rem"><?=ago($r['created_at'])?></td>
<td>
<div class="flex-row" style="gap:.3rem">
<?php if(!$r['is_approved']): ?><form method="POST" style="display:inline"><?=csrfField()?><input type="hidden" name="_act" value="approve"><input type="hidden" name="id" value="<?=$r['id']?>"><button class="btn btn-xs btn-success">Approve</button></form>
<?php else: ?><form method="POST" style="display:inline"><?=csrfField()?><input type="hidden" name="_act" value="hide"><input type="hidden" name="id" value="<?=$r['id']?>"><button class="btn btn-xs btn-secondary">Hide</button></form><?php endif; ?>
<form method="POST" style="display:inline"><?=csrfField()?><input type="hidden" name="_act" value="delete"><input type="hidden" name="id" value="<?=$r['id']?>"><button class="btn btn-xs btn-danger" data-confirm="Delete this review?">🗑️</button></form>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php if($pages>1): ?>
<div style="display:flex;gap:.5rem;margin-top:1rem;flex-wrap:wrap"><?php for($i=1;$i<=$pages;$i++): ?><a href="?page=<?=$i?>" class="btn btn-sm<?=$i===$page?' btn-primary':' btn-outline'?>"><?=$i?></a><?php endfor; ?></div>
<?php endif; ?>
<?php include __DIR__.'/admin_footer.php'; ?>