Files
MyKeyser/menu.php
T
Ty Clifford b57091e4ad - initial
2026-04-24 08:41:52 -04:00

150 lines
9.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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'; ?>