150 lines
7.3 KiB
PHP
150 lines
7.3 KiB
PHP
<?php
|
|
$adminTitle = 'Assign Business Owners';
|
|
include __DIR__.'/admin_header.php';
|
|
|
|
if (isPost()) {
|
|
csrfCheck();
|
|
$act = p('_act');
|
|
if ($act === 'assign') {
|
|
$uid = (int)p('user_id'); $bid = (int)p('business_id');
|
|
if ($uid && $bid) {
|
|
qrun("INSERT OR IGNORE INTO business_owners(user_id,business_id)VALUES(?,?)",[$uid,$bid]);
|
|
flash('Owner assigned!','success');
|
|
}
|
|
}
|
|
if ($act === 'remove') {
|
|
qrun("DELETE FROM business_owners WHERE user_id=? AND business_id=?",[(int)p('user_id'),(int)p('business_id')]);
|
|
flash('Owner removed.','success');
|
|
}
|
|
if ($act === 'approve_claim') {
|
|
$claimId = (int)p('claim_id');
|
|
$claim = qone("SELECT * FROM business_claim_requests WHERE id=? AND status='pending'", [$claimId]);
|
|
if ($claim) {
|
|
qrun("INSERT OR IGNORE INTO business_owners(user_id,business_id)VALUES(?,?)", [(int)$claim['user_id'], (int)$claim['business_id']]);
|
|
qrun("UPDATE business_claim_requests SET status='approved', reviewed_at=datetime('now') WHERE id=?", [$claimId]);
|
|
flash('Business claim approved and owner assigned.', 'success');
|
|
}
|
|
go('/admin/owners.php#claims');
|
|
}
|
|
if ($act === 'reject_claim') {
|
|
$claimId = (int)p('claim_id');
|
|
qrun("UPDATE business_claim_requests SET status='rejected', admin_notes=?, reviewed_at=datetime('now') WHERE id=? AND status='pending'",
|
|
[ps('admin_notes'), $claimId]);
|
|
flash('Business claim rejected.', 'info');
|
|
go('/admin/owners.php#claims');
|
|
}
|
|
go('/admin/owners.php'.($_GET?'?'.http_build_query($_GET):''));
|
|
}
|
|
|
|
$filterUser = iget('user_id');
|
|
$filterBiz = iget('business_id');
|
|
$users = qall("SELECT id,username FROM users WHERE is_active=1 ORDER BY username");
|
|
$bizs = qall("SELECT id,name FROM businesses WHERE is_active=1 ORDER BY name");
|
|
$owners = qall("SELECT bo.*,u.username,b.name biz_name FROM business_owners bo JOIN users u ON u.id=bo.user_id JOIN businesses b ON b.id=bo.business_id ORDER BY b.name,u.username");
|
|
$claims = qall("
|
|
SELECT bcr.*, u.username, u.email, b.name biz_name, b.slug biz_slug
|
|
FROM business_claim_requests bcr
|
|
JOIN users u ON u.id=bcr.user_id
|
|
JOIN businesses b ON b.id=bcr.business_id
|
|
WHERE bcr.status='pending'
|
|
ORDER BY bcr.created_at DESC
|
|
");
|
|
?>
|
|
<?php adminTitle('Assign Business Owners','Link user accounts to businesses so they can manage listings, post alerts, and update menus.') ?>
|
|
|
|
<div id="claims" class="admin-sec-title">PENDING BUSINESS CLAIMS (<?=count($claims)?>)</div>
|
|
<?php if($claims): ?>
|
|
<div class="tbl-wrap" style="margin-bottom:2rem">
|
|
<table class="dtbl">
|
|
<thead><tr><th>BUSINESS</th><th>REQUESTED BY</th><th>CONTACT PHONE</th><th>PENDING EDITS</th><th>SUBMITTED</th><th>ACTIONS</th></tr></thead>
|
|
<tbody>
|
|
<?php foreach($claims as $claim): ?>
|
|
<?php $editCount = (int)qval("SELECT COUNT(*) FROM business_edit_requests WHERE business_id=? AND user_id=? AND status='pending'", [$claim['business_id'], $claim['user_id']]); ?>
|
|
<tr>
|
|
<td><a href="/business.php?slug=<?=e($claim['biz_slug'])?>" target="_blank" class="td-name"><?=e($claim['biz_name'])?></a></td>
|
|
<td>
|
|
<div class="td-name"><?=e($claim['username'])?></div>
|
|
<?php if($claim['email']): ?><div style="font-size:.76rem;color:var(--text-d)"><?=e($claim['email'])?></div><?php endif; ?>
|
|
</td>
|
|
<td style="color:var(--text)"><?=e($claim['contact_phone'])?></td>
|
|
<td>
|
|
<?php if($editCount): ?>
|
|
<a href="/admin/biz_edits.php?biz_id=<?=$claim['business_id']?>" class="badge badge-gold"><?=$editCount?> edit<?=$editCount!==1?'s':''?></a>
|
|
<?php else: ?>
|
|
<span style="color:var(--text-d)">None</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td style="font-size:.78rem;color:var(--text-d)"><?=ago($claim['created_at'] ?? '')?></td>
|
|
<td>
|
|
<div class="flex-row" style="gap:.35rem">
|
|
<form method="POST" style="display:inline">
|
|
<?=csrfField()?>
|
|
<input type="hidden" name="_act" value="approve_claim">
|
|
<input type="hidden" name="claim_id" value="<?=$claim['id']?>">
|
|
<button class="btn btn-xs btn-success" data-confirm="Approve this claim and assign <?=e($claim['username'])?> as owner of <?=e($claim['biz_name'])?>?">Approve</button>
|
|
</form>
|
|
<form method="POST" style="display:flex;gap:.35rem;align-items:center">
|
|
<?=csrfField()?>
|
|
<input type="hidden" name="_act" value="reject_claim">
|
|
<input type="hidden" name="claim_id" value="<?=$claim['id']?>">
|
|
<input type="text" name="admin_notes" class="finput" style="width:150px;font-size:.75rem;padding:.25rem .45rem" placeholder="Reason">
|
|
<button class="btn btn-xs btn-danger">Reject</button>
|
|
</form>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php else: ?>
|
|
<div class="empty" style="padding:1.75rem;margin-bottom:2rem"><div class="empty-ico">🔑</div><h3>No pending business claims</h3></div>
|
|
<?php endif; ?>
|
|
|
|
<div class="ibox" style="border-color:var(--gold-d);margin-bottom:2rem">
|
|
<div class="ibox-title">🔑 ASSIGN OWNER TO BUSINESS</div>
|
|
<form method="POST">
|
|
<?=csrfField()?><input type="hidden" name="_act" value="assign">
|
|
<div class="form-row">
|
|
<div class="fg">
|
|
<label class="flabel">USER</label>
|
|
<select name="user_id" class="fselect" required>
|
|
<option value="">— Select user —</option>
|
|
<?php foreach($users as $u): ?><option value="<?=$u['id']?>"<?=$filterUser===$u['id']?' selected':''?>><?=e($u['username'])?></option><?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
<div class="fg">
|
|
<label class="flabel">BUSINESS</label>
|
|
<select name="business_id" class="fselect" required>
|
|
<option value="">— Select business —</option>
|
|
<?php foreach($bizs as $b): ?><option value="<?=$b['id']?>"<?=$filterBiz===$b['id']?' selected':''?>><?=e($b['name'])?></option><?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary btn-sm">Assign Owner</button>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="admin-sec-title">CURRENT OWNER ASSIGNMENTS (<?=count($owners)?>)</div>
|
|
<?php if($owners): ?>
|
|
<div class="tbl-wrap">
|
|
<table class="dtbl">
|
|
<thead><tr><th>BUSINESS</th><th>OWNER / USER</th><th></th></tr></thead>
|
|
<tbody>
|
|
<?php foreach($owners as $o): ?>
|
|
<tr>
|
|
<td class="td-name"><a href="/business.php?slug=<?=e(qval("SELECT slug FROM businesses WHERE id=?",[$o['business_id']]))?>" target="_blank"><?=e($o['biz_name'])?></a></td>
|
|
<td><?=e($o['username'])?></td>
|
|
<td>
|
|
<form method="POST" style="display:inline"><?=csrfField()?><input type="hidden" name="_act" value="remove"><input type="hidden" name="user_id" value="<?=$o['user_id']?>"><input type="hidden" name="business_id" value="<?=$o['business_id']?>"><button class="btn btn-xs btn-danger" data-confirm="Remove <?=e($o['username'])?> as owner of <?=e($o['biz_name'])?>?">Remove</button></form>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php else: ?>
|
|
<div class="empty" style="padding:2rem"><div class="empty-ico">🔑</div><h3>No owner assignments yet</h3></div>
|
|
<?php endif; ?>
|
|
<?php include __DIR__.'/admin_footer.php'; ?>
|