- 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
+149
View File
@@ -0,0 +1,149 @@
<?php
require_once __DIR__.'/includes/boot.php';
requireLogin();
$bizId=iget('id');
$biz=qone("SELECT * FROM businesses WHERE id=?",[$bizId]);
if(!$biz||!owns($bizId)){flash('Access denied.','error');go('/dashboard.php');}
if(isPost()){
csrfCheck();
$act=p('_act');
if($act==='add_section'){
$name=ps('sec_name');
if($name){
$order=(int)qval("SELECT COALESCE(MAX(sort_order),0)+1 FROM menu_sections WHERE business_id=?",[$bizId]);
qrun("INSERT INTO menu_sections(business_id,name,description,sort_order)VALUES(?,?,?,?)",[$bizId,$name,ps('sec_desc'),$order]);
flash('Section added!','success');
}
}
if($act==='del_section'){
qrun("DELETE FROM menu_sections WHERE id=? AND business_id=?",[(int)p('sid'),$bizId]);
flash('Section deleted.','success');
}
if($act==='edit_section'){
qrun("UPDATE menu_sections SET name=?,description=? WHERE id=? AND business_id=?",[ps('sec_name'),ps('sec_desc'),(int)p('sid'),$bizId]);
flash('Section updated!','success');
}
if($act==='add_item'){
$sid=(int)p('section_id');
$name=ps('item_name');
if($name){
$order=(int)qval("SELECT COALESCE(MAX(sort_order),0)+1 FROM menu_items WHERE section_id=?",[$sid]);
qrun("INSERT INTO menu_items(section_id,name,description,price,sort_order)VALUES(?,?,?,?,?)",[$sid,$name,ps('item_desc'),(float)p('item_price',0),$order]);
flash('Item added!','success');
}
}
if($act==='del_item'){
qrun("DELETE FROM menu_items WHERE id=?",[(int)p('iid')]);
flash('Item removed.','success');
}
if($act==='edit_item'){
$iid=(int)p('iid');
qrun("UPDATE menu_items SET name=?,description=?,price=?,is_available=? WHERE id=?",[ps('item_name'),ps('item_desc'),(float)p('item_price',0),(int)p('is_available',1),$iid]);
flash('Item updated!','success');
}
go("/menu.php?id=$bizId");
}
$pageTitle='Manage Menu — '.e($biz['name']);
$sections=qall("SELECT * FROM menu_sections WHERE business_id=? ORDER BY sort_order",[$bizId]);
$items=[]; foreach($sections as $s) $items[$s['id']]=qall("SELECT * FROM menu_items WHERE section_id=? ORDER BY sort_order",[$s['id']]);
include __DIR__.'/includes/header.php';
?>
<div class="page-hdr">
<div class="page-hdr-inner">
<div class="eyebrow">OWNER PANEL</div>
<h1 style="font-size:1.8rem;margin-bottom:.3rem">Manage Menu</h1>
<p style="color:var(--text-m)"><?=e($biz['name'])?> &middot; <a href="/business.php?slug=<?=e($biz['slug'])?>">View Listing</a></p>
</div>
</div>
<div class="section" style="max-width:960px">
<!-- Add Section -->
<div class="ibox" style="border-color:var(--gold-d)">
<div class="ibox-title"> ADD MENU SECTION</div>
<form method="POST"><?=csrfField()?><input type="hidden" name="_act" value="add_section">
<div class="form-row">
<div class="fg"><label class="flabel">SECTION NAME *</label><input type="text" name="sec_name" class="finput" placeholder="e.g. Appetizers, Pasta, Desserts" required></div>
<div class="fg"><label class="flabel">DESCRIPTION (optional)</label><input type="text" name="sec_desc" class="finput" placeholder="Brief description…"></div>
</div>
<button type="submit" class="btn btn-primary btn-sm">Add Section</button>
</form>
</div>
<?php foreach($sections as $sec): ?>
<div class="ibox" style="margin-bottom:1.5rem">
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:.9rem;padding-bottom:.6rem;border-bottom:1px solid var(--bdr)">
<div>
<div style="font-family:'Oswald',sans-serif;letter-spacing:.1em;font-size:1rem;color:var(--gold)"><?=e($sec['name'])?></div>
<?php if($sec['description']): ?><div style="font-size:.78rem;color:var(--text-d)"><?=e($sec['description'])?></div><?php endif; ?>
</div>
<div class="flex-row" style="gap:.4rem">
<button onclick="this.closest('.ibox').querySelector('.edit-sec-form').classList.toggle('hidden')" class="btn btn-xs btn-secondary">✏️ Edit</button>
<form method="POST" style="display:inline"><?=csrfField()?><input type="hidden" name="_act" value="del_section"><input type="hidden" name="sid" value="<?=$sec['id']?>"><button class="btn btn-xs btn-danger" data-confirm="Delete section and ALL its items?">🗑️ Delete</button></form>
</div>
</div>
<!-- Edit section form (hidden by default) -->
<div class="edit-sec-form hidden" style="background:var(--bg4);border:1px solid var(--bdr);border-radius:4px;padding:1rem;margin-bottom:1rem">
<form method="POST"><?=csrfField()?><input type="hidden" name="_act" value="edit_section"><input type="hidden" name="sid" value="<?=$sec['id']?>">
<div class="form-row">
<div class="fg"><label class="flabel">NAME</label><input type="text" name="sec_name" class="finput" value="<?=e($sec['name'])?>" required></div>
<div class="fg"><label class="flabel">DESCRIPTION</label><input type="text" name="sec_desc" class="finput" value="<?=e($sec['description'])?>"></div>
</div>
<button type="submit" class="btn btn-success btn-sm">Save Section</button>
</form>
</div>
<!-- Items -->
<?php foreach($items[$sec['id']] as $item): ?>
<div style="border-bottom:1px solid var(--bdr);padding:.75rem 0">
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem">
<div>
<div style="font-weight:600;color:<?=$item['is_available']?'var(--text)':'var(--text-d)'?>"><?=e($item['name'])?> <?php if(!$item['is_available']): ?><span class="badge badge-gray">Unavailable</span><?php endif; ?></div>
<?php if($item['description']): ?><div style="font-size:.8rem;color:var(--text-d)"><?=e($item['description'])?></div><?php endif; ?>
<?php if($item['price']>0): ?><div style="color:var(--gold);font-family:'Oswald',sans-serif;font-size:.9rem"><?=money((float)$item['price'])?></div><?php endif; ?>
</div>
<div class="flex-row" style="gap:.3rem;flex-shrink:0">
<button onclick="this.closest('div').parentElement.querySelector('.edit-item-form').classList.toggle('hidden')" class="btn btn-xs btn-secondary">✏️</button>
<form method="POST" style="display:inline"><?=csrfField()?><input type="hidden" name="_act" value="del_item"><input type="hidden" name="iid" value="<?=$item['id']?>"><button class="btn btn-xs btn-danger" data-confirm="Delete this item?">🗑️</button></form>
</div>
</div>
<div class="edit-item-form hidden" style="background:var(--bg4);border:1px solid var(--bdr);border-radius:4px;padding:.85rem;margin-top:.65rem">
<form method="POST"><?=csrfField()?><input type="hidden" name="_act" value="edit_item"><input type="hidden" name="iid" value="<?=$item['id']?>">
<div class="form-row" style="margin-bottom:.6rem">
<div class="fg"><label class="flabel">NAME</label><input type="text" name="item_name" class="finput" value="<?=e($item['name'])?>" required></div>
<div class="fg"><label class="flabel">PRICE ($)</label><input type="number" name="item_price" class="finput" value="<?=e($item['price'])?>" step="0.01" min="0"></div>
</div>
<div class="fg"><label class="flabel">DESCRIPTION</label><input type="text" name="item_desc" class="finput" value="<?=e($item['description'])?>"></div>
<div class="fg"><label class="flabel">AVAILABLE</label><select name="is_available" class="fselect"><option value="1"<?=$item['is_available']?' selected':''?>>Yes</option><option value="0"<?=!$item['is_available']?' selected':''?>>No (hidden from menu)</option></select></div>
<button type="submit" class="btn btn-success btn-sm">Save Item</button>
</form>
</div>
</div>
<?php endforeach; ?>
<!-- Add item to this section -->
<div style="margin-top:.85rem;padding-top:.85rem">
<details><summary style="cursor:pointer;font-size:.82rem;color:var(--gold);font-family:'Oswald',sans-serif;letter-spacing:.08em"> Add Item to "<?=e($sec['name'])?>"</summary>
<div style="padding:.85rem 0">
<form method="POST"><?=csrfField()?><input type="hidden" name="_act" value="add_item"><input type="hidden" name="section_id" value="<?=$sec['id']?>">
<div class="form-row" style="margin-bottom:.6rem">
<div class="fg"><label class="flabel">ITEM NAME *</label><input type="text" name="item_name" class="finput" required placeholder="e.g. Spaghetti Carbonara"></div>
<div class="fg"><label class="flabel">PRICE ($)</label><input type="number" name="item_price" class="finput" value="0" step="0.01" min="0"></div>
</div>
<div class="fg"><label class="flabel">DESCRIPTION</label><input type="text" name="item_desc" class="finput" placeholder="Brief description…"></div>
<button type="submit" class="btn btn-primary btn-sm">Add Item</button>
</form>
</div>
</details>
</div>
</div>
<?php endforeach; ?>
<?php if(!$sections): ?>
<div class="empty"><div class="empty-ico">🍽️</div><h3>No menu sections yet</h3><p style="margin-top:.5rem">Add a section above to start building your menu.</p></div>
<?php endif; ?>
<a href="/business.php?slug=<?=e($biz['slug'])?>" class="btn btn-outline">← Back to Listing</a>
</div>
<style>.hidden{display:none!important}</style>
<?php include __DIR__.'/includes/footer.php'; ?>