From 95764039c7919f7bbaac0913526884b4c29c35c2 Mon Sep 17 00:00:00 2001 From: Maaxxs <61059039+MaaxxsDev@users.noreply.github.com> Date: Mon, 6 Jul 2026 15:28:11 +0200 Subject: [PATCH] Add admin-configurable website settings and VIN field to contact form Adds a Website settings tab (hero image, phone, WhatsApp, email) that feeds the navbar, footer and contact page via a new SiteSettingsContext, redesigns the navbar with a bigger centered logo plus phone/WhatsApp/shop links, and adds a VIN/chassis-number field to the contact form, admin inbox and notification email. Co-Authored-By: Claude Sonnet 5 --- hifi-src/src/App.jsx | 4 +- hifi-src/src/components/Footer.jsx | 8 +- hifi-src/src/components/Navbar.jsx | 119 +++++++++++++----- hifi-src/src/components/PublicLayout.jsx | 32 +++-- hifi-src/src/context/SiteSettingsContext.jsx | 16 +++ hifi-src/src/pages/admin/ContactRequests.jsx | 3 + .../pages/admin/settings/SettingsLayout.jsx | 1 + .../pages/admin/settings/WebsiteSettings.jsx | 118 +++++++++++++++++ hifi-src/src/pages/public/ContactPage.jsx | 22 +++- hifi-src/src/pages/public/Home.jsx | 6 +- hifi/api/database/migration_site_settings.sql | 13 ++ hifi/api/database/schema.sql | 5 + hifi/api/public/index.php | 6 +- .../api/src/Controllers/ContactController.php | 10 +- .../Controllers/SiteSettingsController.php | 57 +++++++++ hifi/api/src/Support/Schema.php | 10 ++ 16 files changed, 376 insertions(+), 54 deletions(-) create mode 100644 hifi-src/src/context/SiteSettingsContext.jsx create mode 100644 hifi-src/src/pages/admin/settings/WebsiteSettings.jsx create mode 100644 hifi/api/database/migration_site_settings.sql create mode 100644 hifi/api/src/Controllers/SiteSettingsController.php diff --git a/hifi-src/src/App.jsx b/hifi-src/src/App.jsx index 81c3a9a..59137c4 100644 --- a/hifi-src/src/App.jsx +++ b/hifi-src/src/App.jsx @@ -30,6 +30,7 @@ import AccountSettings from './pages/admin/AccountSettings.jsx'; import AdminUsers from './pages/admin/AdminUsers.jsx'; import PermissionGroups from './pages/admin/PermissionGroups.jsx'; import SettingsLayout from './pages/admin/settings/SettingsLayout.jsx'; +import WebsiteSettings from './pages/admin/settings/WebsiteSettings.jsx'; import DatabaseSettings from './pages/admin/settings/DatabaseSettings.jsx'; import ExportImportSettings from './pages/admin/settings/ExportImportSettings.jsx'; import MaintenanceSettings from './pages/admin/settings/MaintenanceSettings.jsx'; @@ -74,7 +75,8 @@ export default function App() { path="settings" element={} > - } /> + } /> + } /> } /> } /> } /> diff --git a/hifi-src/src/components/Footer.jsx b/hifi-src/src/components/Footer.jsx index b13b18c..bc6ecac 100644 --- a/hifi-src/src/components/Footer.jsx +++ b/hifi-src/src/components/Footer.jsx @@ -1,6 +1,9 @@ import { Link, useLocation } from 'react-router-dom'; import DynamicIcon from './DynamicIcon.jsx'; import { useCookieConsent } from '../context/CookieConsentContext.jsx'; +import { useSiteSettings } from '../context/SiteSettingsContext.jsx'; + +const digitsOnly = (value) => (value || '').replace(/[^\d+]/g, ''); const SHOP_ADDRESS_ENCODED = encodeURIComponent('Boxbrunner Str. 20a, 63916 Amorbach'); const DIRECTIONS_URL = `https://www.google.com/maps/dir/?api=1&destination=${SHOP_ADDRESS_ENCODED}`; @@ -27,6 +30,7 @@ export default function Footer() { // zusätzlichen Platz für sie freihalten. const { pathname } = useLocation(); const isHome = pathname === '/'; + const { phone, contact_email: contactEmail } = useSiteSettings(); return (