Add pub hours admin panel, rebuild announcements/users lists on CSS Grid

- Add a Hours admin panel (admin/hours.php, admin/hours.js) for editing
  the weekly open/close schedule and an optional per-day kitchen closing
  time, with a live preview of how it'll read on the public site
- Store hours in a new pub_hours table (inc/db.php), seeded with the
  site's existing Thu-Sat/9pm-kitchen schedule; inc/hours.php formats
  and groups it for display (day ranges, kitchen-close note, footer
  summary)
- Wire the public Visit card and both site footers (index.php, menu.php)
  to read hours from that data instead of hardcoded copy
- Rebuild the Announcements and Users admin tables onto the same CSS
  Grid list pattern already used for the Menu (admin-table-actions ->
  row-actions), and make the Announcements status toggle an in-place
  AJAX action like the menu item's (admin/index.js)
- Add the Hours tab to admin nav across all four admin pages

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
David DyerandClaude Sonnet 5 committed 2026-09-01 11:18:23 -04:00
1 parent fd928a24cf
commit eab20899de
14 files changed
+1224 -441

No files matched your search

+18
View File
@@ -0,0 +1,18 @@
// Hours admin page: purely a progressive enhancement over the plain form
// POST that actually saves — greys out (and stops submitting) a day's time
// fields while its "Open" box is unchecked, so a closed day can't look like
// it still has stale hours set.
document.querySelectorAll('.hours-day-row').forEach((row) => {
const toggle = row.querySelector('input[type="checkbox"]');
const timeFields = row.querySelectorAll('.day-time-field');
function applyState() {
timeFields.forEach((field) => {
field.disabled = !toggle.checked;
});
}
toggle.addEventListener('change', applyState);
applyState();
});