'Description', 'address' => 'Address', 'phone' => 'Phone', 'email' => 'Email', 'website' => 'Website', 'video_url' => 'Video URL', 'hours' => 'Hours of Operation', 'is_active' => 'Listing Status (Open/Closed)', ]; // ── POST: approve / reject individual or all ───────────── if (isPost()) { csrfCheck(); $act = p('_act'); // Approve single field change if ($act === 'approve') { $reqId = (int)p('req_id'); $req = qone("SELECT * FROM business_edit_requests WHERE id=?", [$reqId]); if ($req && $req['status'] === 'pending') { $field = $req['field']; $val = $req['new_value']; // Validate field is one we allow if (array_key_exists($field, $fieldLabels)) { if ($field === 'is_active') { qrun("UPDATE businesses SET is_active=? WHERE id=?", [(int)$val, $req['business_id']]); } elseif ($field === 'hours') { // Validate JSON before applying $decoded = json_decode($val, true); if (is_array($decoded)) { qrun("UPDATE businesses SET hours=? WHERE id=?", [$val, $req['business_id']]); } } elseif ($field === 'video_url') { if (validBusinessVideoUrl($val)) { qrun("UPDATE businesses SET video_url=? WHERE id=?", [$val, $req['business_id']]); } } else { qrun("UPDATE businesses SET $field=? WHERE id=?", [$val, $req['business_id']]); } qrun("UPDATE business_edit_requests SET status='approved', reviewed_at=datetime('now') WHERE id=?", [$reqId]); flash('Change approved and applied.', 'success'); } } go('/admin/biz_edits.php'.(p('biz_id') ? '?biz_id='.p('biz_id') : '')); } // Reject single field change if ($act === 'reject') { $reqId = (int)p('req_id'); $notes = ps('admin_notes'); qrun("UPDATE business_edit_requests SET status='rejected', admin_notes=?, reviewed_at=datetime('now') WHERE id=?", [$notes, $reqId]); flash('Change rejected.', 'info'); go('/admin/biz_edits.php'.(p('biz_id') ? '?biz_id='.p('biz_id') : '')); } // Approve ALL pending for a business if ($act === 'approve_all') { $bizId = (int)p('biz_id'); $reqs = qall("SELECT * FROM business_edit_requests WHERE business_id=? AND status='pending'", [$bizId]); $count = 0; foreach ($reqs as $req) { $field = $req['field']; $val = $req['new_value']; if (!array_key_exists($field, $fieldLabels)) continue; if ($field === 'is_active') { qrun("UPDATE businesses SET is_active=? WHERE id=?", [(int)$val, $bizId]); } elseif ($field === 'hours') { $decoded = json_decode($val, true); if (is_array($decoded)) { qrun("UPDATE businesses SET hours=? WHERE id=?", [$val, $bizId]); } } elseif ($field === 'video_url') { if (validBusinessVideoUrl($val)) { qrun("UPDATE businesses SET video_url=? WHERE id=?", [$val, $bizId]); } } else { qrun("UPDATE businesses SET $field=? WHERE id=?", [$val, $bizId]); } qrun("UPDATE business_edit_requests SET status='approved', reviewed_at=datetime('now') WHERE id=?", [$req['id']]); $count++; } flash("All $count pending change".($count!=1?'s':'')." approved and applied.", 'success'); go('/admin/biz_edits.php?biz_id='.$bizId); } // Reject ALL pending for a business if ($act === 'reject_all') { $bizId = (int)p('biz_id'); $notes = ps('admin_notes'); qrun("UPDATE business_edit_requests SET status='rejected', admin_notes=?, reviewed_at=datetime('now') WHERE business_id=? AND status='pending'", [$notes, $bizId]); flash('All pending changes rejected.', 'info'); go('/admin/biz_edits.php?biz_id='.$bizId); } } // ── Filter by business ─────────────────────────────────── $bizId = iget('biz_id'); $filterStatus = gs('status') ?: 'pending'; // Grouped: businesses that have edit requests $bizWithEdits = qall(" SELECT b.id, b.name, b.slug, COUNT(CASE WHEN ber.status='pending' THEN 1 END) AS pending_count, COUNT(CASE WHEN ber.status='approved' THEN 1 END) AS approved_count, COUNT(CASE WHEN ber.status='rejected' THEN 1 END) AS rejected_count, MAX(ber.created_at) AS latest_request FROM business_edit_requests ber JOIN businesses b ON b.id = ber.business_id GROUP BY b.id ORDER BY pending_count DESC, latest_request DESC "); // Requests for selected business $requests = []; $selectedBiz = null; if ($bizId) { $selectedBiz = qone("SELECT * FROM businesses WHERE id=?", [$bizId]); $whereStatus = $filterStatus === 'all' ? "" : "AND ber.status=?"; $params = $filterStatus === 'all' ? [$bizId] : [$bizId, $filterStatus]; $requests = qall(" SELECT ber.*, u.username FROM business_edit_requests ber JOIN users u ON u.id = ber.user_id WHERE ber.business_id=? $whereStatus ORDER BY CASE ber.status WHEN 'pending' THEN 0 ELSE 1 END, ber.created_at DESC ", $params); } ?>
No edit requests have been submitted yet. Assigned owners can propose changes from their business listing page.