From 0fda461bec799ab2ed353b9bc0a7b987dc0024a5 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Thu, 13 Aug 2026 21:22:58 +0000 Subject: [PATCH] Upload via GUI (182 Dateien) --- Minecraft-Modern-Theme/fonts/roboto/font.css | 49 + .../fonts/roboto/roboto-latin-cb43c055.woff2 | Bin 0 -> 43136 bytes .../roboto/roboto-latin-ext-0fb06be4.woff2 | Bin 0 -> 29392 bytes Minecraft-Modern-Theme/fonts/rubik/font.css | 49 + .../rubik/rubik-latin-ext-b7b482e1.woff2 | Bin 0 -> 19400 bytes .../fonts/rubik/rubik-latin-f673d854.woff2 | Bin 0 -> 35348 bytes Minecraft-Modern-Theme/fonts/satisfy/font.css | 9 + .../satisfy/satisfy-latin-b4c9305d.woff2 | Bin 0 -> 22724 bytes .../fonts/source-sans-pro/font.css | 49 + .../source-sans-pro-latin-49902363.woff2 | Bin 0 -> 14876 bytes .../source-sans-pro-latin-c7df1611.woff2 | Bin 0 -> 14724 bytes .../source-sans-pro-latin-ea667083.woff2 | Bin 0 -> 14868 bytes .../source-sans-pro-latin-ext-17c620e3.woff2 | Bin 0 -> 22928 bytes .../source-sans-pro-latin-ext-c008dc5c.woff2 | Bin 0 -> 23112 bytes .../source-sans-pro-latin-ext-c12498bb.woff2 | Bin 0 -> 23124 bytes Minecraft-Modern-Theme/fonts/ubuntu/font.css | 33 + .../fonts/ubuntu/ubuntu-latin-62d0e61f.woff2 | Bin 0 -> 34924 bytes .../fonts/ubuntu/ubuntu-latin-7b2f7147.woff2 | Bin 0 -> 29844 bytes .../ubuntu/ubuntu-latin-ext-4f2e4a8f.woff2 | Bin 0 -> 38020 bytes .../ubuntu/ubuntu-latin-ext-b2700a09.woff2 | Bin 0 -> 46980 bytes .../fonts/work-sans/font.css | 49 + .../work-sans-latin-ext-94b95f7b.woff2 | Bin 0 -> 35716 bytes .../work-sans/work-sans-latin-f7b83de3.woff2 | Bin 0 -> 50316 bytes Minecraft-Modern-Theme/inc/announcement.php | 327 ++ Minecraft-Modern-Theme/inc/assistant-ajax.php | 4196 ++++++++--------- .../inc/assistant-widget.php | 1824 +++---- Minecraft-Modern-Theme/inc/bewerbung.php | 394 ++ Minecraft-Modern-Theme/inc/cookie-banner.php | 283 ++ Minecraft-Modern-Theme/inc/customizer.php | 1092 ++--- Minecraft-Modern-Theme/inc/faq.php | 92 + Minecraft-Modern-Theme/inc/frontpage.php | 58 + Minecraft-Modern-Theme/inc/header-nav.php | 308 ++ Minecraft-Modern-Theme/inc/login-url.php | 251 + Minecraft-Modern-Theme/inc/login.php | 104 + Minecraft-Modern-Theme/inc/menu-links.php | 367 ++ Minecraft-Modern-Theme/inc/scroll-to-top.php | 41 + Minecraft-Modern-Theme/inc/settings-io.php | 447 ++ Minecraft-Modern-Theme/inc/team.php | 513 ++ Minecraft-Modern-Theme/inc/theme-setup.php | 267 ++ Minecraft-Modern-Theme/inc/theme-updater.php | 280 +- Minecraft-Modern-Theme/inc/video.php | 1272 +++++ Minecraft-Modern-Theme/inc/widgets.php | 129 + Minecraft-Modern-Theme/js/announcement.js | 150 +- Minecraft-Modern-Theme/js/assistant-widget.js | 2 +- Minecraft-Modern-Theme/js/menu-links-admin.js | 116 + .../js/minecraft-avatar-skinview.js | 126 +- 46 files changed, 9042 insertions(+), 3835 deletions(-) create mode 100644 Minecraft-Modern-Theme/fonts/roboto/font.css create mode 100644 Minecraft-Modern-Theme/fonts/roboto/roboto-latin-cb43c055.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/roboto/roboto-latin-ext-0fb06be4.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/rubik/font.css create mode 100644 Minecraft-Modern-Theme/fonts/rubik/rubik-latin-ext-b7b482e1.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/rubik/rubik-latin-f673d854.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/satisfy/font.css create mode 100644 Minecraft-Modern-Theme/fonts/satisfy/satisfy-latin-b4c9305d.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/source-sans-pro/font.css create mode 100644 Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-49902363.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-c7df1611.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ea667083.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-17c620e3.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-c008dc5c.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-c12498bb.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/ubuntu/font.css create mode 100644 Minecraft-Modern-Theme/fonts/ubuntu/ubuntu-latin-62d0e61f.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/ubuntu/ubuntu-latin-7b2f7147.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/ubuntu/ubuntu-latin-ext-4f2e4a8f.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/ubuntu/ubuntu-latin-ext-b2700a09.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/work-sans/font.css create mode 100644 Minecraft-Modern-Theme/fonts/work-sans/work-sans-latin-ext-94b95f7b.woff2 create mode 100644 Minecraft-Modern-Theme/fonts/work-sans/work-sans-latin-f7b83de3.woff2 create mode 100644 Minecraft-Modern-Theme/inc/announcement.php create mode 100644 Minecraft-Modern-Theme/inc/bewerbung.php create mode 100644 Minecraft-Modern-Theme/inc/cookie-banner.php create mode 100644 Minecraft-Modern-Theme/inc/faq.php create mode 100644 Minecraft-Modern-Theme/inc/frontpage.php create mode 100644 Minecraft-Modern-Theme/inc/header-nav.php create mode 100644 Minecraft-Modern-Theme/inc/login-url.php create mode 100644 Minecraft-Modern-Theme/inc/login.php create mode 100644 Minecraft-Modern-Theme/inc/menu-links.php create mode 100644 Minecraft-Modern-Theme/inc/scroll-to-top.php create mode 100644 Minecraft-Modern-Theme/inc/settings-io.php create mode 100644 Minecraft-Modern-Theme/inc/team.php create mode 100644 Minecraft-Modern-Theme/inc/theme-setup.php create mode 100644 Minecraft-Modern-Theme/inc/video.php create mode 100644 Minecraft-Modern-Theme/inc/widgets.php create mode 100644 Minecraft-Modern-Theme/js/menu-links-admin.js diff --git a/Minecraft-Modern-Theme/fonts/roboto/font.css b/Minecraft-Modern-Theme/fonts/roboto/font.css new file mode 100644 index 0000000..587a3f6 --- /dev/null +++ b/Minecraft-Modern-Theme/fonts/roboto/font.css @@ -0,0 +1,49 @@ +/* Roboto – lokal gehostet (DSGVO). Generiert, nicht manuell bearbeiten. */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('roboto-latin-ext-0fb06be4.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('roboto-latin-cb43c055.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('roboto-latin-ext-0fb06be4.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('roboto-latin-cb43c055.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('roboto-latin-ext-0fb06be4.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('roboto-latin-cb43c055.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/Minecraft-Modern-Theme/fonts/roboto/roboto-latin-cb43c055.woff2 b/Minecraft-Modern-Theme/fonts/roboto/roboto-latin-cb43c055.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9b0f14165e44ad80256062baf0e55c163dfbe96b GIT binary patch literal 43136 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

7eh|( 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≪HK)Jkk15%m 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 bvI<7D559Yq23nvUqHV>OR3D*u761SMWPP$Q literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/rubik/font.css b/Minecraft-Modern-Theme/fonts/rubik/font.css new file mode 100644 index 0000000..454dc79 --- /dev/null +++ b/Minecraft-Modern-Theme/fonts/rubik/font.css @@ -0,0 +1,49 @@ +/* Rubik – lokal gehostet (DSGVO). Generiert, nicht manuell bearbeiten. */ +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('rubik-latin-ext-b7b482e1.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('rubik-latin-f673d854.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('rubik-latin-ext-b7b482e1.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('rubik-latin-f673d854.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('rubik-latin-ext-b7b482e1.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('rubik-latin-f673d854.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/Minecraft-Modern-Theme/fonts/rubik/rubik-latin-ext-b7b482e1.woff2 b/Minecraft-Modern-Theme/fonts/rubik/rubik-latin-ext-b7b482e1.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dea13dc769a669034c16f74d7d2a3abe0df09d02 GIT binary patch literal 19400 zcmV)RK(oJhPew8T0RR91087XK6#xJL0JOva083B+0RR9100000000000000000000 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 TmuA93V#n>ykCl|jM*si-N!(~4 literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/rubik/rubik-latin-f673d854.woff2 b/Minecraft-Modern-Theme/fonts/rubik/rubik-latin-f673d854.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..42fc52af04fdce1a7c9072ca2a5510295990fbc1 GIT binary patch literal 35348 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

~+M#_U(F~Vxu#37}2SEn%kv6;{t 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 PC@(IUH$n)BTmb+8XQB{) literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/source-sans-pro/font.css b/Minecraft-Modern-Theme/fonts/source-sans-pro/font.css new file mode 100644 index 0000000..43ae34c --- /dev/null +++ b/Minecraft-Modern-Theme/fonts/source-sans-pro/font.css @@ -0,0 +1,49 @@ +/* Source Sans Pro – lokal gehostet (DSGVO). Generiert, nicht manuell bearbeiten. */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('source-sans-pro-latin-ext-c12498bb.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('source-sans-pro-latin-ea667083.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('source-sans-pro-latin-ext-c008dc5c.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('source-sans-pro-latin-49902363.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('source-sans-pro-latin-ext-17c620e3.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('source-sans-pro-latin-c7df1611.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-49902363.woff2 b/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-49902363.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d376442c98ad437fd73c0832fd444de032a71d6f GIT binary patch literal 14876 zcmV+%I^)H6Pew8T0RR9106H814gdfE0EjdI06D|}0RR9100000000000000000000 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 OJFTgOY;dkltJ485KEw_H literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-c7df1611.woff2 b/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-c7df1611.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2d10d5ba0c8795e5485548729fed6215df8ccfb6 GIT binary patch literal 14724 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 G0000Cd1cf9 literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-17c620e3.woff2 b/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-17c620e3.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6c07b9d2e6486148338f1ed3a8491c8c23727e44 GIT binary patch literal 22928 zcmV)9K*hgzPew8T0RR9109lX#4gdfE0O!a609iBu0RR9100000000000000000000 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 L#L$sG&jA1cNL{PI literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-c008dc5c.woff2 b/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-c008dc5c.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0ec07f179b87b4f3c6e25b1e4e65d9a509130346 GIT binary patch literal 23112 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 literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-c12498bb.woff2 b/Minecraft-Modern-Theme/fonts/source-sans-pro/source-sans-pro-latin-ext-c12498bb.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..edaf39ab1c134beac3fbe21c8a16ffa6860b2e1a GIT binary patch literal 23124 zcmV)DK*7IvPew8T0RR9109sT44gdfE0O>3M09pC~0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/ubuntu/font.css b/Minecraft-Modern-Theme/fonts/ubuntu/font.css new file mode 100644 index 0000000..babfbb0 --- /dev/null +++ b/Minecraft-Modern-Theme/fonts/ubuntu/font.css @@ -0,0 +1,33 @@ +/* Ubuntu – lokal gehostet (DSGVO). Generiert, nicht manuell bearbeiten. */ +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('ubuntu-latin-ext-b2700a09.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('ubuntu-latin-62d0e61f.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('ubuntu-latin-ext-4f2e4a8f.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('ubuntu-latin-7b2f7147.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/Minecraft-Modern-Theme/fonts/ubuntu/ubuntu-latin-62d0e61f.woff2 b/Minecraft-Modern-Theme/fonts/ubuntu/ubuntu-latin-62d0e61f.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8cb3d3243506e76a69887b935376def60a8f1522 GIT binary patch literal 34924 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 z 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 literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/ubuntu/ubuntu-latin-ext-b2700a09.woff2 b/Minecraft-Modern-Theme/fonts/ubuntu/ubuntu-latin-ext-b2700a09.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..16afeecb2445f53bf2ba7bc3131323ca96fcf506 GIT binary patch literal 46980 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 literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/work-sans/font.css b/Minecraft-Modern-Theme/fonts/work-sans/font.css new file mode 100644 index 0000000..f8e45dc --- /dev/null +++ b/Minecraft-Modern-Theme/fonts/work-sans/font.css @@ -0,0 +1,49 @@ +/* Work Sans – lokal gehostet (DSGVO). Generiert, nicht manuell bearbeiten. */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('work-sans-latin-ext-94b95f7b.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('work-sans-latin-f7b83de3.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('work-sans-latin-ext-94b95f7b.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('work-sans-latin-f7b83de3.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('work-sans-latin-ext-94b95f7b.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('work-sans-latin-f7b83de3.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/Minecraft-Modern-Theme/fonts/work-sans/work-sans-latin-ext-94b95f7b.woff2 b/Minecraft-Modern-Theme/fonts/work-sans/work-sans-latin-ext-94b95f7b.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..62068414fbcb7a800d767b923bada13401cf6c09 GIT binary patch literal 35716 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

5vgMKIh7?DsH1Qx8TpMRxnI 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 MKK$Qmake4=0GSgwp#T5? literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/fonts/work-sans/work-sans-latin-f7b83de3.woff2 b/Minecraft-Modern-Theme/fonts/work-sans/work-sans-latin-f7b83de3.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3a70b258d0fb12cb411ab56542dcd15050a859e2 GIT binary patch literal 50316 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 literal 0 HcmV?d00001 diff --git a/Minecraft-Modern-Theme/inc/announcement.php b/Minecraft-Modern-Theme/inc/announcement.php new file mode 100644 index 0000000..b88592f --- /dev/null +++ b/Minecraft-Modern-Theme/inc/announcement.php @@ -0,0 +1,327 @@ + array( 'label' => 'Theme-Standard', 'css' => 'inherit', 'google' => false, 'google_name' => '' ), + 'Arial' => array( 'label' => 'Arial', 'css' => 'Arial, Helvetica, sans-serif', 'google' => false, 'google_name' => '' ), + 'Roboto' => array( 'label' => 'Roboto', 'css' => "'Roboto', sans-serif", 'google' => true, 'google_name' => 'Roboto' ), + 'Montserrat' => array( 'label' => 'Montserrat', 'css' => "'Montserrat', sans-serif", 'google' => true, 'google_name' => 'Montserrat' ), + 'Open Sans' => array( 'label' => 'Open Sans', 'css' => "'Open Sans', sans-serif", 'google' => true, 'google_name' => 'Open+Sans' ), + 'Lato' => array( 'label' => 'Lato', 'css' => "'Lato', sans-serif", 'google' => true, 'google_name' => 'Lato' ), + 'Poppins' => array( 'label' => 'Poppins', 'css' => "'Poppins', sans-serif", 'google' => true, 'google_name' => 'Poppins' ), + 'Source Sans Pro' => array( 'label' => 'Source Sans Pro', 'css' => "'Source Sans Pro', sans-serif", 'google' => true, 'google_name' => 'Source+Sans+Pro' ), + 'Noto Sans' => array( 'label' => 'Noto Sans', 'css' => "'Noto Sans', sans-serif", 'google' => true, 'google_name' => 'Noto+Sans' ), + 'Raleway' => array( 'label' => 'Raleway', 'css' => "'Raleway', sans-serif", 'google' => true, 'google_name' => 'Raleway' ), + 'Merriweather' => array( 'label' => 'Merriweather', 'css' => "'Merriweather', serif", 'google' => true, 'google_name' => 'Merriweather' ), + 'Playfair Display' => array( 'label' => 'Playfair Display', 'css' => "'Playfair Display', serif", 'google' => true, 'google_name' => 'Playfair+Display' ), + 'Oswald' => array( 'label' => 'Oswald', 'css' => "'Oswald', sans-serif", 'google' => true, 'google_name' => 'Oswald' ), + 'Rubik' => array( 'label' => 'Rubik', 'css' => "'Rubik', sans-serif", 'google' => true, 'google_name' => 'Rubik' ), + 'Inter' => array( 'label' => 'Inter', 'css' => "'Inter', sans-serif", 'google' => true, 'google_name' => 'Inter' ), + 'Nunito' => array( 'label' => 'Nunito', 'css' => "'Nunito', sans-serif", 'google' => true, 'google_name' => 'Nunito' ), + 'Ubuntu' => array( 'label' => 'Ubuntu', 'css' => "'Ubuntu', sans-serif", 'google' => true, 'google_name' => 'Ubuntu' ), + 'PT Sans' => array( 'label' => 'PT Sans', 'css' => "'PT Sans', sans-serif", 'google' => true, 'google_name' => 'PT+Sans' ), + 'Archivo' => array( 'label' => 'Archivo', 'css' => "'Archivo', sans-serif", 'google' => true, 'google_name' => 'Archivo' ), + 'Fira Sans' => array( 'label' => 'Fira Sans', 'css' => "'Fira Sans', sans-serif", 'google' => true, 'google_name' => 'Fira+Sans' ), + 'Work Sans' => array( 'label' => 'Work Sans', 'css' => "'Work Sans', sans-serif", 'google' => true, 'google_name' => 'Work+Sans' ), + 'Quicksand' => array( 'label' => 'Quicksand', 'css' => "'Quicksand', sans-serif", 'google' => true, 'google_name' => 'Quicksand' ), + 'Karla' => array( 'label' => 'Karla', 'css' => "'Karla', sans-serif", 'google' => true, 'google_name' => 'Karla' ), + 'Dancing Script' => array( 'label' => 'Dancing Script', 'css' => "'Dancing Script', cursive", 'google' => true, 'google_name' => 'Dancing+Script' ), + 'Pacifico' => array( 'label' => 'Pacifico', 'css' => "'Pacifico', cursive", 'google' => true, 'google_name' => 'Pacifico' ), + 'Great Vibes' => array( 'label' => 'Great Vibes', 'css' => "'Great Vibes', cursive", 'google' => true, 'google_name' => 'Great+Vibes' ), + 'Satisfy' => array( 'label' => 'Satisfy', 'css' => "'Satisfy', cursive", 'google' => true, 'google_name' => 'Satisfy' ), + 'Allura' => array( 'label' => 'Allura', 'css' => "'Allura', cursive", 'google' => true, 'google_name' => 'Allura' ), + 'Alex Brush' => array( 'label' => 'Alex Brush', 'css' => "'Alex Brush', cursive", 'google' => true, 'google_name' => 'Alex+Brush' ), + 'Cookie' => array( 'label' => 'Cookie', 'css' => "'Cookie', cursive", 'google' => true, 'google_name' => 'Cookie' ), + ); +} + + +function mm_announcement_admin_init() { + add_menu_page( 'Ankündigung', 'Ankündigung', 'manage_options', 'mm-announcement', 'mm_announcement_admin_page', 'dashicons-megaphone', 61 ); + + register_setting( 'mm_announcement_group', 'mm_announcement_enabled' ); + register_setting( 'mm_announcement_group', 'mm_announcement_text' ); + register_setting( 'mm_announcement_group', 'mm_announcement_bg' ); + register_setting( 'mm_announcement_group', 'mm_announcement_color' ); + register_setting( 'mm_announcement_group', 'mm_announcement_font_size' ); + register_setting( 'mm_announcement_group', 'mm_announcement_font_family' ); + register_setting( 'mm_announcement_group', 'mm_announcement_position' ); + register_setting( 'mm_announcement_group', 'mm_announcement_countdown_enabled' ); + register_setting( 'mm_announcement_group', 'mm_announcement_countdown_label' ); + register_setting( 'mm_announcement_group', 'mm_announcement_countdown_date' ); + register_setting( 'mm_announcement_group', 'mm_announcement_countdown_expired_msg' ); +} +add_action( 'admin_menu', 'mm_announcement_admin_init' ); + + +function mm_announcement_admin_page() { + if ( ! current_user_can( 'manage_options' ) ) return; + + $fonts = mm_announcement_get_font_list(); + $selected_font = get_option( 'mm_announcement_font_family', 'inherit' ); + $selected_size = (int) get_option( 'mm_announcement_font_size', 16 ); + $bg = esc_attr( get_option( 'mm_announcement_bg', '#1e1e1e' ) ); + $color = esc_attr( get_option( 'mm_announcement_color', '#ffffff' ) ); + $text_sample = wp_strip_all_tags( get_option( 'mm_announcement_text' ) ) ?: 'Das ist eine Vorschau: Wie sieht die Schrift aus?'; + ?> +

+

Header-Ankündigung

+

Diese Leiste wird auf allen Seiten angezeigt. Die Vorschau unten zeigt sofort, wie die Ankündigung aussieht — Änderungen wirken direkt in der Vorschau, erst nach Änderungen speichern werden sie im Frontend übernommen.

+ +
+ + +

Allgemein

+ + + + + +
Aktivieren + +
+ +

Inhalt

+ + + + + +
Text + 6, 'media_buttons' => false, 'tinymce' => true, 'quicktags' => true ) ); ?> + +

Verfügbare Icons

+

Klicke auf ein Icon, um es in den Editor einzufügen.

+
+ ' . $icon . ''; + } + ?> +
+ + +

HTML erlaubt (z. B. <a>-Links).

+ +
+
+ +
+

Live Vorschau

+
+
+ +

Position

+ + + + + +
Anzeigeort + +
+ +

Design

+ + + + + + + + + + + + + + + + + +
Hintergrundfarbe
Textfarbe
Schriftgröße (px)
Schriftfamilie + +
+ +

Countdown Timer

+ + + + + + + + + + + + + + + + + +
Countdown aktivieren
Label (Text vor Timer)
Zieldatum & Uhrzeit
Nachricht nach Ablauf
+ + +
+
+ + ' . $countdown_label . ' + Laden... + '; + } + ?> +
+
+
+ + +
+ +
+
+ /fonts/open-sans/. + $fonts = mm_announcement_get_font_list(); + $font_key = get_option( 'mm_announcement_font_family', 'inherit' ); + if ( isset( $fonts[ $font_key ] ) && ! empty( $fonts[ $font_key ]['google'] ) ) { + mm_enqueue_local_font( $font_key ); + } +} +add_action( 'wp_enqueue_scripts', 'mm_announcement_enqueue_assets' ); + + +function mm_announcement_admin_assets( $hook ) { + if ( $hook !== 'toplevel_page_mm-announcement' ) return; + + wp_add_inline_style( 'wp-admin', ' + .mm-announcement-admin .form-table th { width: 180px; vertical-align: top; } + .mm-announcement-admin .description { margin-top: 6px; color: #666; max-width: 720px; } + .mm-announcement-admin h2 { margin-top: 24px; } + #mm-announcement-preview { transition: all 140ms ease; } + #mm-announcement-preview-text { transition: font-family 160ms ease, font-size 120ms ease; white-space: normal; word-break: break-word; } + ' ); + + wp_enqueue_script( 'mm-announcement-admin-script', get_template_directory_uri() . '/js/mm-announcement-admin.js', array( 'jquery' ), filemtime( get_template_directory() . '/js/mm-announcement-admin.js' ), true ); + wp_localize_script( 'mm-announcement-admin-script', 'MM_Announcement_Fonts', mm_announcement_get_font_list() ); + wp_localize_script( 'mm-announcement-admin-script', 'MM_Announcement_Current', array( + 'font' => get_option( 'mm_announcement_font_family', 'inherit' ), + 'size' => (int) get_option( 'mm_announcement_font_size', 16 ), + 'bg' => get_option( 'mm_announcement_bg', '#1e1e1e' ), + 'color' => get_option( 'mm_announcement_color', '#ffffff' ), + 'text' => wp_kses_post( get_option( 'mm_announcement_text' ) ), + // Basis-URL der lokalen Schriften für die Live-Vorschau (kein Google-Aufruf) + 'fontsBase' => get_template_directory_uri() . '/fonts/', + ) ); +} +add_action( 'admin_enqueue_scripts', 'mm_announcement_admin_assets' ); +// === Announcement-Bar Höhe als CSS-Variable + Body-Klasse === +function minecraft_modern_announcement_offset_script() { + if ( ! get_option( 'mm_announcement_enabled' ) ) return; + ?> + + 'Bitte gib eine Frage ein.', - 'parts' => [], - ] ); - } - - // "regeln:Kategorie" → direkt zu Rules-Intent, kein Scoring nötig - if ( preg_match( '/^regeln?:/iu', $q ) ) { - $bot = get_option( 'mm_bot_data', [] ); - $result = mm_intent_rules( $q, $bot ); - wp_send_json_success( mm_build_response( [ $result ] ) ); - } - - // "ban:Steve" → direkt zu Ban-Intent mit Spielername - if ( preg_match( '/^ban:(.+)$/iu', $q, $m ) ) { - $bot = get_option( 'mm_bot_data', [] ); - $name = trim( $m[1] ); - $result = mm_intent_ban_check( $q, $name, $bot ); - wp_send_json_success( mm_build_response( [ $result ] ) ); - } - - try { - $bot = get_option( 'mm_bot_data', [] ); - $parts = []; - - // ---- 1. Manuelle Q&A (höchste Priorität) -------------------- - if ( ! empty( $bot['qa'] ) ) { - foreach ( $bot['qa'] as $item ) { - if ( empty( $item['keys'] ) ) continue; - $keys = array_map( 'trim', explode( ',', mb_strtolower( $item['keys'] ) ) ); - foreach ( $keys as $k ) { - if ( $k !== '' && strpos( $q_lc, $k ) !== false ) { - $parts[] = [ - 'source' => 'qa', - 'content' => wp_kses_post( $item['val'] ), - ]; - break 2; - } - } - } - } - - if ( ! empty( $parts ) ) { - wp_send_json_success( mm_build_response( $parts ) ); - } - - // ---- Intent-Scores berechnen -------------------------------- - $intents = mm_score_intents( $q_lc, $q ); - arsort( $intents ); - $active = array_filter( $intents, function( $s ) { return $s > 0; } ); - - $player_name = mm_extract_player_name( $q ); - - // Wenn Discord-Intent erkannt wurde, NUR diesen ausführen - if (isset($active['discord'])) { - $result = mm_handle_intent('discord', $q, $q_lc, $player_name, $bot); - if ($result) { - $parts[] = $result; - } - } elseif (isset($active['team'])) { - $result = mm_handle_intent('team', $q, $q_lc, $player_name, $bot); - if ($result) { - $parts[] = $result; - } - } else { - foreach ( $active as $intent => $score ) { - // Ban-Intent dominant → Regeln nicht zusätzlich auslösen - if ( $intent === 'rules' && isset( $intents['ban_check'] ) && $intents['ban_check'] >= 25 ) { - continue; - } - // Ban-Intent dominant → Shop/Ticket/Forum nicht zusätzlich auslösen - if ( in_array( $intent, array( 'shop', 'ticket', 'forum' ), true ) - && isset( $intents['ban_check'] ) && $intents['ban_check'] >= 40 ) { - continue; - } - // Player-History dominant → Server-Status nicht zusätzlich auslösen - if ( $intent === 'server_status' - && isset( $intents['player_history'] ) && $intents['player_history'] >= 15 ) { - continue; - } - $result = mm_handle_intent( $intent, $q, $q_lc, $player_name, $bot ); - if ( $result ) { - $parts[] = $result; - } - } - } - - if ( empty( $parts ) ) { - $parts[] = mm_fallback_response( $bot ); - } - - wp_send_json_success( mm_build_response( $parts ) ); - - } catch ( \Throwable $e ) { - wp_send_json_success( [ - 'reply' => '⚠️ Interner Fehler: ' . esc_html( $e->getMessage() ), - 'parts' => [], - ] ); - } -} - -// ============================================================ -// INTENT SCORING -// Jeder Treffer erhöht den Score; der Intent mit dem höchsten -// Score wird zuerst beantwortet. Mehrere Intents möglich. -// ============================================================ - -function mm_score_intents( $q_lc, $q_raw ) { - $scores = [ - 'server_status' => 0, - 'ban_check' => 0, - 'player_history' => 0, - 'rules' => 0, - 'wiki' => 0, - 'shop' => 0, - 'ticket' => 0, - 'forum' => 0, - 'gallery' => 0, - 'faq' => 0, - 'discord' => 0, - 'team' => 0, - ]; - // Team - foreach ([ - 'team', 'teammitglieder', 'admins', 'moderatoren', 'wer ist im team', 'wer sind die admins', 'wer sind die moderatoren', 'serverteam', 'staff', 'supporter', 'admin', 'mod', 'leitung', 'server leitung', 'wer ist staff', 'wer ist admin', 'wer ist mod' - ] as $kw) { - if (strpos($q_lc, $kw) !== false) $scores['team'] += 20; - } - // Discord - foreach (['discord', 'dc', 'discord link', 'discord einladung', 'discord server', 'discord invite'] as $kw) { - if (strpos($q_lc, $kw) !== false) $scores['discord'] += 20; - } - - // Server-Status - foreach ( ['ip', 'adresse', 'join', 'einloggen', 'verbinden', 'server ip', - 'wie komme', 'online spieler', 'wieviele spieler', 'server status', - 'serveradresse', 'spieler online'] as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['server_status'] += 10; - } - - // Ban / Mute / Kick - foreach ( ['ban', 'gebannt', 'gesperrt', 'mute', 'gemutet', 'stumm', - 'kick', 'gekickt', 'warn', 'verwarnung', 'entban', 'unban', - 'antrag', 'sperre', 'strafe', 'strafen', 'bestraft', - 'meine strafen', 'mein ban', 'sanktion'] as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['ban_check'] += 15; - } - // Stärker gewichten bei Ich-Bezug - if ( preg_match( '/\b(bin ich|wurde ich|meine|mein)\b.*(gebannt|gesperrt|gemutet|strafe|ban|mute)/i', $q_raw ) ) { - $scores['ban_check'] += 20; - } - if ( preg_match( '/\b(meine strafen|strafen prüfen|mein status)\b/i', $q_raw ) ) { - $scores['ban_check'] += 25; - } - - // Player History - foreach ( ['spielzeit', 'playtime', 'zuletzt online', 'last seen', - 'letzte login', 'wie lang', 'wie lange', 'war online', - 'online status', 'ist online', 'stunden gespielt'] as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['player_history'] += 15; - } - - // Regeln - foreach ( array( 'regel', 'regeln', 'regelwerk', 'darf ich', 'ist erlaubt', - 'verboten', 'richtlinie', 'grief', 'stehlen', 'pvp', - 'chat regel', 'rule', 'verbote', - 'cheaten', 'cheat', 'hacks', 'hacken', 'modifikation', - 'beleidigung', 'schimpfen', 'respekt' ) as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['rules'] += 12; - } - - // Wiki - foreach ( ['wiki', 'dokumentation', 'guide', 'anleitung', 'howto', - 'how to', 'wie funktioniert', 'erkläre', 'erklärt'] as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['wiki'] += 12; - } - - // Shop - foreach ( [ - 'shop', 'kaufen', 'item', 'items', 'preis', 'kosten', - 'coins', 'tagesaktion', 'daily deal', 'angebot', 'kategorie', - 'warenkorb', 'bestellen', 'rang kaufen', - 'was kostet', 'wie teuer', 'preis von', 'kosten von', 'preis für', 'wie viel kostet' - ] as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['shop'] += 12; - } - - // Ticket / Support - foreach ( ['ticket', 'support', 'hilfe', 'problem melden', - 'bug melden', 'melde', 'anfrage', 'beschwerde', - 'anliegen', 'kontaktier'] as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['ticket'] += 12; - } - - // Forum - foreach ( ['forum', 'diskussion', 'thread', - 'neuen thread', 'thread erstellen', 'im forum posten', 'im forum schreiben', - 'forum login', 'passwort vergessen', 'forum kategorie', - 'forum nachricht', 'direktnachricht', 'forum profil', - 'forum rang', 'forum level', 'forum mitglieder'] as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['forum'] += 10; - } - - // Gallery - foreach ( [ - 'galerie', 'gallery', 'bild', 'bilder', 'screenshot', 'screenshots', - 'foto', 'fotos', 'tagesbild', 'bild des tages', - 'hochladen', 'upload', 'uploaden', 'bild teilen', 'bilder teilen', - 'verifizier', 'verify', '/verify', 'token galerie', - 'meine galerie', 'spieler galerie', 'galerie upload', - ] as $kw ) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['gallery'] += 10; - } - // Upload-Kontext stärker gewichten - if ( preg_match( '/\b(wie|kann ich|wie kann|anleitung|schritt)\b.*(bild|foto|screenshot|hochlad|upload)/i', $q_lc ) ) { - $scores['gallery'] += 20; - } - - // FAQ: Mehr Keywords und höheres Scoring, damit typische Fragen wie "Wie ...?", "Was ...?", "Wieso ...?", "Erklärung ..." erkannt werden - foreach ([ - 'faq', 'häufige frage', 'frequently', 'oft gefragt', - 'wie ', 'was ', 'wieso ', 'wo ', 'wer ', 'hilfe', 'erklärung', 'funktioniert', 'bedeutet', 'nutzen', 'benutzen', 'erkläre', 'erklärt', 'erfahre', 'erfahren', 'frage', 'fragen', 'hilfe', 'problem', 'tipp', 'tipps', 'anleitung', 'erläutere', 'erläutert', 'erläutern', 'erläutere', 'erläutert', 'erläutern', 'beschreibe', 'beschreibt', 'beschreiben', 'beschreibe', 'beschreibt', 'beschreiben', 'wie kann', 'wie mache', 'wie mache ich', 'wie funktioniert', 'wie nutze', 'wie benutze', 'wie setze', 'wie entferne', 'wie öffne', 'wie melde', 'wie erreiche', 'wie akzeptiere', 'wie fordere', 'wie wechsle', 'wie sehe', 'wie teleportiere', 'wie sende', 'wie setze ich', 'wie entferne ich', 'wie öffne ich', 'wie melde ich', 'wie erreiche ich', 'wie akzeptiere ich', 'wie fordere ich', 'wie wechsle ich', 'wie sehe ich', 'wie teleportiere ich', 'wie sende ich' - ] as $kw) { - if ( strpos( $q_lc, $kw ) !== false ) $scores['faq'] += 18; - } - - return $scores; -} - -// ============================================================ -// INTENT HANDLER DISPATCHER -// ============================================================ - -function mm_handle_intent( $intent, $q, $q_lc, $player_name, $bot ) { - switch ( $intent ) { - case 'server_status': return mm_intent_server_status( $bot ); - case 'ban_check': return mm_intent_ban_check( $q, $player_name, $bot ); - case 'player_history': return mm_intent_player_history( $q, $player_name ); - case 'rules': return mm_intent_rules( $q, $bot ); - case 'wiki': return mm_intent_wiki( $q ); - case 'shop': return mm_intent_shop( $q_lc, $bot ); - case 'ticket': return mm_intent_ticket( $q, $bot ); - case 'forum': return mm_intent_forum( $q ); - case 'gallery': return mm_intent_gallery( $bot, $q_lc ); - case 'faq': return mm_intent_faq( $q ); - case 'discord': return mm_intent_discord( $bot ); - case 'team': return mm_intent_team(); - } -} - -// ============================================================ -// INTENT: TEAM -// ============================================================ -function mm_intent_team() { - $query = new WP_Query( array( - 'post_type' => 'team_member', - 'posts_per_page' => -1, - 'orderby' => 'menu_order', - 'order' => 'ASC', - ) ); - if ( ! $query->have_posts() ) { - return [ - 'source' => 'team', - 'title' => '👥 Team', - 'content' => 'Es wurden noch keine Teammitglieder eingetragen.', - ]; - } - $html = '
'; - $html .= '
👥 Team
'; - while ( $query->have_posts() ) { - $query->the_post(); - $name = get_the_title(); - $rank = get_post_meta( get_the_ID(), '_team_member_rank', true ); - $uuid = get_post_meta( get_the_ID(), '_team_member_uuid', true ); - $img = get_the_post_thumbnail_url( get_the_ID(), 'medium' ); - $desc = get_the_excerpt(); - $avatar = ''; - if ( $uuid ) { - $avatar = 'https://visage.surgeplay.com/bust/' . esc_attr( $uuid ) . '.png'; - } elseif ( $img ) { - $avatar = $img; - } - $html .= '
'; - if ( $avatar ) { - $html .= '' . esc_attr( $name ) . ''; - } else { - $html .= '
' . esc_html( mb_substr( $name, 0, 1 ) ) . '
'; - } - $html .= '
'; - $html .= '
' . esc_html( $name ) . '
'; - if ( $rank ) { - $html .= '
' . esc_html( $rank ) . '
'; - } - if ( $desc ) { - $html .= '
' . esc_html( $desc ) . '
'; - } - $html .= '
'; - $html .= '
'; - } - $html .= '
'; - wp_reset_postdata(); - return [ - 'source' => 'team', - 'title' => '👥 Team', - 'content' => $html, - ]; -} -// ============================================================ -// INTENT: DISCORD -// ============================================================ - -function mm_intent_discord( $bot ) { - $discord = $bot['link_discord'] ?? ''; - if ( ! empty( $discord ) ) { - return [ - 'source' => 'discord', - 'title' => '💬 Discord', - 'content' => 'Hier ist der Discord-Einladungslink:
' . esc_html( $discord ) . '', - ]; - } else { - return [ - 'source' => 'discord', - 'title' => '💬 Discord', - 'content' => 'Es wurde kein Discord-Link im Backend hinterlegt.', - ]; - } -} - -// ============================================================ -// INTENT: SERVER STATUS (BungeeCord Status Plugin) -// ============================================================ - -function mm_intent_server_status( $bot ) { - $lines = array(); - - // ── 1. Statische Infos aus Bot-Setup ────────────────────── - $ip = $bot['server_ip'] ?? ''; - $ver = $bot['server_ver'] ?? ''; - $specs = $bot['server_specs'] ?? ''; - $discord = $bot['link_discord'] ?? ''; - - if ( $ip ) $lines[] = '🌐 Adresse: ' . esc_html( $ip ) . ''; - if ( $ver ) $lines[] = '🎮 Version: ' . esc_html( $ver ); - if ( $specs ) $lines[] = '🖥️ Server: ' . esc_html( $specs ); - - // ── 2. Live-Daten via BungeeCord-Status-Plugin ───────────── - $servers = get_option( 'mcss_servers', array() ); - - if ( ! empty( $servers ) && function_exists( 'mcss_fetch_server_with_ranks' ) ) { - $srv = $servers[0]; - $cache_key = 'mm_srv_' . md5( ( $srv['host'] ?? '' ) . ( $srv['player_port'] ?? '9191' ) ); - $data = get_transient( $cache_key ); - - // Caching-Zeit erhöht auf 60 Sekunden - if ( false === $data ) { - try { - $data = mcss_fetch_server_with_ranks( $srv ); - } catch ( \Throwable $e ) { - $data = null; - } - set_transient( $cache_key, $data, 60 ); - } - - if ( ! empty( $data ) && isset( $data['online'] ) ) { - $is_online = (bool) $data['online']; - $icon = $is_online ? '🟢' : '🔴'; - $status = $is_online ? 'Online' : 'Offline'; - - // Spieler-Anzahl (players = Array von Objekten) - $player_list = isset( $data['players'] ) && is_array( $data['players'] ) ? $data['players'] : array(); - $player_count = count( $player_list ); - $player_text = $is_online ? ' · ' . $player_count . ' Spieler online' : ''; - - $srv_label = ! empty( $srv['name'] ) ? esc_html( $srv['name'] ) . ': ' : ''; - $lines[] = $icon . ' ' . $srv_label . $status . $player_text; - - // Version vom Server - if ( $is_online && ! empty( $data['version'] ) && empty( $ver ) ) { - $lines[] = '🎮 Version: ' . esc_html( $data['version'] ); - } - - // MOTD - if ( $is_online && ! empty( $data['motd'] ) ) { - $motd = is_array( $data['motd'] ) - ? implode( ' ', $data['motd'] ) - : (string) $data['motd']; - $motd = trim( $motd ); - if ( $motd ) { - $lines[] = '💬 ' . mm_format_motd( $motd ); - } - } - - // Spieler auflisten (bis 8) - if ( $is_online && ! empty( $player_list ) ) { - $names = array(); - foreach ( array_slice( $player_list, 0, 8 ) as $p ) { - if ( is_array( $p ) && ! empty( $p['name'] ) ) { - $names[] = esc_html( $p['name'] ); - } elseif ( is_string( $p ) ) { - $names[] = esc_html( $p ); - } - } - if ( ! empty( $names ) ) { - $lines[] = '👥 Spieler: ' . implode( ', ', $names ) - . ( $player_count > 8 ? ' +' . ( $player_count - 8 ) . ' weitere' : '' ); - } - } - } - - // Weitere konfigurierte Server kurz anzeigen - if ( count( $servers ) > 1 ) { - $extra = array(); - foreach ( array_slice( $servers, 1 ) as $s ) { - if ( empty( $s['name'] ) ) continue; - $ck = 'mm_srv_' . md5( ( $s['host'] ?? '' ) . ( $s['player_port'] ?? '9191' ) ); - $d = get_transient( $ck ); - if ( false === $d && function_exists( 'mcss_fetch_server_with_ranks' ) ) { - try { - $d = mcss_fetch_server_with_ranks( $s ); - } catch ( \Throwable $e ) { - $d = null; - } - set_transient( $ck, $d, 60 ); - } - $on = ! empty( $d['online'] ); - $count = ( $on && ! empty( $d['players'] ) ) ? count( $d['players'] ) : 0; - $extra[] = ( $on ? '🟢' : '🔴' ) . ' ' . esc_html( $s['name'] ) - . ( $on ? ' (' . $count . ')' : '' ); - } - if ( ! empty( $extra ) ) { - $lines[] = '🗺️ Weitere Server: ' . implode( ' · ', $extra ); - } - } - } - - // ── 3. Kein Plugin, keine Daten ─────────────────────────── - if ( empty( $lines ) ) { - return array( - 'source' => 'server_status', - 'title' => '🖥️ Server-Status', - 'content' => 'Server-Infos wurden noch nicht konfiguriert. Bitte im Bot-Setup eintragen.', - ); - } - - // ── 4. Links (nur Discord, kein Wiki-Link mehr) ───────────── - if ( $discord ) { - $lines[] = '💬 Discord'; - } - - return array( - 'source' => 'server_status', - 'title' => '🖥️ Server-Status', - 'content' => implode( '
', $lines ), - ); -} - -// ============================================================ -// HILFSFUNKTION: Minecraft §-Farbcodes → HTML -// Unterstützt §0-§f (Farben) und §l/§o/§n/§m/§r (Format) -// ============================================================ - -function mm_format_motd( $text ) { - if ( empty( $text ) ) return ''; - - $colors = array( - '0' => '#000000', - '1' => '#0000AA', - '2' => '#00AA00', - '3' => '#00AAAA', - '4' => '#AA0000', - '5' => '#AA00AA', - '6' => '#FFAA00', - '7' => '#AAAAAA', - '8' => '#555555', - '9' => '#5555FF', - 'a' => '#55FF55', - 'b' => '#55FFFF', - 'c' => '#FF5555', - 'd' => '#FF55FF', - 'e' => '#FFFF55', - 'f' => '#FFFFFF', - ); - - // Normalisieren: § und & beide unterstützen - $section = "\xC2\xA7"; // UTF-8 für § - $text = str_replace( '&', $section, $text ); - - // Aufteilen nach §X Segmenten - $parts = preg_split( '/\xC2\xA7([0-9a-fklmnorA-FKLMNOR])/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); - $output = ''; - $open = 0; - $bold = false; - $italic = false; - - foreach ( $parts as $i => $part ) { - if ( $i % 2 === 0 ) { - // Text-Segment - if ( $part !== '' ) { - $output .= esc_html( $part ); - } - } else { - // Code-Segment - $code = strtolower( $part ); - - // Offene Spans schließen - if ( $open > 0 ) { - $output .= str_repeat( '', $open ); - $open = 0; - } - if ( $bold ) { $output .= '
'; $bold = false; } - if ( $italic ) { $output .= '
'; $italic = false; } - - if ( isset( $colors[ $code ] ) ) { - $output .= ''; - $open++; - } elseif ( $code === 'l' ) { - $output .= ''; - $bold = true; - } elseif ( $code === 'o' ) { - $output .= ''; - $italic = true; - } elseif ( $code === 'r' ) { - // Reset — alles schon geschlossen oben - } - // §k (obfuscated), §m (strike), §n (underline) ignorieren wir - } - } - - // Offene Tags schließen - if ( $open > 0 ) $output .= str_repeat( '', $open ); - if ( $bold ) $output .= ''; - if ( $italic ) $output .= ''; - - return $output; -} - -// ============================================================ -// INTENT: BAN / MUTE / KICK / WARN (LiteBans Manager) -// ============================================================ - -function mm_intent_ban_check( $q, $player_name, $bot ) { - $dashboard_url = isset( $bot["litebans_dashboard_url"] ) ? $bot["litebans_dashboard_url"] : ""; - - if ( empty( $player_name ) ) { - $html = '🔍 Welchen Spielernamen soll ich prüfen?

'; - $html .= 'Tippe deinen Minecraft-Namen direkt ein:

'; - $html .= '
'; - $html .= 'Format:'; - $html .= ''; - $html .= '
'; - $html .= '
Ersetze DeinName mit deinem echten Minecraft-Namen.
'; - $html .= 'Oder schreibe z.B.: ist Steve gebannt
'; - if ( $dashboard_url ) { - $html .= '

LiteBans Dashboard öffnen'; - } - return array( "source" => "ban_check", "title" => "🔨 Strafen prüfen", "content" => $html ); - } - - $info = mm_litebans_query( $player_name ); - - if ( is_null( $info ) ) { - return array( "source" => "ban_check", "title" => "🔨 Ban-Status", - "content" => "⚠️ LiteBans ist nicht konfiguriert oder die Datenbank ist nicht erreichbar." ); - } - - if ( isset( $info["not_found"] ) ) { - return array( "source" => "ban_check", "title" => "🔨 Ban-Status: " . esc_html( $player_name ), - "content" => "❓ Spieler " . esc_html( $player_name ) . " wurde in der LiteBans-Datenbank nicht gefunden." ); - } - - $lines = array(); - - // Avatar + Name - $lines[] = "
" - . "Avatar" - . "" . esc_html( $info["player"] ) . "" - . "
"; - - // Aktiver Ban - if ( $info["active_ban"] ) { - $b = $info["active_ban"]; - $lines[] = "
"; - $lines[] = "🚫 Aktiver Ban"; - $lines[] = "📋 Grund: " . esc_html( $b["reason"] ); - $lines[] = "👮 Von: " . esc_html( $b["by"] ); - $lines[] = "⏰ Bis: " . esc_html( $b["until"] ) . ""; - $lines[] = "
"; - } else { - $lines[] = "✅ Kein aktiver Ban"; - } - - // Aktiver Mute - if ( $info["active_mute"] ) { - $m = $info["active_mute"]; - $lines[] = "
"; - $lines[] = "🔇 Aktiver Mute"; - $lines[] = "📋 Grund: " . esc_html( $m["reason"] ); - $lines[] = "⏰ Bis: " . esc_html( $m["until"] ) . ""; - $lines[] = "
"; - } else { - $lines[] = "✅ Kein aktiver Mute"; - } - - // Kicks & Warns - $stats = array(); - if ( $info["kicks"] > 0 ) $stats[] = "👢 " . $info["kicks"] . " Kick(s)"; - if ( $info["warnings"] > 0 ) $stats[] = "⚠️ " . $info["warnings"] . " Verwarnung(en)"; - if ( ! empty( $stats ) ) $lines[] = implode( " · ", $stats ); - - // Ban-History - if ( ! empty( $info["ban_history"] ) ) { - $lines[] = "
🕐 Letzte Bestrafungen:"; - foreach ( $info["ban_history"] as $h ) { - $icon = $h["type"] === "ban" ? "🚫" : ( $h["type"] === "mute" ? "🔇" : ( $h["type"] === "kick" ? "👢" : "⚠️" ) ); - $lines[] = $icon . " " . esc_html( $h["date"] ) - . " – " . esc_html( $h["reason"] ) - . " (" . esc_html( $h["by"] ) . ")"; - } - } - - // Entbannungsanträge - if ( ! empty( $info["unban_requests"] ) ) { - $lines[] = "
📋 Entbannungsanträge:"; - foreach ( $info["unban_requests"] as $r ) { - $lines[] = $r["status"] . " – " . esc_html( $r["date"] ); - } - } - - // Links - $link_parts = array(); - if ( $dashboard_url ) { - $link_parts[] = "Dashboard"; - } - if ( $info["active_ban"] && $dashboard_url ) { - $unban_url = add_query_arg( array( - "lb_player" => $info["player"], - "lb_reason" => $info["active_ban"]["reason"], - ), $dashboard_url ); - $link_parts[] = "Entbannungsantrag stellen →"; - } - if ( ! empty( $link_parts ) ) $lines[] = "
" . implode( " · ", $link_parts ); - - $status_icon = $info["active_ban"] ? "🚫" : "✅"; - - return array( - "source" => "ban_check", - "title" => $status_icon . " Ban-Status: " . esc_html( $info["player"] ), - "content" => implode( "
", $lines ), - ); -} - -function mm_litebans_query( $player_name ) { - $settings = get_option( "wp_litebans_pro_settings", array() ); - if ( empty( $settings["db_name"] ) || empty( $settings["db_user"] ) ) return null; - - $prefix = isset( $settings["table_prefix"] ) ? $settings["table_prefix"] : "litebans_"; - $db_host = isset( $settings["db_host"] ) ? $settings["db_host"] : "localhost"; - if ( ! empty( $settings["db_port"] ) ) $db_host .= ":" . intval( $settings["db_port"] ); - - try { - $lbdb = new wpdb( $settings["db_user"], $settings["db_pass"], $settings["db_name"], $db_host ); - $lbdb->suppress_errors( true ); - $lbdb->prefix = $prefix; - } catch ( Exception $e ) { - return null; - } - - $name = sanitize_text_field( $player_name ); - - // UUID über history-Tabelle (wie das Plugin selbst) - $uuid = $lbdb->get_var( $lbdb->prepare( - "SELECT uuid FROM {$prefix}history WHERE name = %s ORDER BY id DESC LIMIT 1", $name - ) ); - - if ( empty( $uuid ) ) { - // Fuzzy-Suche - $row = $lbdb->get_row( $lbdb->prepare( - "SELECT uuid, name FROM {$prefix}history WHERE name LIKE %s ORDER BY id DESC LIMIT 1", - "%" . $lbdb->esc_like( $name ) . "%" - ) ); - if ( ! $row ) return array( "not_found" => true ); - $uuid = $row->uuid; - $name = $row->name; - } - - $info = array( "player" => $name, "active_ban" => null, "active_mute" => null, - "kicks" => 0, "warnings" => 0, "ban_history" => array(), "unban_requests" => array() ); - - // Aktiver Ban (via UUID) - $ban = $lbdb->get_row( $lbdb->prepare( - "SELECT reason, banned_by_name, until, active, removed_by_name FROM {$prefix}bans WHERE uuid = %s AND active = 1 ORDER BY time DESC LIMIT 1", $uuid - ) ); - if ( $ban && intval( $ban->active ) === 1 && empty( $ban->removed_by_name ) ) { - $until = (int) $ban->until; - $info["active_ban"] = array( - "reason" => mm_lb_clean( $ban->reason ), - "by" => $ban->banned_by_name, - "until" => ( $until <= 0 ) ? "Permanent" : date_i18n( "d.m.Y H:i", $until / 1000 ), - ); - } - - // Aktiver Mute (via UUID) - $mute = $lbdb->get_row( $lbdb->prepare( - "SELECT reason, banned_by_name, until, active, removed_by_name FROM {$prefix}mutes WHERE uuid = %s AND active = 1 ORDER BY time DESC LIMIT 1", $uuid - ) ); - if ( $mute && intval( $mute->active ) === 1 && empty( $mute->removed_by_name ) ) { - $until = (int) $mute->until; - $info["active_mute"] = array( - "reason" => mm_lb_clean( $mute->reason ), - "by" => $mute->banned_by_name, - "until" => ( $until <= 0 ) ? "Permanent" : date_i18n( "d.m.Y H:i", $until / 1000 ), - ); - } - - // Kicks & Warnings (UUID) - $info["kicks"] = (int) $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$prefix}kicks WHERE uuid = %s", $uuid ) ); - if ( $lbdb->get_var( "SHOW TABLES LIKE '{$prefix}warnings'" ) ) { - $info["warnings"] = (int) $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$prefix}warnings WHERE uuid = %s", $uuid ) ); - } - - // Ban-History (letzte 5 aller Typen) - $history = array(); - foreach ( array( "bans", "mutes", "kicks" ) as $t ) { - $rows = $lbdb->get_results( $lbdb->prepare( - "SELECT reason, banned_by_name, time FROM {$prefix}{$t} WHERE uuid = %s ORDER BY time DESC LIMIT 3", $uuid - ) ); - $type = rtrim( $t, "s" ); // bans→ban, mutes→mute, kicks→kick - foreach ( (array) $rows as $r ) { - $history[] = array( "type" => $type, "date" => date_i18n( "d.m.Y", $r->time / 1000 ), - "reason" => mm_lb_clean( $r->reason ), "by" => $r->banned_by_name, "ts" => $r->time ); - } - } - usort( $history, function( $a, $b ) { return $b["ts"] - $a["ts"]; } ); - $info["ban_history"] = array_slice( $history, 0, 5 ); - - // Entbannungsanträge (WP CPT) - $requests = get_posts( array( "post_type" => "unban_request", "posts_per_page" => 5, - "post_status" => "any", "meta_query" => array( array( "key" => "_lb_player", "value" => $name, "compare" => "=" ) ) ) ); - foreach ( $requests as $r ) { - $status = get_post_meta( $r->ID, "_lb_status", true ) ?: "pending"; - $label = $status === "approved" ? "✅ Angenommen" : ( $status === "rejected" ? "❌ Abgelehnt" : "⏳ Wartend" ); - $info["unban_requests"][] = array( "date" => get_the_date( "d.m.Y", $r->ID ), "status" => $label ); - } - - return $info; -} - -function mm_lb_clean( $text ) { - if ( ! $text ) return "–"; - return preg_replace( "/(?:§|&)[0-9a-fk-orA-FK-OR]/u", "", $text ); -} - -// ============================================================ -// INTENT: PLAYER HISTORY (MC Player History Plugin) -// ============================================================ -// INTENT: PLAYER HISTORY (MC Player History Plugin) -// ============================================================ - -function mm_intent_player_history( $q, $player_name ) { - $bot = get_option( 'mm_bot_data', [] ); - - // Nur aktiv wenn URL im Backend gesetzt - if ( empty( $bot['url_player_history'] ) ) return null; - - $history_url = $bot['url_player_history']; - - // Kein Spielername → Top-Liste + Hinweis - if ( empty( $player_name ) ) { - global $wpdb; - $table = $wpdb->prefix . 'mc_players'; - if ( $wpdb->get_var( "SHOW TABLES LIKE '$table'" ) !== $table ) { - return [ - 'source' => 'player_history', - 'title' => '👤 Spieler-History', - 'content' => 'Das MC Player History Plugin ist nicht installiert oder die Tabelle fehlt.', - ]; - } - - // Top 5 nach Spielzeit - $top = $wpdb->get_results( - "SELECT username, prefix, playtime_seconds, is_online - FROM $table WHERE playtime_seconds > 0 - ORDER BY playtime_seconds DESC LIMIT 5" - ); - - $html = 'Nenne mir einen Minecraft-Namen, z.B.: Spielzeit von Steve

'; - - if ( ! empty( $top ) ) { - $html .= '🏆 Top-Spieler:
'; - $i = 1; - foreach ( $top as $p ) { - $prefix_html = mm_ph_format_prefix( $p->prefix ); - $time_str = mm_format_playtime( (int) $p->playtime_seconds ); - $online_dot = $p->is_online ? '🟢' : '⚫'; - $html .= $online_dot . ' ' . ( $prefix_html ? $prefix_html . ' ' : '' ) - . '' . esc_html( $p->username ) . '' - . ' – ' . esc_html( $time_str ) . '
'; - $i++; - } - $html .= '
'; - } - - $html .= "→ Alle Spieler ansehen"; - - return [ - 'source' => 'player_history', - 'title' => '👤 Spieler-History', - 'content' => $html, - ]; - } - - // Spieler suchen - global $wpdb; - $table = $wpdb->prefix . 'mc_players'; - - if ( $wpdb->get_var( "SHOW TABLES LIKE '$table'" ) !== $table ) { - return [ - 'source' => 'player_history', - 'title' => '👤 Spieler-Info', - 'content' => 'MC Player History Plugin ist nicht aktiv oder Tabelle fehlt.', - ]; - } - - // Exakter Treffer - $row = $wpdb->get_row( $wpdb->prepare( - "SELECT username, prefix, is_online, first_seen, last_seen, playtime_seconds - FROM $table WHERE username = %s LIMIT 1", - $player_name - ) ); - - // Fuzzy-Suche als Fallback - if ( ! $row ) { - $row = $wpdb->get_row( $wpdb->prepare( - "SELECT username, prefix, is_online, first_seen, last_seen, playtime_seconds - FROM $table WHERE username LIKE %s LIMIT 1", - '%' . $wpdb->esc_like( $player_name ) . '%' - ) ); - } - - if ( ! $row ) { - return [ - 'source' => 'player_history', - 'title' => '👤 Spieler: ' . esc_html( $player_name ), - 'content' => '❓ Spieler ' . esc_html( $player_name ) . ' wurde noch nicht auf dem Server gesehen.' - . '

Spieler-Liste öffnen', - ]; - } - - $online_icon = $row->is_online - ? '🟢 Gerade online' - : '⚫ Offline'; - - $playtime = mm_format_playtime( (int) $row->playtime_seconds ); - $last_seen = $row->last_seen - ? wp_date( 'd.m.Y \u\m H:i \U\h\r', strtotime( $row->last_seen ) ) - : 'Unbekannt'; - $first_seen = $row->first_seen - ? wp_date( 'd.m.Y', strtotime( $row->first_seen ) ) - : 'Unbekannt'; - - $lines = [ - '📶 Status: ' . $online_icon, - '⏱️ Spielzeit: ' . esc_html( $playtime ) . '', - '🕐 Zuletzt gesehen: ' . esc_html( $last_seen ) . '', - '📅 Erstmals gesehen: ' . esc_html( $first_seen ) . '', - ]; - - // Rang / Prefix (mit MC-Farben) - if ( ! empty( $row->prefix ) ) { - $prefix_html = mm_ph_format_prefix( $row->prefix ); - if ( $prefix_html !== '' ) { - $lines[] = '🏷️ Rang: ' . $prefix_html; - } - } - - // Avatar - $lines[] = 'Avatar ' - . 'Spieler-Liste öffnen'; - - return [ - 'source' => 'player_history', - 'title' => '👤 Spieler: ' . esc_html( $row->username ), - 'content' => implode( '
', $lines ), - ]; -} - -/** - * Minecraft-Farbcodes in HTML umwandeln. - * Nutzt mcph_parse_minecraft_colors() vom Plugin wenn verfügbar, - * ansonsten eigene Implementierung als Fallback. - */ -function mm_ph_format_prefix( $prefix ) { - if ( empty( $prefix ) ) return ''; - - // Plugin-eigene Funktion bevorzugen - if ( function_exists( 'mcph_parse_minecraft_colors' ) ) { - return mcph_parse_minecraft_colors( $prefix ); - } - - // Fallback: eigene Implementierung - $map = [ - '&0' => '', - '&1' => '', - '&2' => '', - '&3' => '', - '&4' => '', - '&5' => '', - '&6' => '', - '&7' => '', - '&8' => '', - '&9' => '', - '&a' => '', - '&b' => '', - '&c' => '', - '&d' => '', - '&e' => '', - '&f' => '', - '&l' => '', - '&o' => '', - '&n' => '', - '&m' => '', - ]; - - // Anzahl geöffneter Spans zählen für sauberes Schließen - $open = 0; - $text = str_ireplace( array_keys( $map ), array_values( $map ), esc_html( $prefix ) ); - - // &r = alle schließen - $text = preg_replace_callback( '/&r/i', function() use ( &$open ) { - $close = str_repeat( '', $open ); - $open = 0; - return $close; - }, $text ); - - // Spans mitzählen - preg_match_all( '//', $text, $closes ); - $remaining = count( $opens[0] ) - count( $closes[0] ); - if ( $remaining > 0 ) { - $text .= str_repeat( '', $remaining ); - } - - return $text; -} - -/** Sekunden in lesbare Spielzeit umrechnen */ -function mm_format_playtime( $seconds ) { - if ( $seconds <= 0 ) return '0 Minuten'; - $h = floor( $seconds / 3600 ); - $m = floor( ( $seconds % 3600 ) / 60 ); - if ( $h > 0 ) return "{$h}h {$m}min"; - return "{$m} Minuten"; -} - -// ============================================================ -// INTENT: REGELN (Multi Rules Plugin) -// ============================================================ - -function mm_intent_rules( $q, $bot ) { - $rules_url = ! empty( $bot['url_rules'] ) ? $bot['url_rules'] : home_url( '/regeln' ); - $options = get_option( 'mrp_settings' ); - $tabs = isset( $options['tabs'] ) && is_array( $options['tabs'] ) ? $options['tabs'] : array(); - - // ── Schritt 2: Kategorie wurde gewählt → "regeln:Minecraft" ── - if ( preg_match( '/^regeln?:(.+)$/iu', trim( $q ), $m ) ) { - $chosen = trim( $m[1] ); - return mm_rules_show_tab( $chosen, $tabs, $rules_url ); - } - - // ── Spezifische Suche: Suchbegriff vorhanden ────────────── - $q_clean = trim( preg_replace( - '/\b(regel|regeln|regelwerk|zeig|alle|zeige|liste|gibt es|was sind)\b/iu', - '', $q - ) ); - $q_clean = trim( preg_replace( '/\s+/', ' ', $q_clean ) ); - - if ( strlen( $q_clean ) >= 3 ) { - return mm_rules_search( $q_clean, $tabs, $rules_url ); - } - - // ── Schritt 1: Allgemein → Kategorie-Auswahl ───────────── - if ( empty( $tabs ) ) { - return array( - 'source' => 'rules', - 'title' => '📜 Regelwerk', - 'content' => "→ Zum Regelwerk", - ); - } - - $html = 'Wähle eine Kategorie:

'; - $html .= '
'; - - foreach ( $tabs as $tab ) { - $tab_title = $tab['title'] ?? 'Allgemein'; - $rule_count = ! empty( $tab['rules'] ) ? count( $tab['rules'] ) : 0; - // Trigger: "regeln:Minecraft" - $query = 'regeln:' . $tab_title; - $html .= ''; - } - - $html .= '
'; - $html .= '
Alle Regeln im Browser öffnen'; - - return array( - 'source' => 'rules', - 'title' => '📜 Regelwerk', - 'content' => $html, - ); -} - -/** - * Alle Regeln eines bestimmten Tabs anzeigen. - */ -function mm_rules_show_tab( $tab_name, $tabs, $rules_url ) { - $found_tab = null; - - foreach ( $tabs as $tab ) { - if ( mb_strtolower( $tab['title'] ?? '' ) === mb_strtolower( $tab_name ) ) { - $found_tab = $tab; - break; - } - } - - // Fuzzy-Fallback - if ( ! $found_tab ) { - foreach ( $tabs as $tab ) { - if ( strpos( mb_strtolower( $tab['title'] ?? '' ), mb_strtolower( $tab_name ) ) !== false ) { - $found_tab = $tab; - break; - } - } - } - - if ( ! $found_tab ) { - return array( - 'source' => 'rules', - 'title' => '📜 Regelwerk', - 'content' => 'Kategorie ' . esc_html( $tab_name ) . ' nicht gefunden.
' - . "→ Zum Regelwerk", - ); - } - - $rules = isset( $found_tab['rules'] ) && is_array( $found_tab['rules'] ) ? $found_tab['rules'] : array(); - - if ( empty( $rules ) ) { - return array( - 'source' => 'rules', - 'title' => '📜 ' . esc_html( $found_tab['title'] ), - 'content' => 'In dieser Kategorie sind noch keine Regeln hinterlegt.', - ); - } - - $html = ''; - foreach ( $rules as $rule ) { - $title = $rule['rule_title'] ?? ''; - $content = $rule['rule_content'] ?? ''; - - $content_plain = wp_strip_all_tags( $content ); - if ( mb_strlen( $content_plain ) > 300 ) { - $rendered = '

' - . esc_html( mb_substr( $content_plain, 0, 300 ) ) . '…

'; - } else { - $rendered = '
' - . wp_kses_post( $content ) - . '
'; - } - - $html .= '
'; - $html .= '📌 ' . esc_html( $title ) . ''; - $html .= $rendered; - $html .= '
'; - } - - // Zurück-Button zur Kategorieauswahl - $html .= '
'; - $html .= ''; - $html .= '' - . 'Im Browser öffnen'; - $html .= '
'; - - return array( - 'source' => 'rules', - 'title' => '📜 ' . esc_html( $found_tab['title'] ) . ' – ' . count( $rules ) . ' Regeln', - 'content' => $html, - ); -} - -/** - * Volltext-Suche über alle Tabs + Regeln. - */ -function mm_rules_search( $q_clean, $tabs, $rules_url ) { - $q_lc = mb_strtolower( $q_clean ); - $words = array_filter( preg_split( '/\s+/', $q_lc ), function( $w ) { - $stop = array( 'regel', 'regeln', 'ist', 'darf', 'ich', 'erlaubt', 'verboten', 'wie', 'was', 'kann' ); - return strlen( $w ) > 2 && ! in_array( $w, $stop, true ); - } ); - - $matches = array(); - - foreach ( $tabs as $tab ) { - $tab_title = $tab['title'] ?? 'Allgemein'; - if ( empty( $tab['rules'] ) || ! is_array( $tab['rules'] ) ) continue; - - foreach ( $tab['rules'] as $rule ) { - $r_title = mb_strtolower( $rule['rule_title'] ?? '' ); - $r_content = mb_strtolower( wp_strip_all_tags( $rule['rule_content'] ?? '' ) ); - $t_lc = mb_strtolower( $tab_title ); - $score = 0; - - if ( strpos( $r_title, $q_lc ) !== false ) $score += 30; - if ( strpos( $r_content, $q_lc ) !== false ) $score += 15; - if ( strpos( $t_lc, $q_lc ) !== false ) $score += 10; - - foreach ( $words as $w ) { - if ( strpos( $r_title, $w ) !== false ) $score += 12; - if ( strpos( $r_content, $w ) !== false ) $score += 5; - if ( strpos( $t_lc, $w ) !== false ) $score += 4; - } - - if ( $score > 0 ) { - $matches[] = array( - 'score' => $score, - 'tab' => $tab_title, - 'title' => $rule['rule_title'] ?? '', - 'content' => $rule['rule_content'] ?? '', - ); - } - } - } - - if ( empty( $matches ) ) { - // Keine Treffer → direkt zur Kategorieauswahl - $html = 'Keine Regel zu ' . esc_html( $q_clean ) . ' gefunden.

'; - $html .= 'Wähle eine Kategorie:

'; - $html .= '
'; - foreach ( $tabs as $tab ) { - $tab_title = $tab['title'] ?? 'Allgemein'; - $html .= ''; - } - $html .= '
'; - - return array( - 'source' => 'rules', - 'title' => '📜 Regelwerk', - 'content' => $html, - ); - } - - usort( $matches, function( $a, $b ) { return $b['score'] - $a['score']; } ); - $top = array_slice( $matches, 0, 3 ); - $html = ''; - - foreach ( $top as $r ) { - $content_plain = wp_strip_all_tags( $r['content'] ); - if ( mb_strlen( $content_plain ) > 300 ) { - $rendered = '

' - . esc_html( mb_substr( $content_plain, 0, 300 ) ) . '…

'; - } else { - $rendered = '
' - . wp_kses_post( $r['content'] ) - . '
'; - } - - $html .= '
'; - $html .= '📌 ' . esc_html( $r['title'] ) . ''; - $html .= ' (' . esc_html( $r['tab'] ) . ')'; - $html .= $rendered; - $html .= '
'; - } - - if ( count( $matches ) > 3 ) { - $html .= '' . ( count( $matches ) - 3 ) . ' weitere Treffer vorhanden.
'; - } - - $html .= '
'; - $html .= ''; - $html .= 'Im Browser öffnen'; - $html .= '
'; - - return array( - 'source' => 'rules', - 'title' => '📜 Regelwerk – ' . count( $matches ) . ' Treffer', - 'content' => $html, - ); -} - -// ============================================================ -// INTENT: WIKI (WP Multi Wiki Plugin) -// ============================================================ - -function mm_intent_wiki( $q ) { - if ( ! post_type_exists( 'wmw_article' ) ) return null; - - // Suchbegriff bereinigen - $search = preg_replace( '/\b(wiki|anleitung|guide|howto|how to|dokument|erkläre?|zeig mir)\b/i', '', $q ); - $search = trim( preg_replace( '/\s+/', ' ', $search ) ); - - if ( strlen( $search ) < 2 ) { - // Alle Wikis auflisten - if ( function_exists( 'wmw_get_wikis' ) ) { - $wikis = wmw_get_wikis(); - if ( ! empty( $wikis ) ) { - $links = array_map( function( $w ) { - return '→ ' - . esc_html( $w->post_title ) . ''; - }, $wikis ); - return [ - 'source' => 'wiki', - 'title' => '📖 Wiki', - 'content' => 'Verfügbare Wikis:
' . implode( '
', $links ), - ]; - } - } - return null; - } - - $args = [ - 'post_type' => 'wmw_article', - 'post_status' => 'publish', - 's' => $search, - 'posts_per_page' => 4, - 'orderby' => 'relevance', - ]; - $results = get_posts( $args ); - - if ( empty( $results ) ) { - // Fallback: alle Wiki-Artikel - $bot = get_option( 'mm_bot_data', [] ); - $url = ! empty( $bot['url_wiki'] ) ? $bot['url_wiki'] : ''; - $link = $url ? " → Wiki öffnen" : ''; - return [ - 'source' => 'wiki', - 'title' => '📖 Wiki', - 'content' => 'Kein Wiki-Artikel zu „' . esc_html( $search ) . '“ gefunden.' . $link, - ]; - } - - $html = []; - foreach ( $results as $post ) { - $excerpt = get_the_excerpt( $post->ID ); - $html[] = '📄 ' - . esc_html( $post->post_title ) . '' - . ( $excerpt ? '
' . wp_trim_words( $excerpt, 25, '…' ) . '' : '' ); - } - - return [ - 'source' => 'wiki', - 'title' => '📖 Wiki-Treffer', - 'content' => implode( '

', $html ), - ]; -} - -// ============================================================ -// INTENT: SHOP (WP Ingame Shop Pro) -// ============================================================ - -function mm_intent_shop( $q_lc, $bot ) { - global $wpdb; - $t_items = $wpdb->prefix . 'wis_items'; - $t_cats = $wpdb->prefix . 'wis_categories'; - - if ( $wpdb->get_var( "SHOW TABLES LIKE '$t_items'" ) !== $t_items ) return null; - - // DEBUG: Suchbegriff und Item-Anzahl loggen - if (!function_exists('mm_debug_log')) { - function mm_debug_log($msg) { - if (defined('WP_DEBUG') && WP_DEBUG) { - error_log('[MM SHOP] ' . $msg); - } - } - } - - mm_debug_log('Suchbegriff: ' . $q_lc); - - $currency = get_option( 'wis_currency_name', 'Coins' ); - $lines = []; - $img_base = get_option( 'wis_image_base_url', '' ); - $shop_url = $bot['url_shop'] ?? ''; - // Shop-Antwort-Box (grau, Card-Layout) - // $lines[] = '
'; - - // ── Tagesaktion nur anzeigen, wenn KEINE Preisabfrage ───────────────── - $is_price_query = false; - $search = $q_lc; - if (preg_match('/\b(was kostet|preis von|wie teuer|wie viel kostet|kosten von|preis für|preis)\b/i', $search)) { - $is_price_query = true; - } - if (!$is_price_query) { - $deal = $wpdb->get_row( "SELECT * FROM $t_items WHERE is_daily_deal = 1 AND status = 'publish' LIMIT 1" ); - if ( $deal ) { - $offer = isset( $deal->offer_price ) && $deal->offer_price > 0 ? $deal->offer_price : $deal->price; - $img = $img_base . str_replace(':', '_', $deal->item_id) . '.png'; - $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($deal->item_id) : ''; - $lines[] = '
' - . '🔥 Tagesaktion:
' - . '' . esc_attr($deal->name) . '' - . '
' . esc_html( $deal->name ) . '
' - . '' - . '' . esc_html( (string) $offer ) . ' ' . esc_html( $currency ) . '' - . ( $deal->price != $offer ? ' ' . esc_html( (string) $deal->price ) . '' : '' ) - . '' - . ( $item_link ? '
Zum Item im Shop' : '' ) - . '
'; - } - } - - // ── Suchbegriff extrahieren (auch für Preisabfragen) ──────────────── - // (is_price_query wurde oben schon gesetzt) - $search = $q_lc; - if ($is_price_query) { - // Nur das Item extrahieren - $search = preg_replace('/\b(shop|kaufen|kosten|preis|items?|angebot|tagesaktion|daily deal|kategorie|rang|was gibt|zeig|liste|was kostet|preis von|wie teuer|wie viel kostet|kosten von|preis für)\b/i', '', $search); - } else { - $search = preg_replace('/\b(shop|kaufen|kosten|preis|items?|angebot|tagesaktion|daily deal|kategorie|rang|was gibt|zeig|liste)\b/i', '', $search); - } - $search = trim(preg_replace('/\s+/', ' ', $search)); - // Satzzeichen am Anfang/Ende entfernen - $search = preg_replace('/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/u', '', $search); - - if (strlen($search) >= 3) { - mm_debug_log('Suchbegriff nach Extraktion: ' . $search); - // Spezifische Suche (auch für Preisabfragen) - $items = $wpdb->get_results($wpdb->prepare( - "SELECT * FROM $t_items - WHERE status = 'publish' AND (item_title LIKE %s OR name LIKE %s OR item_id LIKE %s) - ORDER BY price ASC LIMIT 8", - '%' . $wpdb->esc_like($search) . '%', - '%' . $wpdb->esc_like($search) . '%', - '%' . $wpdb->esc_like($search) . '%' - )); - mm_debug_log('LIKE-Query: ' . $search . ' | Treffer: ' . count($items)); - - if (!empty($items)) { - mm_debug_log('LIKE-Query erstes Item: ' . (isset($items[0]) ? json_encode($items[0]) : 'n/a')); - // Preisabfrage: Nur das erste Item als Preisantwort - if ($is_price_query) { - $item = $items[0]; - $img = $img_base . str_replace(':', '_', $item->item_id) . '.png'; - $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($item->item_id) : ''; - $item_display_name = $item->name ?: ($item->item_title ?: $item->item_id); - // Serverliste aufbereiten - $server_list = ''; - if (!empty($item->servers)) { - $servers = json_decode($item->servers, true); - if (is_array($servers) && count($servers) > 0) { - $server_list = '
Verfügbar auf: ' . esc_html(implode(', ', $servers)) . '
'; - } - } - $lines[] = '
' - . '
🛒 Shop-Item:
' - . '' . esc_attr($item_display_name) . '' - . '
' . esc_html($item_display_name) . '
' - . '
' . esc_html((string)$item->price) . ' ' . esc_html($currency) . '
' - . $server_list - . '
'; - } else { - $lines[] = '🛒 Gefundene Items:'; - foreach ($items as $item) { - $img = $img_base . str_replace(':', '_', $item->item_id) . '.png'; - $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($item->item_id) : ''; - $lines[] = '' . esc_attr($item->item_title) . '' - . '' . esc_html($item->item_title) . '' - . ' – ' . esc_html((string)$item->price) . ' ' . esc_html($currency) - . ($item_link ? ' [Shop]' : ''); - } - } - } else { - // Exakte Suche, falls LIKE nichts findet - $item = $wpdb->get_row($wpdb->prepare( - "SELECT * FROM $t_items WHERE status = 'publish' AND (name = %s OR item_id = %s OR item_title = %s) LIMIT 1", - $search, $search, $search - )); - mm_debug_log('Exakte Suche: ' . ($item ? json_encode($item) : 'kein Treffer')); - // Case-insensitive Fallback, falls nötig - if (!$item && !empty($search)) { - $item = $wpdb->get_row($wpdb->prepare( - "SELECT * FROM $t_items WHERE status = 'publish' AND (name COLLATE utf8_general_ci = %s COLLATE utf8_general_ci OR item_id COLLATE utf8_general_ci = %s COLLATE utf8_general_ci OR item_title COLLATE utf8_general_ci = %s COLLATE utf8_general_ci) LIMIT 1", - $search, $search, $search - )); - mm_debug_log('Case-insensitive Suche: ' . ($item ? json_encode($item) : 'kein Treffer')); - } - // Fallback: Suchbegriff als Minecraft-ID mit Prefix testen - if (!$item && !empty($search) && strpos($search, 'minecraft:') === false) { - $mc_id = 'minecraft:' . strtolower(str_replace([' ', '_'], ['_', '_'], $search)); - $item = $wpdb->get_row($wpdb->prepare( - "SELECT * FROM $t_items WHERE status = 'publish' AND (item_id = %s OR item_id COLLATE utf8_general_ci = %s COLLATE utf8_general_ci) LIMIT 1", - $mc_id, $mc_id - )); - mm_debug_log('MC-ID Fallback: ' . $mc_id . ' | ' . ($item ? json_encode($item) : 'kein Treffer')); - } - if ($item) { - mm_debug_log('Gefundenes Item (exakt/fallback): ' . json_encode($item)); - $img = $img_base . str_replace(':', '_', $item->item_id) . '.png'; - $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($item->item_id) : ''; - $lines[] = '
' - . '' . esc_attr($item->name) . '' - . '
' . esc_html($item->name) . '
' - . 'Preis: ' . esc_html((string)$item->price) . ' ' . esc_html($currency) . '' - . ($item_link ? ' [Shop]' : '') - . '
'; - } else { - // Aggressive Fuzzy-Suche als letzter Versuch - $all_items = $wpdb->get_results("SELECT * FROM $t_items WHERE status = 'publish'"); - mm_debug_log('Fuzzy-Suche über alle Items (' . count($all_items) . '): ' . $search); - $search_lc = mb_strtolower($search); - $fuzzy = null; - foreach ($all_items as $it) { - if (strpos(mb_strtolower($it->name), $search_lc) !== false - || strpos(mb_strtolower($it->item_title), $search_lc) !== false - || strpos(mb_strtolower($it->item_id), $search_lc) !== false) { - $fuzzy = $it; - break; - } - } - mm_debug_log('Fuzzy-Suche Treffer: ' . ($fuzzy ? json_encode($fuzzy) : 'kein Treffer')); - if ($fuzzy) { - $img = $img_base . str_replace(':', '_', $fuzzy->item_id) . '.png'; - $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($fuzzy->item_id) : ''; - $item_display_name = $fuzzy->name ?: ($fuzzy->item_title ?: $fuzzy->item_id); - // Serverliste aufbereiten - $server_list = ''; - if (!empty($fuzzy->servers)) { - $servers = json_decode($fuzzy->servers, true); - if (is_array($servers) && count($servers) > 0) { - $server_list = '
Verfügbar auf: ' . esc_html(implode(', ', $servers)) . '
'; - } - } - $lines[] = '
' - . '
🛒 Shop-Item:
' - . '' . esc_attr($item_display_name) . '' - . '
' . esc_html($item_display_name) . '
' - . '
' . esc_html((string)$fuzzy->price) . ' ' . esc_html($currency) . '
' - . $server_list - . '
'; - } else { - $lines[] = 'Kein Item mit „' . esc_html($search) . '“ gefunden.'; - } - } - } - } else { - // Übersicht: Kategorien + Item-Anzahl - $total = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $t_items WHERE status = 'publish'" ); - $lines[] = '🛒 Shop-Übersicht: ' . $total . ' Items verfügbar.'; - - $cats = $wpdb->get_results( - "SELECT c.name, COUNT(i.id) as cnt - FROM $t_cats c - LEFT JOIN $t_items i ON i.category_id = c.id AND i.status = 'publish' - GROUP BY c.id ORDER BY cnt DESC LIMIT 8" - ); - if ( ! empty( $cats ) ) { - $lines[] = '📂 Kategorien:'; - foreach ( $cats as $cat ) { - $lines[] = ' • ' . esc_html( $cat->name ) . ' (' . intval( $cat->cnt ) . ' Items)'; - } - } - - // Günstigste & teuerste Items - $cheapest = $wpdb->get_row( "SELECT item_title, price FROM $t_items WHERE status = 'publish' AND price > 0 ORDER BY price ASC LIMIT 1" ); - $priciest = $wpdb->get_row( "SELECT item_title, price FROM $t_items WHERE status = 'publish' ORDER BY price DESC LIMIT 1" ); - if ( $cheapest ) $lines[] = '💚 Günstigstes: ' . esc_html( $cheapest->item_title ) . ' – ' . esc_html( (string) $cheapest->price ) . ' ' . esc_html( $currency ); - if ( $priciest ) $lines[] = '💎 Teuerstes: ' . esc_html( $priciest->item_title ) . ' – ' . esc_html( (string) $priciest->price ) . ' ' . esc_html( $currency ); - } - - if ( $shop_url ) { - $lines[] = ""; - } - - return [ - 'source' => 'shop', - 'title' => '🛒 Shop', - 'content' => implode( '
', $lines ), - ]; -} - -// ============================================================ -// INTENT: TICKET (WP Multi Ticket Pro) -// ============================================================ - -function mm_intent_ticket( $q, $bot ) { - global $wpdb; - $table = $wpdb->prefix . 'wmt_tickets'; - $table_msg = $wpdb->prefix . 'wmt_messages'; - $exists = $wpdb->get_var( "SHOW TABLES LIKE '$table'" ) === $table; - - // ── Ticket per Nummer nachschlagen ──────────────────────── - if ( preg_match( '/#?(\d{3,6})\b/', $q, $m ) && $exists ) { - $ticket_id = intval( $m[1] ); - $ticket = $wpdb->get_row( $wpdb->prepare( - "SELECT id, subject, status, category, department, created_at, guest_name, guest_email - FROM $table WHERE id = %d", - $ticket_id - ) ); - - if ( $ticket ) { - // Letzte Nachricht - $last_msg = ''; - if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_msg'" ) === $table_msg ) { - $msg = $wpdb->get_row( $wpdb->prepare( - "SELECT message, created_at FROM $table_msg WHERE ticket_id = %d ORDER BY created_at DESC LIMIT 1", - $ticket_id - ) ); - if ( $msg ) { - $last_msg = '
💬 Letzte Nachricht: ' - . esc_html( wp_trim_words( $msg->message, 20, '…' ) ) - . ' (' . wp_date( 'd.m.Y H:i', strtotime( $msg->created_at ) ) . ')'; - } - } - - $lines = [ - '🎫 Ticket #' . $ticket->id . '', - '📋 Betreff: ' . esc_html( $ticket->subject ) . '', - '📌 Status: ' . esc_html( $ticket->status ) . '', - '🏷️ Kategorie: ' . esc_html( $ticket->category ?: '–' ), - ]; - if ( ! empty( $ticket->department ) ) { - $lines[] = '🏢 Abteilung: ' . esc_html( $ticket->department ); - } - if ( ! empty( $ticket->guest_name ) ) { - $lines[] = '👤 Von: ' . esc_html( $ticket->guest_name ); - } - $lines[] = '📅 Erstellt: ' . wp_date( 'd.m.Y \u\m H:i', strtotime( $ticket->created_at ) ); - if ( $last_msg ) $lines[] = $last_msg; - - return [ - 'source' => 'ticket', - 'title' => '🎫 Ticket #' . $ticket->id, - 'content' => implode( '
', $lines ), - ]; - } else { - return [ - 'source' => 'ticket', - 'title' => '🎫 Ticket nicht gefunden', - 'content' => 'Ticket #' . $ticket_id . ' existiert nicht.', - ]; - } - } - - // ── Allgemeine Ticket-Übersicht ──────────────────────────── - $lines = []; - - if ( $exists ) { - $open = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $table WHERE status NOT LIKE %s", '%Geschlossen%' ) ); - $closed = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $table WHERE status LIKE %s", '%Geschlossen%' ) ); - $total = $open + $closed; - - $lines[] = '📊 Gesamt: ' . $total . ' Tickets · Offen: ' . $open . ' · Geschlossen: ' . $closed . ''; - - // Kategorien anzeigen - $cats = $wpdb->get_results( - "SELECT COALESCE(category, 'Keine Kategorie') as cat, COUNT(*) as cnt - FROM $table GROUP BY category ORDER BY cnt DESC LIMIT 5" - ); - if ( ! empty( $cats ) ) { - $cat_parts = []; - foreach ( $cats as $c ) { - $cat_parts[] = esc_html( $c->cat ) . ' (' . intval( $c->cnt ) . ')'; - } - $lines[] = '📂 Kategorien: ' . implode( ' · ', $cat_parts ); - } - } - - $ticket_url = $bot['url_tickets'] ?? ''; - if ( $ticket_url ) { - $lines[] = "→ Neues Ticket erstellen"; - $lines[] = 'Oder gib eine Ticket-Nummer ein, z.B.: #1234'; - } else { - $lines[] = 'Bitte nutze das Support-Formular auf unserer Website.'; - } - - return [ - 'source' => 'ticket', - 'title' => '🎫 Support-Ticket', - 'content' => implode( '
', $lines ), - ]; -} - -// ============================================================ -// INTENT: FORUM (WP Business Forum) -// ============================================================ - -function mm_intent_forum( $q ) { - // Nur aktiv wenn WBF installiert UND URL im Backend gesetzt - $bot = get_option( 'mm_bot_data', [] ); - if ( ! class_exists( 'WBF_DB' ) ) return null; - if ( empty( $bot['url_forum'] ) ) return null; - - global $wpdb; - - $forum_url = esc_url( $bot['url_forum'] ); - $q_lc = mb_strtolower( $q ); - - // Tabellen prüfen — fehlen sie, früh abbrechen statt hängen - $t_tbl = $wpdb->prefix . 'forum_threads'; - $p_tbl = $wpdb->prefix . 'forum_posts'; - $u_tbl = $wpdb->prefix . 'forum_users'; - $c_tbl = $wpdb->prefix . 'forum_categories'; - - $tables_ok = ( - $wpdb->get_var( "SHOW TABLES LIKE '$t_tbl'" ) === $t_tbl && - $wpdb->get_var( "SHOW TABLES LIKE '$u_tbl'" ) === $u_tbl && - $wpdb->get_var( "SHOW TABLES LIKE '$c_tbl'" ) === $c_tbl - ); - - // ── Sub-Intent: Registrierung ───────────────────────────── - if ( preg_match( '/\b(registrier(en|ung)?|konto erstellen|account erstellen|sign.?up|einschreiben)\b/i', $q ) ) { - $lines = []; - if ( $tables_ok ) { - try { - $reg_mode = get_option( 'wbf_settings', [] )['registration_mode'] ?? 'open'; - $member_count = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $u_tbl WHERE role != 'banned'" ); - - $lines[] = '📝 Registrierung:'; - if ( $reg_mode === 'disabled' ) { - $lines[] = '❌ Die Registrierung ist derzeit deaktiviert.'; - } elseif ( $reg_mode === 'invite' ) { - $lines[] = '🔒 Das Forum nutzt Einladungscodes. Du benötigst einen gültigen Code.'; - } else { - $lines[] = '✅ Die Registrierung ist offen — jederzeit möglich.'; - } - if ( $member_count > 0 ) { - $lines[] = '👥 Bereits ' . $member_count . ' Mitglieder dabei.'; - } - } catch ( \Throwable $e ) { - $lines[] = '📝 Registrierung verfügbar.'; - } - } else { - $lines[] = '📝 Registrierung:'; - $lines[] = 'Erstelle deinen Account direkt im Forum.'; - } - $lines[] = "→ Zum Forum & Registrierung"; - return [ - 'source' => 'forum', - 'title' => '💬 Forum-Registrierung', - 'content' => implode( '
', $lines ), - ]; - } - - // ── Sub-Intent: Login / Passwort ────────────────────────── - if ( preg_match( '/\b(login|einloggen|passwort vergessen|passwort.?reset|zugangsdaten)\b/i', $q ) ) { - $lines = []; - $lines[] = '🔑 Forum-Login:'; - $lines[] = "→ Zum Forum & Login"; - if ( preg_match( '/passwort/i', $q ) ) { - $lines[] = '
🔓 Passwort vergessen?'; - $lines[] = 'Klicke auf der Login-Seite auf „Passwort vergessen".'; - } - return [ - 'source' => 'forum', - 'title' => '💬 Forum-Login', - 'content' => implode( '
', $lines ), - ]; - } - - // ── Sub-Intent: Profil ──────────────────────────────────── - if ( preg_match( '/\b(profil|mein konto|mein account|avatar|signatur|forum rang|forum level)\b/i', $q ) ) { - $lines = []; - $lines[] = '👤 Dein Forum-Profil enthält:'; - $lines[] = ' • Anzeigename, Avatar & Signatur'; - if ( class_exists( 'WBF_Levels' ) && WBF_Levels::is_enabled() ) { - $lines[] = ' • Level-System (basiert auf Beitragsanzahl)'; - } - $lines[] = ' • Rollen-Badge, Beitragsanzahl & Registrierungsdatum'; - $lines[] = "→ Zum Forum → Profil öffnen"; - return [ - 'source' => 'forum', - 'title' => '💬 Forum-Profil', - 'content' => implode( '
', $lines ), - ]; - } - - // ── Sub-Intent: Nachrichten / DM ────────────────────────── - if ( preg_match( '/\b(direktnachricht|forum nachricht|forum inbox|pn schreiben|privat.?nachricht)\b/i', $q ) ) { - $lines = []; - $lines[] = '✉️ Direktnachrichten im Forum:'; - $lines[] = 'Du kannst eingeloggten Mitgliedern direkt Nachrichten schreiben.'; - $lines[] = "→ Forum öffnen → Postfach"; - return [ - 'source' => 'forum', - 'title' => '💬 Forum-Nachrichten', - 'content' => implode( '
', $lines ), - ]; - } - - // ── Sub-Intent: Thread erstellen ────────────────────────── - if ( preg_match( '/\b(neuen thread|thread erstellen|beitrag erstellen|topic erstellen|im forum schreiben|im forum posten)\b/i', $q ) ) { - $lines = []; - $lines[] = '✏️ Neuen Thread erstellen:'; - $lines[] = '① Melde dich im Forum an.'; - $lines[] = '② Wähle die passende Kategorie.'; - $lines[] = '③ Klicke auf „Neuen Thread" und fülle Titel & Inhalt aus.'; - $lines[] = "→ Forum öffnen"; - return [ - 'source' => 'forum', - 'title' => '💬 Thread erstellen', - 'content' => implode( '
', $lines ), - ]; - } - - // ── Suchbegriff extrahieren ──────────────────────────────── - $search = preg_replace( '/\b(forum|diskussion|thread|thema|beitrag|post|kategorie|suche?)\b/i', '', $q ); - $search = trim( preg_replace( '/\s+/', ' ', $search ) ); - - // ── Thread-Suche ────────────────────────────────────────── - if ( strlen( $search ) >= 3 && $tables_ok ) { - try { - $threads = $wpdb->get_results( $wpdb->prepare( - "SELECT t.id, t.title, t.slug, t.reply_count, t.view_count, t.is_pinned, - c.name as cat_name - FROM {$t_tbl} t - LEFT JOIN {$c_tbl} c ON t.category_id = c.id - WHERE t.title LIKE %s AND t.deleted_at IS NULL - ORDER BY t.is_pinned DESC, t.created_at DESC LIMIT 5", - '%' . $wpdb->esc_like( $search ) . '%' - ) ); - - if ( ! empty( $threads ) ) { - $html = ''; - foreach ( $threads as $t ) { - $t_url = $forum_url . '?thread=' . esc_attr( $t->slug ); - $pin = $t->is_pinned ? '📌 ' : ''; - $meta = []; - if ( $t->reply_count > 0 ) $meta[] = $t->reply_count . ' Antworten'; - if ( $t->view_count > 0 ) $meta[] = $t->view_count . ' Aufrufe'; - $title_short = mb_strlen( $t->title ) > 50 ? mb_substr( $t->title, 0, 50 ) . '…' : $t->title; - $html .= '
'; - $html .= $pin . '' . esc_html( $title_short ) . ''; - if ( $t->cat_name ) $html .= ' · ' . esc_html( $t->cat_name ) . ''; - if ( ! empty( $meta ) ) $html .= '
' . implode( ' · ', $meta ) . ''; - $html .= '
'; - } - $html .= "
Alle Threads im Forum"; - return [ - 'source' => 'forum', - 'title' => '💬 Forum – ' . count( $threads ) . ' Treffer', - 'content' => $html, - ]; - } - - return [ - 'source' => 'forum', - 'title' => '💬 Forum', - 'content' => 'Kein Thread zu ' . esc_html( $search ) . ' gefunden.
' - . "→ Forum öffnen & selbst suchen", - ]; - } catch ( \Throwable $e ) { - // Bei DB-Fehler: einfach Übersicht zeigen - } - } - - // ── Allgemeine Übersicht mit Live-Statistiken ────────────── - $lines = []; - - if ( $tables_ok ) { - try { - $total_threads = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $t_tbl WHERE deleted_at IS NULL" ); - $total_posts = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $p_tbl WHERE deleted_at IS NULL" ); - $total_members = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $u_tbl WHERE role != 'banned'" ); - $online_count = (int) $wpdb->get_var( - "SELECT COUNT(*) FROM $u_tbl WHERE last_active >= DATE_SUB(NOW(), INTERVAL 5 MINUTE)" - ); - - $stat_parts = []; - if ( $total_threads > 0 ) $stat_parts[] = '' . $total_threads . ' Threads'; - if ( $total_posts > 0 ) $stat_parts[] = '' . $total_posts . ' Beiträge'; - if ( $total_members > 0 ) $stat_parts[] = '' . $total_members . ' Mitglieder'; - if ( ! empty( $stat_parts ) ) { - $lines[] = '📊 ' . implode( ' · ', $stat_parts ); - } - - $online_icon = $online_count > 0 ? '🟢' : '⚫'; - $lines[] = $online_icon . ' ' . ( $online_count > 0 - ? '' . $online_count . ' Mitglied' . ( $online_count > 1 ? 'er' : '' ) . ' gerade online' - : 'Aktuell niemand aktiv' ); - - // Kategorien - $cats = $wpdb->get_results( - "SELECT c.name, c.slug, COUNT(t.id) as thread_count - FROM {$c_tbl} c - LEFT JOIN {$t_tbl} t ON t.category_id = c.id AND t.deleted_at IS NULL - WHERE c.parent_id = 0 - GROUP BY c.id ORDER BY c.sort_order ASC LIMIT 6" - ); - if ( ! empty( $cats ) ) { - $lines[] = '
📂 Kategorien:'; - foreach ( $cats as $cat ) { - $c_url = $forum_url . '?cat=' . esc_attr( $cat->slug ); - $count = $cat->thread_count > 0 ? ' (' . (int) $cat->thread_count . ')' : ''; - $lines[] = ' → ' - . esc_html( $cat->name ) . '' . $count; - } - } - - // Neueste Threads - $recent = $wpdb->get_results( - "SELECT t.title, t.slug, t.reply_count - FROM {$t_tbl} t - WHERE t.deleted_at IS NULL AND t.is_pinned = 0 - ORDER BY t.created_at DESC LIMIT 3" - ); - if ( ! empty( $recent ) ) { - $lines[] = '
🆕 Neueste Threads:'; - foreach ( $recent as $r ) { - $t_url = $forum_url . '?thread=' . esc_attr( $r->slug ); - $title_short = mb_strlen( $r->title ) > 50 ? mb_substr( $r->title, 0, 50 ) . '…' : $r->title; - $replies = $r->reply_count > 0 ? ' (' . (int) $r->reply_count . ' Antw.)' : ''; - $lines[] = ' → ' - . esc_html( $title_short ) . '' . $replies; - } - } - } catch ( \Throwable $e ) { - $lines[] = '⚠️ Forum-Daten konnten nicht geladen werden.'; - } - } - - $lines[] = ( ! empty( $lines ) ? '
' : '' ) - . "→ Forum öffnen"; - - return [ - 'source' => 'forum', - 'title' => '💬 Forum', - 'content' => implode( '
', $lines ), - ]; -} - -// ============================================================ -// INTENT: GALERIE (MC MultiServer Gallery PRO) -// ============================================================ - -function mm_intent_gallery( $bot, $q_lc = '' ) { - $gallery_url = ! empty( $bot['url_gallery'] ) ? $bot['url_gallery'] : home_url( '/galerie' ); - - // ── Erkennen ob Upload-Frage ────────────────────────────── - $is_upload_query = (bool) preg_match( - '/hochlad|upload|uploaden|verifizier|verify|token|bild teilen|bilder teilen|wie.*bild|anleitung.*galerie/i', - $q_lc - ); - - $lines = []; - - // ── 1. Galerie-Link ────────────────────────────────────── - $lines[] = "📷 → Galerie öffnen"; - - // ── 2. Upload-Anleitung (bei Upload-Frage oder allgemein) ─ - if ( $is_upload_query ) { - $lines[] = '
'; - $lines[] = '📤 Bilder hochladen – so geht\'s:'; - $lines[] = '① Galerie öffnen und auf „Bilder hochladen" klicken.'; - $lines[] = '② Deinen Minecraft-Namen eingeben und den Server wählen → Session starten.'; - $lines[] = '③ Im Spiel den Befehl /verify [token] eingeben, um dich zu verifizieren.'; - $lines[] = '④ Screenshots auswählen (optional Album anlegen) → hochladen ✓'; - $lines[] = '💡 Der Verify-Token ist 5 Minuten gültig. Du musst dazu online auf dem Server sein.'; - } else { - // Kurz-Hinweis auf Upload auch bei allgemeiner Galerie-Frage - $lines[] = "🖼️ Du kannst eigene Screenshots direkt auf der Galerie-Seite hochladen."; - } - - // ── 3. Bild des Tages ──────────────────────────────────── - if ( post_type_exists( 'mc_gallery' ) ) { - $today_key = 'mc_daily_image_' . gmdate( 'Y-m-d' ); - $image_id = get_transient( $today_key ); - - if ( $image_id && wp_attachment_is_image( $image_id ) ) { - $img = wp_get_attachment_image_src( $image_id, 'medium' ); - $full = wp_get_attachment_image_src( $image_id, 'full' ); - $meta = get_post( $image_id ); - $uploader = ''; - - // Spielername aus Galerie-Post-Meta holen - if ( $meta && $meta->post_parent ) { - $player = get_post_meta( $meta->post_parent, 'mc_player', true ); - if ( $player ) { - $uploader = ' von ' . esc_html( $player ) . ''; - } - } - - if ( $img ) { - $lines[] = '
'; - $lines[] = '🌟 Bild des Tages' . $uploader . ':'; - $lines[] = "" - . "" - . ""; - } - } else { - // Kein Tagesbild gecacht → Hinweis - $lines[] = '📅 Heute noch kein Bild des Tages verfügbar.'; - } - - // Galerie-Statistik - $count = wp_count_posts( 'mc_gallery' ); - if ( $count && $count->publish > 0 ) { - $lines[] = '📁 ' . intval( $count->publish ) . ' Galerie(n) auf dem Server.'; - } - } - - return [ - 'source' => 'gallery', - 'title' => $is_upload_query ? '📤 Galerie & Upload' : '📷 Galerie', - 'content' => implode( '
', $lines ), - ]; -} - -// ============================================================ -// INTENT: FAQ (Custom Post Type 'faq') -// ============================================================ - -function mm_intent_faq( $q ) { - if ( ! post_type_exists( 'faq' ) ) return null; - - $search = preg_replace( '/\b(faq|häufig|frage|oft gefragt)\b/i', '', $q ); - $search = trim( $search ); - - $results = get_posts( [ - 'post_type' => 'faq', - 'post_status' => 'publish', - 's' => strlen( $search ) >= 3 ? $search : '', - 'posts_per_page' => 4, - 'orderby' => 'relevance', - ] ); - - if ( empty( $results ) ) return null; - - $html = '
'; - foreach ( $results as $post ) { - $title = esc_html( $post->post_title ); - $content = apply_filters( 'the_content', $post->post_content ); - $html .= '
'; - $html .= '
' . $title . '
'; - $html .= '
' . $content . '
'; - $html .= '
'; - } - $html .= '
'; - - return [ - 'source' => 'faq', - 'title' => 'FAQ', - 'content' => $html, - ]; -} - -// ============================================================ -// SPIELER-NAME EXTRAHIEREN -// ============================================================ - -function mm_extract_player_name( $q ) { - // Explizit: "von Steve", "spieler Steve", "für Steve" - if ( preg_match( '/(?:von|spieler|name|für|player|ban.*?von|bann.*?von)[:\s]+([A-Za-z0-9_]{3,16})/iu', $q, $m ) ) { - return $m[1]; - } - // "Steve ist gebannt", "ist Steve gebannt" - if ( preg_match( '/\b([A-Za-z0-9_]{3,16})\s+ist\s+(gebannt|gesperrt|online|offline)/i', $q, $m ) ) { - return $m[1]; - } - // "bin ich" → kein Name (eingeloggter User, kein Minecraft-Login hier) - if ( preg_match( '/\b(bin ich|ich bin|mein ban|mein status)\b/i', $q ) ) { - return ''; - } - // Allgemein: letztes kapitalisiertes Wort als Spielername (MC-Namen beginnen meist groß) - if ( preg_match_all( '/\b([A-Z][A-Za-z0-9_]{2,15})\b/', $q, $m ) ) { - $stop = [ 'Minecraft', 'Wiki', 'Forum', 'FAQ', 'Shop', 'Discord', 'Ban', 'Mute', - 'Kick', 'Warn', 'Spielzeit', 'Playtime', 'Galerie', 'Ticket', 'Support' ]; - foreach ( array_reverse( $m[1] ) as $candidate ) { - if ( ! in_array( $candidate, $stop, true ) ) { - return $candidate; - } - } - } - return ''; -} - -// ============================================================ -// FALLBACK -// ============================================================ - -function mm_fallback_response( $bot ) { - $hints = [ - '🖥️ Server – z.B. "Wie ist die Server-IP?"', - ]; - if ( ! empty( $bot['url_rules'] ) ) $hints[] = '📜 Regeln – z.B. "Ist PvP erlaubt?"'; - if ( ! empty( $bot['url_player_history'] ) ) $hints[] = '👤 Spieler-Info – z.B. "Spielzeit von Steve"'; - if ( ! empty( $bot['litebans_dashboard_url'] ) || ! empty( get_option( 'wp_litebans_pro_settings', [] )['db_name'] ) ) - $hints[] = '🔨 Ban-Status – z.B. "Ist Steve gebannt?"'; - if ( ! empty( $bot['url_wiki'] ) ) $hints[] = '📖 Wiki – z.B. "Wiki Befehle"'; - if ( ! empty( $bot['url_gallery'] ) ) $hints[] = '📷 Galerie – z.B. "Zeig die Galerie"'; - if ( ! empty( $bot['url_shop'] ) ) $hints[] = '🛒 Shop – z.B. "Was kostet ein Diamantschwert?"'; - if ( ! empty( $bot['url_tickets'] ) ) $hints[] = '🎫 Ticket – z.B. "Ticket erstellen"'; - - return [ - 'source' => 'fallback', - 'title' => '❓ Ich habe dazu keine Antwort', - 'content' => 'Versuche es mit einem dieser Themen:
' . implode( '
', $hints ), - ]; -} - -// ============================================================ -// RESPONSE BUILDER -// Alle Part-Arrays zu einem einzigen formatierten HTML-String -// zusammenführen. -// ============================================================ - -function mm_build_response( $parts ) { - if ( count( $parts ) === 1 ) { - $p = $parts[0]; - return [ - 'reply' => isset( $p['title'] ) - ? "{$p['title']}
{$p['content']}" - : $p['content'], - 'parts' => $parts, - ]; - } - - $blocks = []; - foreach ( $parts as $p ) { - $block = isset( $p['title'] ) ? "{$p['title']}
" : ''; - $block .= $p['content']; - $blocks[] = $block; - } - - return [ - 'reply' => implode( '
', $blocks ), - 'parts' => $parts, - ]; + 'Bitte gib eine Frage ein.', + 'parts' => [], + ] ); + } + + // "regeln:Kategorie" → direkt zu Rules-Intent, kein Scoring nötig + if ( preg_match( '/^regeln?:/iu', $q ) ) { + $bot = get_option( 'mm_bot_data', [] ); + $result = mm_intent_rules( $q, $bot ); + wp_send_json_success( mm_build_response( [ $result ] ) ); + } + + // "ban:Steve" → direkt zu Ban-Intent mit Spielername + if ( preg_match( '/^ban:(.+)$/iu', $q, $m ) ) { + $bot = get_option( 'mm_bot_data', [] ); + $name = trim( $m[1] ); + $result = mm_intent_ban_check( $q, $name, $bot ); + wp_send_json_success( mm_build_response( [ $result ] ) ); + } + + try { + $bot = get_option( 'mm_bot_data', [] ); + $parts = []; + + // ---- 1. Manuelle Q&A (höchste Priorität) -------------------- + if ( ! empty( $bot['qa'] ) ) { + foreach ( $bot['qa'] as $item ) { + if ( empty( $item['keys'] ) ) continue; + $keys = array_map( 'trim', explode( ',', mb_strtolower( $item['keys'] ) ) ); + foreach ( $keys as $k ) { + if ( $k !== '' && strpos( $q_lc, $k ) !== false ) { + $parts[] = [ + 'source' => 'qa', + 'content' => wp_kses_post( $item['val'] ), + ]; + break 2; + } + } + } + } + + if ( ! empty( $parts ) ) { + wp_send_json_success( mm_build_response( $parts ) ); + } + + // ---- Intent-Scores berechnen -------------------------------- + $intents = mm_score_intents( $q_lc, $q ); + arsort( $intents ); + $active = array_filter( $intents, function( $s ) { return $s > 0; } ); + + $player_name = mm_extract_player_name( $q ); + + // Wenn Discord-Intent erkannt wurde, NUR diesen ausführen + if (isset($active['discord'])) { + $result = mm_handle_intent('discord', $q, $q_lc, $player_name, $bot); + if ($result) { + $parts[] = $result; + } + } elseif (isset($active['team'])) { + $result = mm_handle_intent('team', $q, $q_lc, $player_name, $bot); + if ($result) { + $parts[] = $result; + } + } else { + foreach ( $active as $intent => $score ) { + // Ban-Intent dominant → Regeln nicht zusätzlich auslösen + if ( $intent === 'rules' && isset( $intents['ban_check'] ) && $intents['ban_check'] >= 25 ) { + continue; + } + // Ban-Intent dominant → Shop/Ticket/Forum nicht zusätzlich auslösen + if ( in_array( $intent, array( 'shop', 'ticket', 'forum' ), true ) + && isset( $intents['ban_check'] ) && $intents['ban_check'] >= 40 ) { + continue; + } + // Player-History dominant → Server-Status nicht zusätzlich auslösen + if ( $intent === 'server_status' + && isset( $intents['player_history'] ) && $intents['player_history'] >= 15 ) { + continue; + } + $result = mm_handle_intent( $intent, $q, $q_lc, $player_name, $bot ); + if ( $result ) { + $parts[] = $result; + } + } + } + + if ( empty( $parts ) ) { + $parts[] = mm_fallback_response( $bot ); + } + + wp_send_json_success( mm_build_response( $parts ) ); + + } catch ( \Throwable $e ) { + wp_send_json_success( [ + 'reply' => '⚠️ Interner Fehler: ' . esc_html( $e->getMessage() ), + 'parts' => [], + ] ); + } +} + +// ============================================================ +// INTENT SCORING +// Jeder Treffer erhöht den Score; der Intent mit dem höchsten +// Score wird zuerst beantwortet. Mehrere Intents möglich. +// ============================================================ + +function mm_score_intents( $q_lc, $q_raw ) { + $scores = [ + 'server_status' => 0, + 'ban_check' => 0, + 'player_history' => 0, + 'rules' => 0, + 'wiki' => 0, + 'shop' => 0, + 'ticket' => 0, + 'forum' => 0, + 'gallery' => 0, + 'faq' => 0, + 'discord' => 0, + 'team' => 0, + ]; + // Team + foreach ([ + 'team', 'teammitglieder', 'admins', 'moderatoren', 'wer ist im team', 'wer sind die admins', 'wer sind die moderatoren', 'serverteam', 'staff', 'supporter', 'admin', 'mod', 'leitung', 'server leitung', 'wer ist staff', 'wer ist admin', 'wer ist mod' + ] as $kw) { + if (strpos($q_lc, $kw) !== false) $scores['team'] += 20; + } + // Discord + foreach (['discord', 'dc', 'discord link', 'discord einladung', 'discord server', 'discord invite'] as $kw) { + if (strpos($q_lc, $kw) !== false) $scores['discord'] += 20; + } + + // Server-Status + foreach ( ['ip', 'adresse', 'join', 'einloggen', 'verbinden', 'server ip', + 'wie komme', 'online spieler', 'wieviele spieler', 'server status', + 'serveradresse', 'spieler online'] as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['server_status'] += 10; + } + + // Ban / Mute / Kick + foreach ( ['ban', 'gebannt', 'gesperrt', 'mute', 'gemutet', 'stumm', + 'kick', 'gekickt', 'warn', 'verwarnung', 'entban', 'unban', + 'antrag', 'sperre', 'strafe', 'strafen', 'bestraft', + 'meine strafen', 'mein ban', 'sanktion'] as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['ban_check'] += 15; + } + // Stärker gewichten bei Ich-Bezug + if ( preg_match( '/\b(bin ich|wurde ich|meine|mein)\b.*(gebannt|gesperrt|gemutet|strafe|ban|mute)/i', $q_raw ) ) { + $scores['ban_check'] += 20; + } + if ( preg_match( '/\b(meine strafen|strafen prüfen|mein status)\b/i', $q_raw ) ) { + $scores['ban_check'] += 25; + } + + // Player History + foreach ( ['spielzeit', 'playtime', 'zuletzt online', 'last seen', + 'letzte login', 'wie lang', 'wie lange', 'war online', + 'online status', 'ist online', 'stunden gespielt'] as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['player_history'] += 15; + } + + // Regeln + foreach ( array( 'regel', 'regeln', 'regelwerk', 'darf ich', 'ist erlaubt', + 'verboten', 'richtlinie', 'grief', 'stehlen', 'pvp', + 'chat regel', 'rule', 'verbote', + 'cheaten', 'cheat', 'hacks', 'hacken', 'modifikation', + 'beleidigung', 'schimpfen', 'respekt' ) as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['rules'] += 12; + } + + // Wiki + foreach ( ['wiki', 'dokumentation', 'guide', 'anleitung', 'howto', + 'how to', 'wie funktioniert', 'erkläre', 'erklärt'] as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['wiki'] += 12; + } + + // Shop + foreach ( [ + 'shop', 'kaufen', 'item', 'items', 'preis', 'kosten', + 'coins', 'tagesaktion', 'daily deal', 'angebot', 'kategorie', + 'warenkorb', 'bestellen', 'rang kaufen', + 'was kostet', 'wie teuer', 'preis von', 'kosten von', 'preis für', 'wie viel kostet' + ] as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['shop'] += 12; + } + + // Ticket / Support + foreach ( ['ticket', 'support', 'hilfe', 'problem melden', + 'bug melden', 'melde', 'anfrage', 'beschwerde', + 'anliegen', 'kontaktier'] as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['ticket'] += 12; + } + + // Forum + foreach ( ['forum', 'diskussion', 'thread', + 'neuen thread', 'thread erstellen', 'im forum posten', 'im forum schreiben', + 'forum login', 'passwort vergessen', 'forum kategorie', + 'forum nachricht', 'direktnachricht', 'forum profil', + 'forum rang', 'forum level', 'forum mitglieder'] as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['forum'] += 10; + } + + // Gallery + foreach ( [ + 'galerie', 'gallery', 'bild', 'bilder', 'screenshot', 'screenshots', + 'foto', 'fotos', 'tagesbild', 'bild des tages', + 'hochladen', 'upload', 'uploaden', 'bild teilen', 'bilder teilen', + 'verifizier', 'verify', '/verify', 'token galerie', + 'meine galerie', 'spieler galerie', 'galerie upload', + ] as $kw ) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['gallery'] += 10; + } + // Upload-Kontext stärker gewichten + if ( preg_match( '/\b(wie|kann ich|wie kann|anleitung|schritt)\b.*(bild|foto|screenshot|hochlad|upload)/i', $q_lc ) ) { + $scores['gallery'] += 20; + } + + // FAQ: Mehr Keywords und höheres Scoring, damit typische Fragen wie "Wie ...?", "Was ...?", "Wieso ...?", "Erklärung ..." erkannt werden + foreach ([ + 'faq', 'häufige frage', 'frequently', 'oft gefragt', + 'wie ', 'was ', 'wieso ', 'wo ', 'wer ', 'hilfe', 'erklärung', 'funktioniert', 'bedeutet', 'nutzen', 'benutzen', 'erkläre', 'erklärt', 'erfahre', 'erfahren', 'frage', 'fragen', 'hilfe', 'problem', 'tipp', 'tipps', 'anleitung', 'erläutere', 'erläutert', 'erläutern', 'erläutere', 'erläutert', 'erläutern', 'beschreibe', 'beschreibt', 'beschreiben', 'beschreibe', 'beschreibt', 'beschreiben', 'wie kann', 'wie mache', 'wie mache ich', 'wie funktioniert', 'wie nutze', 'wie benutze', 'wie setze', 'wie entferne', 'wie öffne', 'wie melde', 'wie erreiche', 'wie akzeptiere', 'wie fordere', 'wie wechsle', 'wie sehe', 'wie teleportiere', 'wie sende', 'wie setze ich', 'wie entferne ich', 'wie öffne ich', 'wie melde ich', 'wie erreiche ich', 'wie akzeptiere ich', 'wie fordere ich', 'wie wechsle ich', 'wie sehe ich', 'wie teleportiere ich', 'wie sende ich' + ] as $kw) { + if ( strpos( $q_lc, $kw ) !== false ) $scores['faq'] += 18; + } + + return $scores; +} + +// ============================================================ +// INTENT HANDLER DISPATCHER +// ============================================================ + +function mm_handle_intent( $intent, $q, $q_lc, $player_name, $bot ) { + switch ( $intent ) { + case 'server_status': return mm_intent_server_status( $bot ); + case 'ban_check': return mm_intent_ban_check( $q, $player_name, $bot ); + case 'player_history': return mm_intent_player_history( $q, $player_name ); + case 'rules': return mm_intent_rules( $q, $bot ); + case 'wiki': return mm_intent_wiki( $q ); + case 'shop': return mm_intent_shop( $q_lc, $bot ); + case 'ticket': return mm_intent_ticket( $q, $bot ); + case 'forum': return mm_intent_forum( $q ); + case 'gallery': return mm_intent_gallery( $bot, $q_lc ); + case 'faq': return mm_intent_faq( $q ); + case 'discord': return mm_intent_discord( $bot ); + case 'team': return mm_intent_team(); + } +} + +// ============================================================ +// INTENT: TEAM +// ============================================================ +function mm_intent_team() { + $query = new WP_Query( array( + 'post_type' => 'team_member', + 'posts_per_page' => -1, + 'orderby' => 'menu_order', + 'order' => 'ASC', + ) ); + if ( ! $query->have_posts() ) { + return [ + 'source' => 'team', + 'title' => '👥 Team', + 'content' => 'Es wurden noch keine Teammitglieder eingetragen.', + ]; + } + $html = '
'; + $html .= '
👥 Team
'; + while ( $query->have_posts() ) { + $query->the_post(); + $name = get_the_title(); + $rank = get_post_meta( get_the_ID(), '_team_member_rank', true ); + $uuid = get_post_meta( get_the_ID(), '_team_member_uuid', true ); + $img = get_the_post_thumbnail_url( get_the_ID(), 'medium' ); + $desc = get_the_excerpt(); + $avatar = ''; + if ( $uuid ) { + $avatar = 'https://visage.surgeplay.com/bust/' . esc_attr( $uuid ) . '.png'; + } elseif ( $img ) { + $avatar = $img; + } + $html .= '
'; + if ( $avatar ) { + $html .= '' . esc_attr( $name ) . ''; + } else { + $html .= '
' . esc_html( mb_substr( $name, 0, 1 ) ) . '
'; + } + $html .= '
'; + $html .= '
' . esc_html( $name ) . '
'; + if ( $rank ) { + $html .= '
' . esc_html( $rank ) . '
'; + } + if ( $desc ) { + $html .= '
' . esc_html( $desc ) . '
'; + } + $html .= '
'; + $html .= '
'; + } + $html .= '
'; + wp_reset_postdata(); + return [ + 'source' => 'team', + 'title' => '👥 Team', + 'content' => $html, + ]; +} +// ============================================================ +// INTENT: DISCORD +// ============================================================ + +function mm_intent_discord( $bot ) { + $discord = $bot['link_discord'] ?? ''; + if ( ! empty( $discord ) ) { + return [ + 'source' => 'discord', + 'title' => '💬 Discord', + 'content' => 'Hier ist der Discord-Einladungslink:
' . esc_html( $discord ) . '', + ]; + } else { + return [ + 'source' => 'discord', + 'title' => '💬 Discord', + 'content' => 'Es wurde kein Discord-Link im Backend hinterlegt.', + ]; + } +} + +// ============================================================ +// INTENT: SERVER STATUS (BungeeCord Status Plugin) +// ============================================================ + +function mm_intent_server_status( $bot ) { + $lines = array(); + + // ── 1. Statische Infos aus Bot-Setup ────────────────────── + $ip = $bot['server_ip'] ?? ''; + $ver = $bot['server_ver'] ?? ''; + $specs = $bot['server_specs'] ?? ''; + $discord = $bot['link_discord'] ?? ''; + + if ( $ip ) $lines[] = '🌐 Adresse: ' . esc_html( $ip ) . ''; + if ( $ver ) $lines[] = '🎮 Version: ' . esc_html( $ver ); + if ( $specs ) $lines[] = '🖥️ Server: ' . esc_html( $specs ); + + // ── 2. Live-Daten via BungeeCord-Status-Plugin ───────────── + $servers = get_option( 'mcss_servers', array() ); + + if ( ! empty( $servers ) && function_exists( 'mcss_fetch_server_with_ranks' ) ) { + $srv = $servers[0]; + $cache_key = 'mm_srv_' . md5( ( $srv['host'] ?? '' ) . ( $srv['player_port'] ?? '9191' ) ); + $data = get_transient( $cache_key ); + + // Caching-Zeit erhöht auf 60 Sekunden + if ( false === $data ) { + try { + $data = mcss_fetch_server_with_ranks( $srv ); + } catch ( \Throwable $e ) { + $data = null; + } + set_transient( $cache_key, $data, 60 ); + } + + if ( ! empty( $data ) && isset( $data['online'] ) ) { + $is_online = (bool) $data['online']; + $icon = $is_online ? '🟢' : '🔴'; + $status = $is_online ? 'Online' : 'Offline'; + + // Spieler-Anzahl (players = Array von Objekten) + $player_list = isset( $data['players'] ) && is_array( $data['players'] ) ? $data['players'] : array(); + $player_count = count( $player_list ); + $player_text = $is_online ? ' · ' . $player_count . ' Spieler online' : ''; + + $srv_label = ! empty( $srv['name'] ) ? esc_html( $srv['name'] ) . ': ' : ''; + $lines[] = $icon . ' ' . $srv_label . $status . $player_text; + + // Version vom Server + if ( $is_online && ! empty( $data['version'] ) && empty( $ver ) ) { + $lines[] = '🎮 Version: ' . esc_html( $data['version'] ); + } + + // MOTD + if ( $is_online && ! empty( $data['motd'] ) ) { + $motd = is_array( $data['motd'] ) + ? implode( ' ', $data['motd'] ) + : (string) $data['motd']; + $motd = trim( $motd ); + if ( $motd ) { + $lines[] = '💬 ' . mm_format_motd( $motd ); + } + } + + // Spieler auflisten (bis 8) + if ( $is_online && ! empty( $player_list ) ) { + $names = array(); + foreach ( array_slice( $player_list, 0, 8 ) as $p ) { + if ( is_array( $p ) && ! empty( $p['name'] ) ) { + $names[] = esc_html( $p['name'] ); + } elseif ( is_string( $p ) ) { + $names[] = esc_html( $p ); + } + } + if ( ! empty( $names ) ) { + $lines[] = '👥 Spieler: ' . implode( ', ', $names ) + . ( $player_count > 8 ? ' +' . ( $player_count - 8 ) . ' weitere' : '' ); + } + } + } + + // Weitere konfigurierte Server kurz anzeigen + if ( count( $servers ) > 1 ) { + $extra = array(); + foreach ( array_slice( $servers, 1 ) as $s ) { + if ( empty( $s['name'] ) ) continue; + $ck = 'mm_srv_' . md5( ( $s['host'] ?? '' ) . ( $s['player_port'] ?? '9191' ) ); + $d = get_transient( $ck ); + if ( false === $d && function_exists( 'mcss_fetch_server_with_ranks' ) ) { + try { + $d = mcss_fetch_server_with_ranks( $s ); + } catch ( \Throwable $e ) { + $d = null; + } + set_transient( $ck, $d, 60 ); + } + $on = ! empty( $d['online'] ); + $count = ( $on && ! empty( $d['players'] ) ) ? count( $d['players'] ) : 0; + $extra[] = ( $on ? '🟢' : '🔴' ) . ' ' . esc_html( $s['name'] ) + . ( $on ? ' (' . $count . ')' : '' ); + } + if ( ! empty( $extra ) ) { + $lines[] = '🗺️ Weitere Server: ' . implode( ' · ', $extra ); + } + } + } + + // ── 3. Kein Plugin, keine Daten ─────────────────────────── + if ( empty( $lines ) ) { + return array( + 'source' => 'server_status', + 'title' => '🖥️ Server-Status', + 'content' => 'Server-Infos wurden noch nicht konfiguriert. Bitte im Bot-Setup eintragen.', + ); + } + + // ── 4. Links (nur Discord, kein Wiki-Link mehr) ───────────── + if ( $discord ) { + $lines[] = '💬 Discord'; + } + + return array( + 'source' => 'server_status', + 'title' => '🖥️ Server-Status', + 'content' => implode( '
', $lines ), + ); +} + +// ============================================================ +// HILFSFUNKTION: Minecraft §-Farbcodes → HTML +// Unterstützt §0-§f (Farben) und §l/§o/§n/§m/§r (Format) +// ============================================================ + +function mm_format_motd( $text ) { + if ( empty( $text ) ) return ''; + + $colors = array( + '0' => '#000000', + '1' => '#0000AA', + '2' => '#00AA00', + '3' => '#00AAAA', + '4' => '#AA0000', + '5' => '#AA00AA', + '6' => '#FFAA00', + '7' => '#AAAAAA', + '8' => '#555555', + '9' => '#5555FF', + 'a' => '#55FF55', + 'b' => '#55FFFF', + 'c' => '#FF5555', + 'd' => '#FF55FF', + 'e' => '#FFFF55', + 'f' => '#FFFFFF', + ); + + // Normalisieren: § und & beide unterstützen + $section = "\xC2\xA7"; // UTF-8 für § + $text = str_replace( '&', $section, $text ); + + // Aufteilen nach §X Segmenten + $parts = preg_split( '/\xC2\xA7([0-9a-fklmnorA-FKLMNOR])/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); + $output = ''; + $open = 0; + $bold = false; + $italic = false; + + foreach ( $parts as $i => $part ) { + if ( $i % 2 === 0 ) { + // Text-Segment + if ( $part !== '' ) { + $output .= esc_html( $part ); + } + } else { + // Code-Segment + $code = strtolower( $part ); + + // Offene Spans schließen + if ( $open > 0 ) { + $output .= str_repeat( '', $open ); + $open = 0; + } + if ( $bold ) { $output .= '
'; $bold = false; } + if ( $italic ) { $output .= '
'; $italic = false; } + + if ( isset( $colors[ $code ] ) ) { + $output .= ''; + $open++; + } elseif ( $code === 'l' ) { + $output .= ''; + $bold = true; + } elseif ( $code === 'o' ) { + $output .= ''; + $italic = true; + } elseif ( $code === 'r' ) { + // Reset — alles schon geschlossen oben + } + // §k (obfuscated), §m (strike), §n (underline) ignorieren wir + } + } + + // Offene Tags schließen + if ( $open > 0 ) $output .= str_repeat( '', $open ); + if ( $bold ) $output .= ''; + if ( $italic ) $output .= ''; + + return $output; +} + +// ============================================================ +// INTENT: BAN / MUTE / KICK / WARN (LiteBans Manager) +// ============================================================ + +function mm_intent_ban_check( $q, $player_name, $bot ) { + $dashboard_url = isset( $bot["litebans_dashboard_url"] ) ? $bot["litebans_dashboard_url"] : ""; + + if ( empty( $player_name ) ) { + $html = '🔍 Welchen Spielernamen soll ich prüfen?

'; + $html .= 'Tippe deinen Minecraft-Namen direkt ein:

'; + $html .= '
'; + $html .= 'Format:'; + $html .= ''; + $html .= '
'; + $html .= '
Ersetze DeinName mit deinem echten Minecraft-Namen.
'; + $html .= 'Oder schreibe z.B.: ist Steve gebannt
'; + if ( $dashboard_url ) { + $html .= '

LiteBans Dashboard öffnen'; + } + return array( "source" => "ban_check", "title" => "🔨 Strafen prüfen", "content" => $html ); + } + + $info = mm_litebans_query( $player_name ); + + if ( is_null( $info ) ) { + return array( "source" => "ban_check", "title" => "🔨 Ban-Status", + "content" => "⚠️ LiteBans ist nicht konfiguriert oder die Datenbank ist nicht erreichbar." ); + } + + if ( isset( $info["not_found"] ) ) { + return array( "source" => "ban_check", "title" => "🔨 Ban-Status: " . esc_html( $player_name ), + "content" => "❓ Spieler " . esc_html( $player_name ) . " wurde in der LiteBans-Datenbank nicht gefunden." ); + } + + $lines = array(); + + // Avatar + Name + $lines[] = "
" + . "Avatar" + . "" . esc_html( $info["player"] ) . "" + . "
"; + + // Aktiver Ban + if ( $info["active_ban"] ) { + $b = $info["active_ban"]; + $lines[] = "
"; + $lines[] = "🚫 Aktiver Ban"; + $lines[] = "📋 Grund: " . esc_html( $b["reason"] ); + $lines[] = "👮 Von: " . esc_html( $b["by"] ); + $lines[] = "⏰ Bis: " . esc_html( $b["until"] ) . ""; + $lines[] = "
"; + } else { + $lines[] = "✅ Kein aktiver Ban"; + } + + // Aktiver Mute + if ( $info["active_mute"] ) { + $m = $info["active_mute"]; + $lines[] = "
"; + $lines[] = "🔇 Aktiver Mute"; + $lines[] = "📋 Grund: " . esc_html( $m["reason"] ); + $lines[] = "⏰ Bis: " . esc_html( $m["until"] ) . ""; + $lines[] = "
"; + } else { + $lines[] = "✅ Kein aktiver Mute"; + } + + // Kicks & Warns + $stats = array(); + if ( $info["kicks"] > 0 ) $stats[] = "👢 " . $info["kicks"] . " Kick(s)"; + if ( $info["warnings"] > 0 ) $stats[] = "⚠️ " . $info["warnings"] . " Verwarnung(en)"; + if ( ! empty( $stats ) ) $lines[] = implode( " · ", $stats ); + + // Ban-History + if ( ! empty( $info["ban_history"] ) ) { + $lines[] = "
🕐 Letzte Bestrafungen:"; + foreach ( $info["ban_history"] as $h ) { + $icon = $h["type"] === "ban" ? "🚫" : ( $h["type"] === "mute" ? "🔇" : ( $h["type"] === "kick" ? "👢" : "⚠️" ) ); + $lines[] = $icon . " " . esc_html( $h["date"] ) + . " – " . esc_html( $h["reason"] ) + . " (" . esc_html( $h["by"] ) . ")"; + } + } + + // Entbannungsanträge + if ( ! empty( $info["unban_requests"] ) ) { + $lines[] = "
📋 Entbannungsanträge:"; + foreach ( $info["unban_requests"] as $r ) { + $lines[] = $r["status"] . " – " . esc_html( $r["date"] ); + } + } + + // Links + $link_parts = array(); + if ( $dashboard_url ) { + $link_parts[] = "Dashboard"; + } + if ( $info["active_ban"] && $dashboard_url ) { + $unban_url = add_query_arg( array( + "lb_player" => $info["player"], + "lb_reason" => $info["active_ban"]["reason"], + ), $dashboard_url ); + $link_parts[] = "Entbannungsantrag stellen →"; + } + if ( ! empty( $link_parts ) ) $lines[] = "
" . implode( " · ", $link_parts ); + + $status_icon = $info["active_ban"] ? "🚫" : "✅"; + + return array( + "source" => "ban_check", + "title" => $status_icon . " Ban-Status: " . esc_html( $info["player"] ), + "content" => implode( "
", $lines ), + ); +} + +function mm_litebans_query( $player_name ) { + $settings = get_option( "wp_litebans_pro_settings", array() ); + if ( empty( $settings["db_name"] ) || empty( $settings["db_user"] ) ) return null; + + $prefix = isset( $settings["table_prefix"] ) ? $settings["table_prefix"] : "litebans_"; + $db_host = isset( $settings["db_host"] ) ? $settings["db_host"] : "localhost"; + if ( ! empty( $settings["db_port"] ) ) $db_host .= ":" . intval( $settings["db_port"] ); + + try { + $lbdb = new wpdb( $settings["db_user"], $settings["db_pass"], $settings["db_name"], $db_host ); + $lbdb->suppress_errors( true ); + $lbdb->prefix = $prefix; + } catch ( Exception $e ) { + return null; + } + + $name = sanitize_text_field( $player_name ); + + // UUID über history-Tabelle (wie das Plugin selbst) + $uuid = $lbdb->get_var( $lbdb->prepare( + "SELECT uuid FROM {$prefix}history WHERE name = %s ORDER BY id DESC LIMIT 1", $name + ) ); + + if ( empty( $uuid ) ) { + // Fuzzy-Suche + $row = $lbdb->get_row( $lbdb->prepare( + "SELECT uuid, name FROM {$prefix}history WHERE name LIKE %s ORDER BY id DESC LIMIT 1", + "%" . $lbdb->esc_like( $name ) . "%" + ) ); + if ( ! $row ) return array( "not_found" => true ); + $uuid = $row->uuid; + $name = $row->name; + } + + $info = array( "player" => $name, "active_ban" => null, "active_mute" => null, + "kicks" => 0, "warnings" => 0, "ban_history" => array(), "unban_requests" => array() ); + + // Aktiver Ban (via UUID) + $ban = $lbdb->get_row( $lbdb->prepare( + "SELECT reason, banned_by_name, until, active, removed_by_name FROM {$prefix}bans WHERE uuid = %s AND active = 1 ORDER BY time DESC LIMIT 1", $uuid + ) ); + if ( $ban && intval( $ban->active ) === 1 && empty( $ban->removed_by_name ) ) { + $until = (int) $ban->until; + $info["active_ban"] = array( + "reason" => mm_lb_clean( $ban->reason ), + "by" => $ban->banned_by_name, + "until" => ( $until <= 0 ) ? "Permanent" : date_i18n( "d.m.Y H:i", $until / 1000 ), + ); + } + + // Aktiver Mute (via UUID) + $mute = $lbdb->get_row( $lbdb->prepare( + "SELECT reason, banned_by_name, until, active, removed_by_name FROM {$prefix}mutes WHERE uuid = %s AND active = 1 ORDER BY time DESC LIMIT 1", $uuid + ) ); + if ( $mute && intval( $mute->active ) === 1 && empty( $mute->removed_by_name ) ) { + $until = (int) $mute->until; + $info["active_mute"] = array( + "reason" => mm_lb_clean( $mute->reason ), + "by" => $mute->banned_by_name, + "until" => ( $until <= 0 ) ? "Permanent" : date_i18n( "d.m.Y H:i", $until / 1000 ), + ); + } + + // Kicks & Warnings (UUID) + $info["kicks"] = (int) $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$prefix}kicks WHERE uuid = %s", $uuid ) ); + if ( $lbdb->get_var( "SHOW TABLES LIKE '{$prefix}warnings'" ) ) { + $info["warnings"] = (int) $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$prefix}warnings WHERE uuid = %s", $uuid ) ); + } + + // Ban-History (letzte 5 aller Typen) + $history = array(); + foreach ( array( "bans", "mutes", "kicks" ) as $t ) { + $rows = $lbdb->get_results( $lbdb->prepare( + "SELECT reason, banned_by_name, time FROM {$prefix}{$t} WHERE uuid = %s ORDER BY time DESC LIMIT 3", $uuid + ) ); + $type = rtrim( $t, "s" ); // bans→ban, mutes→mute, kicks→kick + foreach ( (array) $rows as $r ) { + $history[] = array( "type" => $type, "date" => date_i18n( "d.m.Y", $r->time / 1000 ), + "reason" => mm_lb_clean( $r->reason ), "by" => $r->banned_by_name, "ts" => $r->time ); + } + } + usort( $history, function( $a, $b ) { return $b["ts"] - $a["ts"]; } ); + $info["ban_history"] = array_slice( $history, 0, 5 ); + + // Entbannungsanträge (WP CPT) + $requests = get_posts( array( "post_type" => "unban_request", "posts_per_page" => 5, + "post_status" => "any", "meta_query" => array( array( "key" => "_lb_player", "value" => $name, "compare" => "=" ) ) ) ); + foreach ( $requests as $r ) { + $status = get_post_meta( $r->ID, "_lb_status", true ) ?: "pending"; + $label = $status === "approved" ? "✅ Angenommen" : ( $status === "rejected" ? "❌ Abgelehnt" : "⏳ Wartend" ); + $info["unban_requests"][] = array( "date" => get_the_date( "d.m.Y", $r->ID ), "status" => $label ); + } + + return $info; +} + +function mm_lb_clean( $text ) { + if ( ! $text ) return "–"; + return preg_replace( "/(?:§|&)[0-9a-fk-orA-FK-OR]/u", "", $text ); +} + +// ============================================================ +// INTENT: PLAYER HISTORY (MC Player History Plugin) +// ============================================================ +// INTENT: PLAYER HISTORY (MC Player History Plugin) +// ============================================================ + +function mm_intent_player_history( $q, $player_name ) { + $bot = get_option( 'mm_bot_data', [] ); + + // Nur aktiv wenn URL im Backend gesetzt + if ( empty( $bot['url_player_history'] ) ) return null; + + $history_url = $bot['url_player_history']; + + // Kein Spielername → Top-Liste + Hinweis + if ( empty( $player_name ) ) { + global $wpdb; + $table = $wpdb->prefix . 'mc_players'; + if ( $wpdb->get_var( "SHOW TABLES LIKE '$table'" ) !== $table ) { + return [ + 'source' => 'player_history', + 'title' => '👤 Spieler-History', + 'content' => 'Das MC Player History Plugin ist nicht installiert oder die Tabelle fehlt.', + ]; + } + + // Top 5 nach Spielzeit + $top = $wpdb->get_results( + "SELECT username, prefix, playtime_seconds, is_online + FROM $table WHERE playtime_seconds > 0 + ORDER BY playtime_seconds DESC LIMIT 5" + ); + + $html = 'Nenne mir einen Minecraft-Namen, z.B.: Spielzeit von Steve

'; + + if ( ! empty( $top ) ) { + $html .= '🏆 Top-Spieler:
'; + $i = 1; + foreach ( $top as $p ) { + $prefix_html = mm_ph_format_prefix( $p->prefix ); + $time_str = mm_format_playtime( (int) $p->playtime_seconds ); + $online_dot = $p->is_online ? '🟢' : '⚫'; + $html .= $online_dot . ' ' . ( $prefix_html ? $prefix_html . ' ' : '' ) + . '' . esc_html( $p->username ) . '' + . ' – ' . esc_html( $time_str ) . '
'; + $i++; + } + $html .= '
'; + } + + $html .= "→ Alle Spieler ansehen"; + + return [ + 'source' => 'player_history', + 'title' => '👤 Spieler-History', + 'content' => $html, + ]; + } + + // Spieler suchen + global $wpdb; + $table = $wpdb->prefix . 'mc_players'; + + if ( $wpdb->get_var( "SHOW TABLES LIKE '$table'" ) !== $table ) { + return [ + 'source' => 'player_history', + 'title' => '👤 Spieler-Info', + 'content' => 'MC Player History Plugin ist nicht aktiv oder Tabelle fehlt.', + ]; + } + + // Exakter Treffer + $row = $wpdb->get_row( $wpdb->prepare( + "SELECT username, prefix, is_online, first_seen, last_seen, playtime_seconds + FROM $table WHERE username = %s LIMIT 1", + $player_name + ) ); + + // Fuzzy-Suche als Fallback + if ( ! $row ) { + $row = $wpdb->get_row( $wpdb->prepare( + "SELECT username, prefix, is_online, first_seen, last_seen, playtime_seconds + FROM $table WHERE username LIKE %s LIMIT 1", + '%' . $wpdb->esc_like( $player_name ) . '%' + ) ); + } + + if ( ! $row ) { + return [ + 'source' => 'player_history', + 'title' => '👤 Spieler: ' . esc_html( $player_name ), + 'content' => '❓ Spieler ' . esc_html( $player_name ) . ' wurde noch nicht auf dem Server gesehen.' + . '

Spieler-Liste öffnen', + ]; + } + + $online_icon = $row->is_online + ? '🟢 Gerade online' + : '⚫ Offline'; + + $playtime = mm_format_playtime( (int) $row->playtime_seconds ); + $last_seen = $row->last_seen + ? wp_date( 'd.m.Y \u\m H:i \U\h\r', strtotime( $row->last_seen ) ) + : 'Unbekannt'; + $first_seen = $row->first_seen + ? wp_date( 'd.m.Y', strtotime( $row->first_seen ) ) + : 'Unbekannt'; + + $lines = [ + '📶 Status: ' . $online_icon, + '⏱️ Spielzeit: ' . esc_html( $playtime ) . '', + '🕐 Zuletzt gesehen: ' . esc_html( $last_seen ) . '', + '📅 Erstmals gesehen: ' . esc_html( $first_seen ) . '', + ]; + + // Rang / Prefix (mit MC-Farben) + if ( ! empty( $row->prefix ) ) { + $prefix_html = mm_ph_format_prefix( $row->prefix ); + if ( $prefix_html !== '' ) { + $lines[] = '🏷️ Rang: ' . $prefix_html; + } + } + + // Avatar + $lines[] = 'Avatar ' + . 'Spieler-Liste öffnen'; + + return [ + 'source' => 'player_history', + 'title' => '👤 Spieler: ' . esc_html( $row->username ), + 'content' => implode( '
', $lines ), + ]; +} + +/** + * Minecraft-Farbcodes in HTML umwandeln. + * Nutzt mcph_parse_minecraft_colors() vom Plugin wenn verfügbar, + * ansonsten eigene Implementierung als Fallback. + */ +function mm_ph_format_prefix( $prefix ) { + if ( empty( $prefix ) ) return ''; + + // Plugin-eigene Funktion bevorzugen + if ( function_exists( 'mcph_parse_minecraft_colors' ) ) { + return mcph_parse_minecraft_colors( $prefix ); + } + + // Fallback: eigene Implementierung + $map = [ + '&0' => '', + '&1' => '', + '&2' => '', + '&3' => '', + '&4' => '', + '&5' => '', + '&6' => '', + '&7' => '', + '&8' => '', + '&9' => '', + '&a' => '', + '&b' => '', + '&c' => '', + '&d' => '', + '&e' => '', + '&f' => '', + '&l' => '', + '&o' => '', + '&n' => '', + '&m' => '', + ]; + + // Anzahl geöffneter Spans zählen für sauberes Schließen + $open = 0; + $text = str_ireplace( array_keys( $map ), array_values( $map ), esc_html( $prefix ) ); + + // &r = alle schließen + $text = preg_replace_callback( '/&r/i', function() use ( &$open ) { + $close = str_repeat( '', $open ); + $open = 0; + return $close; + }, $text ); + + // Spans mitzählen + preg_match_all( '//', $text, $closes ); + $remaining = count( $opens[0] ) - count( $closes[0] ); + if ( $remaining > 0 ) { + $text .= str_repeat( '', $remaining ); + } + + return $text; +} + +/** Sekunden in lesbare Spielzeit umrechnen */ +function mm_format_playtime( $seconds ) { + if ( $seconds <= 0 ) return '0 Minuten'; + $h = floor( $seconds / 3600 ); + $m = floor( ( $seconds % 3600 ) / 60 ); + if ( $h > 0 ) return "{$h}h {$m}min"; + return "{$m} Minuten"; +} + +// ============================================================ +// INTENT: REGELN (Multi Rules Plugin) +// ============================================================ + +function mm_intent_rules( $q, $bot ) { + $rules_url = ! empty( $bot['url_rules'] ) ? $bot['url_rules'] : home_url( '/regeln' ); + $options = get_option( 'mrp_settings' ); + $tabs = isset( $options['tabs'] ) && is_array( $options['tabs'] ) ? $options['tabs'] : array(); + + // ── Schritt 2: Kategorie wurde gewählt → "regeln:Minecraft" ── + if ( preg_match( '/^regeln?:(.+)$/iu', trim( $q ), $m ) ) { + $chosen = trim( $m[1] ); + return mm_rules_show_tab( $chosen, $tabs, $rules_url ); + } + + // ── Spezifische Suche: Suchbegriff vorhanden ────────────── + $q_clean = trim( preg_replace( + '/\b(regel|regeln|regelwerk|zeig|alle|zeige|liste|gibt es|was sind)\b/iu', + '', $q + ) ); + $q_clean = trim( preg_replace( '/\s+/', ' ', $q_clean ) ); + + if ( strlen( $q_clean ) >= 3 ) { + return mm_rules_search( $q_clean, $tabs, $rules_url ); + } + + // ── Schritt 1: Allgemein → Kategorie-Auswahl ───────────── + if ( empty( $tabs ) ) { + return array( + 'source' => 'rules', + 'title' => '📜 Regelwerk', + 'content' => "→ Zum Regelwerk", + ); + } + + $html = 'Wähle eine Kategorie:

'; + $html .= '
'; + + foreach ( $tabs as $tab ) { + $tab_title = $tab['title'] ?? 'Allgemein'; + $rule_count = ! empty( $tab['rules'] ) ? count( $tab['rules'] ) : 0; + // Trigger: "regeln:Minecraft" + $query = 'regeln:' . $tab_title; + $html .= ''; + } + + $html .= '
'; + $html .= '
Alle Regeln im Browser öffnen'; + + return array( + 'source' => 'rules', + 'title' => '📜 Regelwerk', + 'content' => $html, + ); +} + +/** + * Alle Regeln eines bestimmten Tabs anzeigen. + */ +function mm_rules_show_tab( $tab_name, $tabs, $rules_url ) { + $found_tab = null; + + foreach ( $tabs as $tab ) { + if ( mb_strtolower( $tab['title'] ?? '' ) === mb_strtolower( $tab_name ) ) { + $found_tab = $tab; + break; + } + } + + // Fuzzy-Fallback + if ( ! $found_tab ) { + foreach ( $tabs as $tab ) { + if ( strpos( mb_strtolower( $tab['title'] ?? '' ), mb_strtolower( $tab_name ) ) !== false ) { + $found_tab = $tab; + break; + } + } + } + + if ( ! $found_tab ) { + return array( + 'source' => 'rules', + 'title' => '📜 Regelwerk', + 'content' => 'Kategorie ' . esc_html( $tab_name ) . ' nicht gefunden.
' + . "→ Zum Regelwerk", + ); + } + + $rules = isset( $found_tab['rules'] ) && is_array( $found_tab['rules'] ) ? $found_tab['rules'] : array(); + + if ( empty( $rules ) ) { + return array( + 'source' => 'rules', + 'title' => '📜 ' . esc_html( $found_tab['title'] ), + 'content' => 'In dieser Kategorie sind noch keine Regeln hinterlegt.', + ); + } + + $html = ''; + foreach ( $rules as $rule ) { + $title = $rule['rule_title'] ?? ''; + $content = $rule['rule_content'] ?? ''; + + $content_plain = wp_strip_all_tags( $content ); + if ( mb_strlen( $content_plain ) > 300 ) { + $rendered = '

' + . esc_html( mb_substr( $content_plain, 0, 300 ) ) . '…

'; + } else { + $rendered = '
' + . wp_kses_post( $content ) + . '
'; + } + + $html .= '
'; + $html .= '📌 ' . esc_html( $title ) . ''; + $html .= $rendered; + $html .= '
'; + } + + // Zurück-Button zur Kategorieauswahl + $html .= '
'; + $html .= ''; + $html .= '' + . 'Im Browser öffnen'; + $html .= '
'; + + return array( + 'source' => 'rules', + 'title' => '📜 ' . esc_html( $found_tab['title'] ) . ' – ' . count( $rules ) . ' Regeln', + 'content' => $html, + ); +} + +/** + * Volltext-Suche über alle Tabs + Regeln. + */ +function mm_rules_search( $q_clean, $tabs, $rules_url ) { + $q_lc = mb_strtolower( $q_clean ); + $words = array_filter( preg_split( '/\s+/', $q_lc ), function( $w ) { + $stop = array( 'regel', 'regeln', 'ist', 'darf', 'ich', 'erlaubt', 'verboten', 'wie', 'was', 'kann' ); + return strlen( $w ) > 2 && ! in_array( $w, $stop, true ); + } ); + + $matches = array(); + + foreach ( $tabs as $tab ) { + $tab_title = $tab['title'] ?? 'Allgemein'; + if ( empty( $tab['rules'] ) || ! is_array( $tab['rules'] ) ) continue; + + foreach ( $tab['rules'] as $rule ) { + $r_title = mb_strtolower( $rule['rule_title'] ?? '' ); + $r_content = mb_strtolower( wp_strip_all_tags( $rule['rule_content'] ?? '' ) ); + $t_lc = mb_strtolower( $tab_title ); + $score = 0; + + if ( strpos( $r_title, $q_lc ) !== false ) $score += 30; + if ( strpos( $r_content, $q_lc ) !== false ) $score += 15; + if ( strpos( $t_lc, $q_lc ) !== false ) $score += 10; + + foreach ( $words as $w ) { + if ( strpos( $r_title, $w ) !== false ) $score += 12; + if ( strpos( $r_content, $w ) !== false ) $score += 5; + if ( strpos( $t_lc, $w ) !== false ) $score += 4; + } + + if ( $score > 0 ) { + $matches[] = array( + 'score' => $score, + 'tab' => $tab_title, + 'title' => $rule['rule_title'] ?? '', + 'content' => $rule['rule_content'] ?? '', + ); + } + } + } + + if ( empty( $matches ) ) { + // Keine Treffer → direkt zur Kategorieauswahl + $html = 'Keine Regel zu ' . esc_html( $q_clean ) . ' gefunden.

'; + $html .= 'Wähle eine Kategorie:

'; + $html .= '
'; + foreach ( $tabs as $tab ) { + $tab_title = $tab['title'] ?? 'Allgemein'; + $html .= ''; + } + $html .= '
'; + + return array( + 'source' => 'rules', + 'title' => '📜 Regelwerk', + 'content' => $html, + ); + } + + usort( $matches, function( $a, $b ) { return $b['score'] - $a['score']; } ); + $top = array_slice( $matches, 0, 3 ); + $html = ''; + + foreach ( $top as $r ) { + $content_plain = wp_strip_all_tags( $r['content'] ); + if ( mb_strlen( $content_plain ) > 300 ) { + $rendered = '

' + . esc_html( mb_substr( $content_plain, 0, 300 ) ) . '…

'; + } else { + $rendered = '
' + . wp_kses_post( $r['content'] ) + . '
'; + } + + $html .= '
'; + $html .= '📌 ' . esc_html( $r['title'] ) . ''; + $html .= ' (' . esc_html( $r['tab'] ) . ')'; + $html .= $rendered; + $html .= '
'; + } + + if ( count( $matches ) > 3 ) { + $html .= '' . ( count( $matches ) - 3 ) . ' weitere Treffer vorhanden.
'; + } + + $html .= '
'; + $html .= ''; + $html .= 'Im Browser öffnen'; + $html .= '
'; + + return array( + 'source' => 'rules', + 'title' => '📜 Regelwerk – ' . count( $matches ) . ' Treffer', + 'content' => $html, + ); +} + +// ============================================================ +// INTENT: WIKI (WP Multi Wiki Plugin) +// ============================================================ + +function mm_intent_wiki( $q ) { + if ( ! post_type_exists( 'wmw_article' ) ) return null; + + // Suchbegriff bereinigen + $search = preg_replace( '/\b(wiki|anleitung|guide|howto|how to|dokument|erkläre?|zeig mir)\b/i', '', $q ); + $search = trim( preg_replace( '/\s+/', ' ', $search ) ); + + if ( strlen( $search ) < 2 ) { + // Alle Wikis auflisten + if ( function_exists( 'wmw_get_wikis' ) ) { + $wikis = wmw_get_wikis(); + if ( ! empty( $wikis ) ) { + $links = array_map( function( $w ) { + return '→ ' + . esc_html( $w->post_title ) . ''; + }, $wikis ); + return [ + 'source' => 'wiki', + 'title' => '📖 Wiki', + 'content' => 'Verfügbare Wikis:
' . implode( '
', $links ), + ]; + } + } + return null; + } + + $args = [ + 'post_type' => 'wmw_article', + 'post_status' => 'publish', + 's' => $search, + 'posts_per_page' => 4, + 'orderby' => 'relevance', + ]; + $results = get_posts( $args ); + + if ( empty( $results ) ) { + // Fallback: alle Wiki-Artikel + $bot = get_option( 'mm_bot_data', [] ); + $url = ! empty( $bot['url_wiki'] ) ? $bot['url_wiki'] : ''; + $link = $url ? " → Wiki öffnen" : ''; + return [ + 'source' => 'wiki', + 'title' => '📖 Wiki', + 'content' => 'Kein Wiki-Artikel zu „' . esc_html( $search ) . '“ gefunden.' . $link, + ]; + } + + $html = []; + foreach ( $results as $post ) { + $excerpt = get_the_excerpt( $post->ID ); + $html[] = '📄 ' + . esc_html( $post->post_title ) . '' + . ( $excerpt ? '
' . wp_trim_words( $excerpt, 25, '…' ) . '' : '' ); + } + + return [ + 'source' => 'wiki', + 'title' => '📖 Wiki-Treffer', + 'content' => implode( '

', $html ), + ]; +} + +// ============================================================ +// INTENT: SHOP (WP Ingame Shop Pro) +// ============================================================ + +function mm_intent_shop( $q_lc, $bot ) { + global $wpdb; + $t_items = $wpdb->prefix . 'wis_items'; + $t_cats = $wpdb->prefix . 'wis_categories'; + + if ( $wpdb->get_var( "SHOW TABLES LIKE '$t_items'" ) !== $t_items ) return null; + + // DEBUG: Suchbegriff und Item-Anzahl loggen + if (!function_exists('mm_debug_log')) { + function mm_debug_log($msg) { + if (defined('WP_DEBUG') && WP_DEBUG) { + error_log('[MM SHOP] ' . $msg); + } + } + } + + mm_debug_log('Suchbegriff: ' . $q_lc); + + $currency = get_option( 'wis_currency_name', 'Coins' ); + $lines = []; + $img_base = get_option( 'wis_image_base_url', '' ); + $shop_url = $bot['url_shop'] ?? ''; + // Shop-Antwort-Box (grau, Card-Layout) + // $lines[] = '
'; + + // ── Tagesaktion nur anzeigen, wenn KEINE Preisabfrage ───────────────── + $is_price_query = false; + $search = $q_lc; + if (preg_match('/\b(was kostet|preis von|wie teuer|wie viel kostet|kosten von|preis für|preis)\b/i', $search)) { + $is_price_query = true; + } + if (!$is_price_query) { + $deal = $wpdb->get_row( "SELECT * FROM $t_items WHERE is_daily_deal = 1 AND status = 'publish' LIMIT 1" ); + if ( $deal ) { + $offer = isset( $deal->offer_price ) && $deal->offer_price > 0 ? $deal->offer_price : $deal->price; + $img = $img_base . str_replace(':', '_', $deal->item_id) . '.png'; + $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($deal->item_id) : ''; + $lines[] = '
' + . '🔥 Tagesaktion:
' + . '' . esc_attr($deal->name) . '' + . '
' . esc_html( $deal->name ) . '
' + . '' + . '' . esc_html( (string) $offer ) . ' ' . esc_html( $currency ) . '' + . ( $deal->price != $offer ? ' ' . esc_html( (string) $deal->price ) . '' : '' ) + . '' + . ( $item_link ? '
Zum Item im Shop' : '' ) + . '
'; + } + } + + // ── Suchbegriff extrahieren (auch für Preisabfragen) ──────────────── + // (is_price_query wurde oben schon gesetzt) + $search = $q_lc; + if ($is_price_query) { + // Nur das Item extrahieren + $search = preg_replace('/\b(shop|kaufen|kosten|preis|items?|angebot|tagesaktion|daily deal|kategorie|rang|was gibt|zeig|liste|was kostet|preis von|wie teuer|wie viel kostet|kosten von|preis für)\b/i', '', $search); + } else { + $search = preg_replace('/\b(shop|kaufen|kosten|preis|items?|angebot|tagesaktion|daily deal|kategorie|rang|was gibt|zeig|liste)\b/i', '', $search); + } + $search = trim(preg_replace('/\s+/', ' ', $search)); + // Satzzeichen am Anfang/Ende entfernen + $search = preg_replace('/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/u', '', $search); + + if (strlen($search) >= 3) { + mm_debug_log('Suchbegriff nach Extraktion: ' . $search); + // Spezifische Suche (auch für Preisabfragen) + $items = $wpdb->get_results($wpdb->prepare( + "SELECT * FROM $t_items + WHERE status = 'publish' AND (item_title LIKE %s OR name LIKE %s OR item_id LIKE %s) + ORDER BY price ASC LIMIT 8", + '%' . $wpdb->esc_like($search) . '%', + '%' . $wpdb->esc_like($search) . '%', + '%' . $wpdb->esc_like($search) . '%' + )); + mm_debug_log('LIKE-Query: ' . $search . ' | Treffer: ' . count($items)); + + if (!empty($items)) { + mm_debug_log('LIKE-Query erstes Item: ' . (isset($items[0]) ? json_encode($items[0]) : 'n/a')); + // Preisabfrage: Nur das erste Item als Preisantwort + if ($is_price_query) { + $item = $items[0]; + $img = $img_base . str_replace(':', '_', $item->item_id) . '.png'; + $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($item->item_id) : ''; + $item_display_name = $item->name ?: ($item->item_title ?: $item->item_id); + // Serverliste aufbereiten + $server_list = ''; + if (!empty($item->servers)) { + $servers = json_decode($item->servers, true); + if (is_array($servers) && count($servers) > 0) { + $server_list = '
Verfügbar auf: ' . esc_html(implode(', ', $servers)) . '
'; + } + } + $lines[] = '
' + . '
🛒 Shop-Item:
' + . '' . esc_attr($item_display_name) . '' + . '
' . esc_html($item_display_name) . '
' + . '
' . esc_html((string)$item->price) . ' ' . esc_html($currency) . '
' + . $server_list + . '
'; + } else { + $lines[] = '🛒 Gefundene Items:'; + foreach ($items as $item) { + $img = $img_base . str_replace(':', '_', $item->item_id) . '.png'; + $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($item->item_id) : ''; + $lines[] = '' . esc_attr($item->item_title) . '' + . '' . esc_html($item->item_title) . '' + . ' – ' . esc_html((string)$item->price) . ' ' . esc_html($currency) + . ($item_link ? ' [Shop]' : ''); + } + } + } else { + // Exakte Suche, falls LIKE nichts findet + $item = $wpdb->get_row($wpdb->prepare( + "SELECT * FROM $t_items WHERE status = 'publish' AND (name = %s OR item_id = %s OR item_title = %s) LIMIT 1", + $search, $search, $search + )); + mm_debug_log('Exakte Suche: ' . ($item ? json_encode($item) : 'kein Treffer')); + // Case-insensitive Fallback, falls nötig + if (!$item && !empty($search)) { + $item = $wpdb->get_row($wpdb->prepare( + "SELECT * FROM $t_items WHERE status = 'publish' AND (name COLLATE utf8_general_ci = %s COLLATE utf8_general_ci OR item_id COLLATE utf8_general_ci = %s COLLATE utf8_general_ci OR item_title COLLATE utf8_general_ci = %s COLLATE utf8_general_ci) LIMIT 1", + $search, $search, $search + )); + mm_debug_log('Case-insensitive Suche: ' . ($item ? json_encode($item) : 'kein Treffer')); + } + // Fallback: Suchbegriff als Minecraft-ID mit Prefix testen + if (!$item && !empty($search) && strpos($search, 'minecraft:') === false) { + $mc_id = 'minecraft:' . strtolower(str_replace([' ', '_'], ['_', '_'], $search)); + $item = $wpdb->get_row($wpdb->prepare( + "SELECT * FROM $t_items WHERE status = 'publish' AND (item_id = %s OR item_id COLLATE utf8_general_ci = %s COLLATE utf8_general_ci) LIMIT 1", + $mc_id, $mc_id + )); + mm_debug_log('MC-ID Fallback: ' . $mc_id . ' | ' . ($item ? json_encode($item) : 'kein Treffer')); + } + if ($item) { + mm_debug_log('Gefundenes Item (exakt/fallback): ' . json_encode($item)); + $img = $img_base . str_replace(':', '_', $item->item_id) . '.png'; + $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($item->item_id) : ''; + $lines[] = '
' + . '' . esc_attr($item->name) . '' + . '
' . esc_html($item->name) . '
' + . 'Preis: ' . esc_html((string)$item->price) . ' ' . esc_html($currency) . '' + . ($item_link ? ' [Shop]' : '') + . '
'; + } else { + // Aggressive Fuzzy-Suche als letzter Versuch + $all_items = $wpdb->get_results("SELECT * FROM $t_items WHERE status = 'publish'"); + mm_debug_log('Fuzzy-Suche über alle Items (' . count($all_items) . '): ' . $search); + $search_lc = mb_strtolower($search); + $fuzzy = null; + foreach ($all_items as $it) { + if (strpos(mb_strtolower($it->name), $search_lc) !== false + || strpos(mb_strtolower($it->item_title), $search_lc) !== false + || strpos(mb_strtolower($it->item_id), $search_lc) !== false) { + $fuzzy = $it; + break; + } + } + mm_debug_log('Fuzzy-Suche Treffer: ' . ($fuzzy ? json_encode($fuzzy) : 'kein Treffer')); + if ($fuzzy) { + $img = $img_base . str_replace(':', '_', $fuzzy->item_id) . '.png'; + $item_link = $shop_url ? esc_url($shop_url) . '#item-' . urlencode($fuzzy->item_id) : ''; + $item_display_name = $fuzzy->name ?: ($fuzzy->item_title ?: $fuzzy->item_id); + // Serverliste aufbereiten + $server_list = ''; + if (!empty($fuzzy->servers)) { + $servers = json_decode($fuzzy->servers, true); + if (is_array($servers) && count($servers) > 0) { + $server_list = '
Verfügbar auf: ' . esc_html(implode(', ', $servers)) . '
'; + } + } + $lines[] = '
' + . '
🛒 Shop-Item:
' + . '' . esc_attr($item_display_name) . '' + . '
' . esc_html($item_display_name) . '
' + . '
' . esc_html((string)$fuzzy->price) . ' ' . esc_html($currency) . '
' + . $server_list + . '
'; + } else { + $lines[] = 'Kein Item mit „' . esc_html($search) . '“ gefunden.'; + } + } + } + } else { + // Übersicht: Kategorien + Item-Anzahl + $total = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $t_items WHERE status = 'publish'" ); + $lines[] = '🛒 Shop-Übersicht: ' . $total . ' Items verfügbar.'; + + $cats = $wpdb->get_results( + "SELECT c.name, COUNT(i.id) as cnt + FROM $t_cats c + LEFT JOIN $t_items i ON i.category_id = c.id AND i.status = 'publish' + GROUP BY c.id ORDER BY cnt DESC LIMIT 8" + ); + if ( ! empty( $cats ) ) { + $lines[] = '📂 Kategorien:'; + foreach ( $cats as $cat ) { + $lines[] = ' • ' . esc_html( $cat->name ) . ' (' . intval( $cat->cnt ) . ' Items)'; + } + } + + // Günstigste & teuerste Items + $cheapest = $wpdb->get_row( "SELECT item_title, price FROM $t_items WHERE status = 'publish' AND price > 0 ORDER BY price ASC LIMIT 1" ); + $priciest = $wpdb->get_row( "SELECT item_title, price FROM $t_items WHERE status = 'publish' ORDER BY price DESC LIMIT 1" ); + if ( $cheapest ) $lines[] = '💚 Günstigstes: ' . esc_html( $cheapest->item_title ) . ' – ' . esc_html( (string) $cheapest->price ) . ' ' . esc_html( $currency ); + if ( $priciest ) $lines[] = '💎 Teuerstes: ' . esc_html( $priciest->item_title ) . ' – ' . esc_html( (string) $priciest->price ) . ' ' . esc_html( $currency ); + } + + if ( $shop_url ) { + $lines[] = ""; + } + + return [ + 'source' => 'shop', + 'title' => '🛒 Shop', + 'content' => implode( '
', $lines ), + ]; +} + +// ============================================================ +// INTENT: TICKET (WP Multi Ticket Pro) +// ============================================================ + +function mm_intent_ticket( $q, $bot ) { + global $wpdb; + $table = $wpdb->prefix . 'wmt_tickets'; + $table_msg = $wpdb->prefix . 'wmt_messages'; + $exists = $wpdb->get_var( "SHOW TABLES LIKE '$table'" ) === $table; + + // ── Ticket per Nummer nachschlagen ──────────────────────── + if ( preg_match( '/#?(\d{3,6})\b/', $q, $m ) && $exists ) { + $ticket_id = intval( $m[1] ); + $ticket = $wpdb->get_row( $wpdb->prepare( + "SELECT id, subject, status, category, department, created_at, guest_name, guest_email + FROM $table WHERE id = %d", + $ticket_id + ) ); + + if ( $ticket ) { + // Letzte Nachricht + $last_msg = ''; + if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_msg'" ) === $table_msg ) { + $msg = $wpdb->get_row( $wpdb->prepare( + "SELECT message, created_at FROM $table_msg WHERE ticket_id = %d ORDER BY created_at DESC LIMIT 1", + $ticket_id + ) ); + if ( $msg ) { + $last_msg = '
💬 Letzte Nachricht: ' + . esc_html( wp_trim_words( $msg->message, 20, '…' ) ) + . ' (' . wp_date( 'd.m.Y H:i', strtotime( $msg->created_at ) ) . ')'; + } + } + + $lines = [ + '🎫 Ticket #' . $ticket->id . '', + '📋 Betreff: ' . esc_html( $ticket->subject ) . '', + '📌 Status: ' . esc_html( $ticket->status ) . '', + '🏷️ Kategorie: ' . esc_html( $ticket->category ?: '–' ), + ]; + if ( ! empty( $ticket->department ) ) { + $lines[] = '🏢 Abteilung: ' . esc_html( $ticket->department ); + } + if ( ! empty( $ticket->guest_name ) ) { + $lines[] = '👤 Von: ' . esc_html( $ticket->guest_name ); + } + $lines[] = '📅 Erstellt: ' . wp_date( 'd.m.Y \u\m H:i', strtotime( $ticket->created_at ) ); + if ( $last_msg ) $lines[] = $last_msg; + + return [ + 'source' => 'ticket', + 'title' => '🎫 Ticket #' . $ticket->id, + 'content' => implode( '
', $lines ), + ]; + } else { + return [ + 'source' => 'ticket', + 'title' => '🎫 Ticket nicht gefunden', + 'content' => 'Ticket #' . $ticket_id . ' existiert nicht.', + ]; + } + } + + // ── Allgemeine Ticket-Übersicht ──────────────────────────── + $lines = []; + + if ( $exists ) { + $open = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $table WHERE status NOT LIKE %s", '%Geschlossen%' ) ); + $closed = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $table WHERE status LIKE %s", '%Geschlossen%' ) ); + $total = $open + $closed; + + $lines[] = '📊 Gesamt: ' . $total . ' Tickets · Offen: ' . $open . ' · Geschlossen: ' . $closed . ''; + + // Kategorien anzeigen + $cats = $wpdb->get_results( + "SELECT COALESCE(category, 'Keine Kategorie') as cat, COUNT(*) as cnt + FROM $table GROUP BY category ORDER BY cnt DESC LIMIT 5" + ); + if ( ! empty( $cats ) ) { + $cat_parts = []; + foreach ( $cats as $c ) { + $cat_parts[] = esc_html( $c->cat ) . ' (' . intval( $c->cnt ) . ')'; + } + $lines[] = '📂 Kategorien: ' . implode( ' · ', $cat_parts ); + } + } + + $ticket_url = $bot['url_tickets'] ?? ''; + if ( $ticket_url ) { + $lines[] = "→ Neues Ticket erstellen"; + $lines[] = 'Oder gib eine Ticket-Nummer ein, z.B.: #1234'; + } else { + $lines[] = 'Bitte nutze das Support-Formular auf unserer Website.'; + } + + return [ + 'source' => 'ticket', + 'title' => '🎫 Support-Ticket', + 'content' => implode( '
', $lines ), + ]; +} + +// ============================================================ +// INTENT: FORUM (WP Business Forum) +// ============================================================ + +function mm_intent_forum( $q ) { + // Nur aktiv wenn WBF installiert UND URL im Backend gesetzt + $bot = get_option( 'mm_bot_data', [] ); + if ( ! class_exists( 'WBF_DB' ) ) return null; + if ( empty( $bot['url_forum'] ) ) return null; + + global $wpdb; + + $forum_url = esc_url( $bot['url_forum'] ); + $q_lc = mb_strtolower( $q ); + + // Tabellen prüfen — fehlen sie, früh abbrechen statt hängen + $t_tbl = $wpdb->prefix . 'forum_threads'; + $p_tbl = $wpdb->prefix . 'forum_posts'; + $u_tbl = $wpdb->prefix . 'forum_users'; + $c_tbl = $wpdb->prefix . 'forum_categories'; + + $tables_ok = ( + $wpdb->get_var( "SHOW TABLES LIKE '$t_tbl'" ) === $t_tbl && + $wpdb->get_var( "SHOW TABLES LIKE '$u_tbl'" ) === $u_tbl && + $wpdb->get_var( "SHOW TABLES LIKE '$c_tbl'" ) === $c_tbl + ); + + // ── Sub-Intent: Registrierung ───────────────────────────── + if ( preg_match( '/\b(registrier(en|ung)?|konto erstellen|account erstellen|sign.?up|einschreiben)\b/i', $q ) ) { + $lines = []; + if ( $tables_ok ) { + try { + $reg_mode = get_option( 'wbf_settings', [] )['registration_mode'] ?? 'open'; + $member_count = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $u_tbl WHERE role != 'banned'" ); + + $lines[] = '📝 Registrierung:'; + if ( $reg_mode === 'disabled' ) { + $lines[] = '❌ Die Registrierung ist derzeit deaktiviert.'; + } elseif ( $reg_mode === 'invite' ) { + $lines[] = '🔒 Das Forum nutzt Einladungscodes. Du benötigst einen gültigen Code.'; + } else { + $lines[] = '✅ Die Registrierung ist offen — jederzeit möglich.'; + } + if ( $member_count > 0 ) { + $lines[] = '👥 Bereits ' . $member_count . ' Mitglieder dabei.'; + } + } catch ( \Throwable $e ) { + $lines[] = '📝 Registrierung verfügbar.'; + } + } else { + $lines[] = '📝 Registrierung:'; + $lines[] = 'Erstelle deinen Account direkt im Forum.'; + } + $lines[] = "→ Zum Forum & Registrierung"; + return [ + 'source' => 'forum', + 'title' => '💬 Forum-Registrierung', + 'content' => implode( '
', $lines ), + ]; + } + + // ── Sub-Intent: Login / Passwort ────────────────────────── + if ( preg_match( '/\b(login|einloggen|passwort vergessen|passwort.?reset|zugangsdaten)\b/i', $q ) ) { + $lines = []; + $lines[] = '🔑 Forum-Login:'; + $lines[] = "→ Zum Forum & Login"; + if ( preg_match( '/passwort/i', $q ) ) { + $lines[] = '
🔓 Passwort vergessen?'; + $lines[] = 'Klicke auf der Login-Seite auf „Passwort vergessen".'; + } + return [ + 'source' => 'forum', + 'title' => '💬 Forum-Login', + 'content' => implode( '
', $lines ), + ]; + } + + // ── Sub-Intent: Profil ──────────────────────────────────── + if ( preg_match( '/\b(profil|mein konto|mein account|avatar|signatur|forum rang|forum level)\b/i', $q ) ) { + $lines = []; + $lines[] = '👤 Dein Forum-Profil enthält:'; + $lines[] = ' • Anzeigename, Avatar & Signatur'; + if ( class_exists( 'WBF_Levels' ) && WBF_Levels::is_enabled() ) { + $lines[] = ' • Level-System (basiert auf Beitragsanzahl)'; + } + $lines[] = ' • Rollen-Badge, Beitragsanzahl & Registrierungsdatum'; + $lines[] = "→ Zum Forum → Profil öffnen"; + return [ + 'source' => 'forum', + 'title' => '💬 Forum-Profil', + 'content' => implode( '
', $lines ), + ]; + } + + // ── Sub-Intent: Nachrichten / DM ────────────────────────── + if ( preg_match( '/\b(direktnachricht|forum nachricht|forum inbox|pn schreiben|privat.?nachricht)\b/i', $q ) ) { + $lines = []; + $lines[] = '✉️ Direktnachrichten im Forum:'; + $lines[] = 'Du kannst eingeloggten Mitgliedern direkt Nachrichten schreiben.'; + $lines[] = "→ Forum öffnen → Postfach"; + return [ + 'source' => 'forum', + 'title' => '💬 Forum-Nachrichten', + 'content' => implode( '
', $lines ), + ]; + } + + // ── Sub-Intent: Thread erstellen ────────────────────────── + if ( preg_match( '/\b(neuen thread|thread erstellen|beitrag erstellen|topic erstellen|im forum schreiben|im forum posten)\b/i', $q ) ) { + $lines = []; + $lines[] = '✏️ Neuen Thread erstellen:'; + $lines[] = '① Melde dich im Forum an.'; + $lines[] = '② Wähle die passende Kategorie.'; + $lines[] = '③ Klicke auf „Neuen Thread" und fülle Titel & Inhalt aus.'; + $lines[] = "→ Forum öffnen"; + return [ + 'source' => 'forum', + 'title' => '💬 Thread erstellen', + 'content' => implode( '
', $lines ), + ]; + } + + // ── Suchbegriff extrahieren ──────────────────────────────── + $search = preg_replace( '/\b(forum|diskussion|thread|thema|beitrag|post|kategorie|suche?)\b/i', '', $q ); + $search = trim( preg_replace( '/\s+/', ' ', $search ) ); + + // ── Thread-Suche ────────────────────────────────────────── + if ( strlen( $search ) >= 3 && $tables_ok ) { + try { + $threads = $wpdb->get_results( $wpdb->prepare( + "SELECT t.id, t.title, t.slug, t.reply_count, t.view_count, t.is_pinned, + c.name as cat_name + FROM {$t_tbl} t + LEFT JOIN {$c_tbl} c ON t.category_id = c.id + WHERE t.title LIKE %s AND t.deleted_at IS NULL + ORDER BY t.is_pinned DESC, t.created_at DESC LIMIT 5", + '%' . $wpdb->esc_like( $search ) . '%' + ) ); + + if ( ! empty( $threads ) ) { + $html = ''; + foreach ( $threads as $t ) { + $t_url = $forum_url . '?thread=' . esc_attr( $t->slug ); + $pin = $t->is_pinned ? '📌 ' : ''; + $meta = []; + if ( $t->reply_count > 0 ) $meta[] = $t->reply_count . ' Antworten'; + if ( $t->view_count > 0 ) $meta[] = $t->view_count . ' Aufrufe'; + $title_short = mb_strlen( $t->title ) > 50 ? mb_substr( $t->title, 0, 50 ) . '…' : $t->title; + $html .= '
'; + $html .= $pin . '' . esc_html( $title_short ) . ''; + if ( $t->cat_name ) $html .= ' · ' . esc_html( $t->cat_name ) . ''; + if ( ! empty( $meta ) ) $html .= '
' . implode( ' · ', $meta ) . ''; + $html .= '
'; + } + $html .= "
Alle Threads im Forum"; + return [ + 'source' => 'forum', + 'title' => '💬 Forum – ' . count( $threads ) . ' Treffer', + 'content' => $html, + ]; + } + + return [ + 'source' => 'forum', + 'title' => '💬 Forum', + 'content' => 'Kein Thread zu ' . esc_html( $search ) . ' gefunden.
' + . "→ Forum öffnen & selbst suchen", + ]; + } catch ( \Throwable $e ) { + // Bei DB-Fehler: einfach Übersicht zeigen + } + } + + // ── Allgemeine Übersicht mit Live-Statistiken ────────────── + $lines = []; + + if ( $tables_ok ) { + try { + $total_threads = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $t_tbl WHERE deleted_at IS NULL" ); + $total_posts = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $p_tbl WHERE deleted_at IS NULL" ); + $total_members = (int) $wpdb->get_var( "SELECT COUNT(*) FROM $u_tbl WHERE role != 'banned'" ); + $online_count = (int) $wpdb->get_var( + "SELECT COUNT(*) FROM $u_tbl WHERE last_active >= DATE_SUB(NOW(), INTERVAL 5 MINUTE)" + ); + + $stat_parts = []; + if ( $total_threads > 0 ) $stat_parts[] = '' . $total_threads . ' Threads'; + if ( $total_posts > 0 ) $stat_parts[] = '' . $total_posts . ' Beiträge'; + if ( $total_members > 0 ) $stat_parts[] = '' . $total_members . ' Mitglieder'; + if ( ! empty( $stat_parts ) ) { + $lines[] = '📊 ' . implode( ' · ', $stat_parts ); + } + + $online_icon = $online_count > 0 ? '🟢' : '⚫'; + $lines[] = $online_icon . ' ' . ( $online_count > 0 + ? '' . $online_count . ' Mitglied' . ( $online_count > 1 ? 'er' : '' ) . ' gerade online' + : 'Aktuell niemand aktiv' ); + + // Kategorien + $cats = $wpdb->get_results( + "SELECT c.name, c.slug, COUNT(t.id) as thread_count + FROM {$c_tbl} c + LEFT JOIN {$t_tbl} t ON t.category_id = c.id AND t.deleted_at IS NULL + WHERE c.parent_id = 0 + GROUP BY c.id ORDER BY c.sort_order ASC LIMIT 6" + ); + if ( ! empty( $cats ) ) { + $lines[] = '
📂 Kategorien:'; + foreach ( $cats as $cat ) { + $c_url = $forum_url . '?cat=' . esc_attr( $cat->slug ); + $count = $cat->thread_count > 0 ? ' (' . (int) $cat->thread_count . ')' : ''; + $lines[] = ' → ' + . esc_html( $cat->name ) . '' . $count; + } + } + + // Neueste Threads + $recent = $wpdb->get_results( + "SELECT t.title, t.slug, t.reply_count + FROM {$t_tbl} t + WHERE t.deleted_at IS NULL AND t.is_pinned = 0 + ORDER BY t.created_at DESC LIMIT 3" + ); + if ( ! empty( $recent ) ) { + $lines[] = '
🆕 Neueste Threads:'; + foreach ( $recent as $r ) { + $t_url = $forum_url . '?thread=' . esc_attr( $r->slug ); + $title_short = mb_strlen( $r->title ) > 50 ? mb_substr( $r->title, 0, 50 ) . '…' : $r->title; + $replies = $r->reply_count > 0 ? ' (' . (int) $r->reply_count . ' Antw.)' : ''; + $lines[] = ' → ' + . esc_html( $title_short ) . '' . $replies; + } + } + } catch ( \Throwable $e ) { + $lines[] = '⚠️ Forum-Daten konnten nicht geladen werden.'; + } + } + + $lines[] = ( ! empty( $lines ) ? '
' : '' ) + . "→ Forum öffnen"; + + return [ + 'source' => 'forum', + 'title' => '💬 Forum', + 'content' => implode( '
', $lines ), + ]; +} + +// ============================================================ +// INTENT: GALERIE (MC MultiServer Gallery PRO) +// ============================================================ + +function mm_intent_gallery( $bot, $q_lc = '' ) { + $gallery_url = ! empty( $bot['url_gallery'] ) ? $bot['url_gallery'] : home_url( '/galerie' ); + + // ── Erkennen ob Upload-Frage ────────────────────────────── + $is_upload_query = (bool) preg_match( + '/hochlad|upload|uploaden|verifizier|verify|token|bild teilen|bilder teilen|wie.*bild|anleitung.*galerie/i', + $q_lc + ); + + $lines = []; + + // ── 1. Galerie-Link ────────────────────────────────────── + $lines[] = "📷 → Galerie öffnen"; + + // ── 2. Upload-Anleitung (bei Upload-Frage oder allgemein) ─ + if ( $is_upload_query ) { + $lines[] = '
'; + $lines[] = '📤 Bilder hochladen – so geht\'s:'; + $lines[] = '① Galerie öffnen und auf „Bilder hochladen" klicken.'; + $lines[] = '② Deinen Minecraft-Namen eingeben und den Server wählen → Session starten.'; + $lines[] = '③ Im Spiel den Befehl /verify [token] eingeben, um dich zu verifizieren.'; + $lines[] = '④ Screenshots auswählen (optional Album anlegen) → hochladen ✓'; + $lines[] = '💡 Der Verify-Token ist 5 Minuten gültig. Du musst dazu online auf dem Server sein.'; + } else { + // Kurz-Hinweis auf Upload auch bei allgemeiner Galerie-Frage + $lines[] = "🖼️ Du kannst eigene Screenshots direkt auf der Galerie-Seite hochladen."; + } + + // ── 3. Bild des Tages ──────────────────────────────────── + if ( post_type_exists( 'mc_gallery' ) ) { + $today_key = 'mc_daily_image_' . gmdate( 'Y-m-d' ); + $image_id = get_transient( $today_key ); + + if ( $image_id && wp_attachment_is_image( $image_id ) ) { + $img = wp_get_attachment_image_src( $image_id, 'medium' ); + $full = wp_get_attachment_image_src( $image_id, 'full' ); + $meta = get_post( $image_id ); + $uploader = ''; + + // Spielername aus Galerie-Post-Meta holen + if ( $meta && $meta->post_parent ) { + $player = get_post_meta( $meta->post_parent, 'mc_player', true ); + if ( $player ) { + $uploader = ' von ' . esc_html( $player ) . ''; + } + } + + if ( $img ) { + $lines[] = '
'; + $lines[] = '🌟 Bild des Tages' . $uploader . ':'; + $lines[] = "" + . "" + . ""; + } + } else { + // Kein Tagesbild gecacht → Hinweis + $lines[] = '📅 Heute noch kein Bild des Tages verfügbar.'; + } + + // Galerie-Statistik + $count = wp_count_posts( 'mc_gallery' ); + if ( $count && $count->publish > 0 ) { + $lines[] = '📁 ' . intval( $count->publish ) . ' Galerie(n) auf dem Server.'; + } + } + + return [ + 'source' => 'gallery', + 'title' => $is_upload_query ? '📤 Galerie & Upload' : '📷 Galerie', + 'content' => implode( '
', $lines ), + ]; +} + +// ============================================================ +// INTENT: FAQ (Custom Post Type 'faq') +// ============================================================ + +function mm_intent_faq( $q ) { + if ( ! post_type_exists( 'faq' ) ) return null; + + $search = preg_replace( '/\b(faq|häufig|frage|oft gefragt)\b/i', '', $q ); + $search = trim( $search ); + + $results = get_posts( [ + 'post_type' => 'faq', + 'post_status' => 'publish', + 's' => strlen( $search ) >= 3 ? $search : '', + 'posts_per_page' => 4, + 'orderby' => 'relevance', + ] ); + + if ( empty( $results ) ) return null; + + $html = '
'; + foreach ( $results as $post ) { + $title = esc_html( $post->post_title ); + $content = apply_filters( 'the_content', $post->post_content ); + $html .= '
'; + $html .= '
' . $title . '
'; + $html .= '
' . $content . '
'; + $html .= '
'; + } + $html .= '
'; + + return [ + 'source' => 'faq', + 'title' => 'FAQ', + 'content' => $html, + ]; +} + +// ============================================================ +// SPIELER-NAME EXTRAHIEREN +// ============================================================ + +function mm_extract_player_name( $q ) { + // Explizit: "von Steve", "spieler Steve", "für Steve" + if ( preg_match( '/(?:von|spieler|name|für|player|ban.*?von|bann.*?von)[:\s]+([A-Za-z0-9_]{3,16})/iu', $q, $m ) ) { + return $m[1]; + } + // "Steve ist gebannt", "ist Steve gebannt" + if ( preg_match( '/\b([A-Za-z0-9_]{3,16})\s+ist\s+(gebannt|gesperrt|online|offline)/i', $q, $m ) ) { + return $m[1]; + } + // "bin ich" → kein Name (eingeloggter User, kein Minecraft-Login hier) + if ( preg_match( '/\b(bin ich|ich bin|mein ban|mein status)\b/i', $q ) ) { + return ''; + } + // Allgemein: letztes kapitalisiertes Wort als Spielername (MC-Namen beginnen meist groß) + if ( preg_match_all( '/\b([A-Z][A-Za-z0-9_]{2,15})\b/', $q, $m ) ) { + $stop = [ 'Minecraft', 'Wiki', 'Forum', 'FAQ', 'Shop', 'Discord', 'Ban', 'Mute', + 'Kick', 'Warn', 'Spielzeit', 'Playtime', 'Galerie', 'Ticket', 'Support' ]; + foreach ( array_reverse( $m[1] ) as $candidate ) { + if ( ! in_array( $candidate, $stop, true ) ) { + return $candidate; + } + } + } + return ''; +} + +// ============================================================ +// FALLBACK +// ============================================================ + +function mm_fallback_response( $bot ) { + $hints = [ + '🖥️ Server – z.B. "Wie ist die Server-IP?"', + ]; + if ( ! empty( $bot['url_rules'] ) ) $hints[] = '📜 Regeln – z.B. "Ist PvP erlaubt?"'; + if ( ! empty( $bot['url_player_history'] ) ) $hints[] = '👤 Spieler-Info – z.B. "Spielzeit von Steve"'; + if ( ! empty( $bot['litebans_dashboard_url'] ) || ! empty( get_option( 'wp_litebans_pro_settings', [] )['db_name'] ) ) + $hints[] = '🔨 Ban-Status – z.B. "Ist Steve gebannt?"'; + if ( ! empty( $bot['url_wiki'] ) ) $hints[] = '📖 Wiki – z.B. "Wiki Befehle"'; + if ( ! empty( $bot['url_gallery'] ) ) $hints[] = '📷 Galerie – z.B. "Zeig die Galerie"'; + if ( ! empty( $bot['url_shop'] ) ) $hints[] = '🛒 Shop – z.B. "Was kostet ein Diamantschwert?"'; + if ( ! empty( $bot['url_tickets'] ) ) $hints[] = '🎫 Ticket – z.B. "Ticket erstellen"'; + + return [ + 'source' => 'fallback', + 'title' => '❓ Ich habe dazu keine Antwort', + 'content' => 'Versuche es mit einem dieser Themen:
' . implode( '
', $hints ), + ]; +} + +// ============================================================ +// RESPONSE BUILDER +// Alle Part-Arrays zu einem einzigen formatierten HTML-String +// zusammenführen. +// ============================================================ + +function mm_build_response( $parts ) { + if ( count( $parts ) === 1 ) { + $p = $parts[0]; + return [ + 'reply' => isset( $p['title'] ) + ? "{$p['title']}
{$p['content']}" + : $p['content'], + 'parts' => $parts, + ]; + } + + $blocks = []; + foreach ( $parts as $p ) { + $block = isset( $p['title'] ) ? "{$p['title']}
" : ''; + $block .= $p['content']; + $blocks[] = $block; + } + + return [ + 'reply' => implode( '
', $blocks ), + 'parts' => $parts, + ]; } \ No newline at end of file diff --git a/Minecraft-Modern-Theme/inc/assistant-widget.php b/Minecraft-Modern-Theme/inc/assistant-widget.php index 5bdc670..f461f11 100644 --- a/Minecraft-Modern-Theme/inc/assistant-widget.php +++ b/Minecraft-Modern-Theme/inc/assistant-widget.php @@ -1,913 +1,913 @@ - 'mm_bot_sanitize_settings', - ] ); -} ); - -function mm_bot_sanitize_settings( $input ) { - $clean = []; - - $text_fields = [ 'server_ip', 'server_ver', 'server_specs', 'bot_name', 'welcome' ]; - $url_fields = [ - 'url_wiki', 'url_rules', 'url_tickets', 'url_faq', - 'url_team', 'url_shop', 'url_gallery', 'url_player_history', - 'url_forum', 'link_discord', 'litebans_dashboard_url', - ]; - - foreach ( $text_fields as $f ) { - $clean[ $f ] = isset( $input[ $f ] ) ? sanitize_text_field( $input[ $f ] ) : ''; - } - foreach ( $url_fields as $f ) { - $clean[ $f ] = isset( $input[ $f ] ) ? esc_url_raw( $input[ $f ] ) : ''; - } - - $clean['qa'] = []; - if ( ! empty( $input['qa'] ) && is_array( $input['qa'] ) ) { - foreach ( $input['qa'] as $item ) { - if ( empty( $item['keys'] ) ) continue; - $clean['qa'][] = [ - 'keys' => sanitize_text_field( $item['keys'] ), - 'val' => wp_kses_post( $item['val'] ), - ]; - } - } - - return $clean; -} - -// ========================================================================= -// 2. ADMIN-SEITE -// ========================================================================= - -// BUG-FIX: Funktion außerhalb von mm_render_bot_admin() definieren. -// Innerhalb einer Funktion definierte benannte Funktionen erzeugen einen -// Fatal Error "Cannot redeclare", wenn die äußere Funktion jemals ein -// zweites Mal ausgeführt wird (z.B. durch AJAX, REST, bestimmte Plugins). -if ( ! function_exists( 'mm_find_page_by_shortcode' ) ) : -function mm_find_page_by_shortcode( $shortcodes ) { - global $wpdb; - $conditions = []; - foreach ( (array) $shortcodes as $sc ) { - $conditions[] = $wpdb->prepare( 'post_content LIKE %s', '%[' . $wpdb->esc_like( $sc ) . '%' ); - } - if ( empty( $conditions ) ) return ''; - $where = implode( ' OR ', $conditions ); - $page = $wpdb->get_row( - "SELECT ID FROM {$wpdb->posts} - WHERE post_status = 'publish' - AND post_type IN ('page','post') - AND ({$where}) - LIMIT 1" - ); - return $page ? get_permalink( $page->ID ) : ''; -} -endif; - -function mm_render_bot_admin() { - $data = get_option( 'mm_bot_data', [] ); - ?> -
-

Bot-Zentrale

- - - -
- - - -
-

1. Server-Infos

- - - - - - - - - - - - - -
- -

Wird bei Fragen nach der Server-IP angezeigt.

-
- -

Wird bei Fragen nach der Server-Hardware angezeigt.

-
-
- - -
-

2. Bot-Einstellungen

- - - - - - - - - - - - - -
- - -

UUID / Name wird im Theme-Customizer unter "Assistent" gesetzt.

-
- -

Erster Text der beim Öffnen des Assistenten angezeigt wird.

-
-
- - -
-

3. Wichtige Links

-

- 💡 Wenn eine Seite mit dem passenden Shortcode gefunden wird, erscheint ein „Vorschlag übernehmen"-Button. -

- - mm_find_page_by_shortcode( ['wmw_wiki', 'wmw_search', 'wmw_article'] ), - 'url_rules' => mm_find_page_by_shortcode( ['mrp_rules', 'mc_rules', 'multi_rules'] ), - 'url_tickets' => mm_find_page_by_shortcode( ['wmtp_tickets', 'wm_tickets', 'multi_ticket'] ), - 'url_shop' => mm_find_page_by_shortcode( ['wis_shop', 'ingame_shop', 'wis_items'] ), - 'url_gallery' => mm_find_page_by_shortcode( ['mc_gallery', 'mc_gallery_overview', 'mc_gallery_upload', 'mc_gallery_all_albums'] ), - 'url_faq' => mm_find_page_by_shortcode( ['faq_list', 'faq', 'faq_page'] ), - 'url_player_history' => mm_find_page_by_shortcode( ['mc_player_history', 'mc_players', 'player_history'] ), - 'url_forum' => mm_find_page_by_shortcode( ['business_forum'] ), - 'litebans_dashboard_url' => mm_find_page_by_shortcode( ['litebans_dashboard', 'litebans', 'wp_litebans'] ), - ]; - - $links = [ - 'url_wiki' => [ 'label' => '📖 Wiki-URL', 'plugin' => 'WP Multi Wiki', 'active' => post_type_exists( 'wmw_article' ) ], - 'url_rules' => [ 'label' => '📜 Regelwerk-URL', 'plugin' => 'Multi Rules', 'active' => function_exists( 'mrp_get_plugin_version' ) ], - 'url_tickets' => [ 'label' => '🎫 Ticket/Support-URL', 'plugin' => 'WP Multi Ticket Pro', 'active' => class_exists( 'WP_Multi_Ticket_Pro' ) ], - 'url_shop' => [ 'label' => '🛒 Shop-URL', 'plugin' => 'WP Ingame Shop Pro', 'active' => class_exists( 'WIS_Activator' ) ], - 'url_gallery' => [ 'label' => '📷 Galerie-URL', 'plugin' => 'MC MultiServer Gallery PRO', 'active' => post_type_exists( 'mc_gallery' ) ], - 'url_faq' => [ 'label' => '❓ FAQ-URL', 'plugin' => 'FAQ Post Type', 'active' => post_type_exists( 'faq' ) ], - 'url_player_history' => [ 'label' => '👤 Spieler-History-URL', 'plugin' => 'MC Player History', 'active' => function_exists( 'mcph_get_plugin_version' ) ], - 'url_forum' => [ 'label' => '💬 Forum-URL', 'plugin' => 'WP Business Forum', 'active' => class_exists( 'WBF_DB' ) ], - 'url_team' => [ 'label' => '👥 Team-URL', 'plugin' => '', 'active' => true ], - 'link_discord' => [ 'label' => '💬 Discord-Einladung', 'plugin' => '', 'active' => true ], - 'litebans_dashboard_url' => [ 'label' => '🔨 LiteBans Dashboard-URL', 'plugin' => 'LiteBans Manager', 'active' => class_exists( 'WP_LiteBans_Pro' ) ], - ]; - ?> - - - - - - - - - $cfg ) : - $badge = ''; - if ( $cfg['plugin'] ) { - $cls = $cfg['active'] ? 'badge' : 'badge inactive'; - $txt = $cfg['active'] ? 'aktiv' : 'inaktiv'; - $badge = '' . esc_html( $cfg['plugin'] ) . ' ' . $txt . ''; - } - $saved = $data[ $key ] ?? ''; - $suggested = $autodetect[ $key ] ?? ''; - $show_suggest = $suggested && $suggested !== $saved; - ?> - - - - - -
-
- - - - - - - - ✔ Erkannt & gesetzt - -
-
-
- - -
-

4. Individuelle Q&A

-

- Schlüsselwörter (kommagetrennt) → Antwort. Hat höchste Priorität vor allen Plugin-Abfragen. -

- - - - - - -
SchlüsselwörterAntwort (HTML erlaubt)
-
- $item ) : - if ( empty( $item['keys'] ) ) continue; - ?> -
- - - -
- -
- -
- - -
-
- - - '🖥️ Server-Status', 'q' => 'server status' ]; - } - - // Regeln – nur wenn URL im Backend gesetzt - if ( ! empty( $data['url_rules'] ) ) { - $quick[] = [ 'label' => '📜 Regelwerk', 'q' => 'regeln' ]; - } - - // Wiki – nur wenn URL im Backend gesetzt - if ( ! empty( $data['url_wiki'] ) ) { - $quick[] = [ 'label' => '📖 Wiki', 'q' => 'wiki' ]; - } - - // Shop – nur wenn URL im Backend gesetzt - global $wpdb; - if ( ! empty( $data['url_shop'] ) ) { - $quick[] = [ 'label' => '🛒 Shop', 'q' => 'shop' ]; - } - - // Ticket / Support – nur wenn URL im Backend gesetzt - if ( ! empty( $data['url_tickets'] ) ) { - $quick[] = [ 'label' => '🎫 Support-Ticket', 'q' => 'ticket erstellen' ]; - } - - // Forum - if ( class_exists( 'WBF_DB' ) && ! empty( $data['url_forum'] ) ) { - $quick[] = [ 'label' => '💬 Forum', 'q' => 'forum' ]; - } - - // Galerie – nur wenn URL im Backend gesetzt - if ( ! empty( $data['url_gallery'] ) ) { - $quick[] = [ 'label' => '📷 Galerie', 'q' => 'galerie' ]; - } - - // Ban-Status - $lb = get_option( 'wp_litebans_pro_settings', [] ); - if ( ! empty( $lb['db_name'] ) ) { - $quick[] = [ 'label' => '🔨 Strafen prüfen', 'q' => 'meine strafen' ]; - } - - // Spieler-History – nur wenn URL im Backend gesetzt - if ( ! empty( $data['url_player_history'] ) ) { - $quick[] = [ 'label' => '⏱️ Spielzeit', 'q' => 'spielzeit' ]; - } - - // Discord - if ( ! empty( $data['link_discord'] ) ) { - $quick[] = [ 'label' => '💬 Discord', 'q' => 'discord' ]; - } - ?> - - -
- - - - - - -
- - - - - 'mm_bot_sanitize_settings', + ] ); +} ); + +function mm_bot_sanitize_settings( $input ) { + $clean = []; + + $text_fields = [ 'server_ip', 'server_ver', 'server_specs', 'bot_name', 'welcome' ]; + $url_fields = [ + 'url_wiki', 'url_rules', 'url_tickets', 'url_faq', + 'url_team', 'url_shop', 'url_gallery', 'url_player_history', + 'url_forum', 'link_discord', 'litebans_dashboard_url', + ]; + + foreach ( $text_fields as $f ) { + $clean[ $f ] = isset( $input[ $f ] ) ? sanitize_text_field( $input[ $f ] ) : ''; + } + foreach ( $url_fields as $f ) { + $clean[ $f ] = isset( $input[ $f ] ) ? esc_url_raw( $input[ $f ] ) : ''; + } + + $clean['qa'] = []; + if ( ! empty( $input['qa'] ) && is_array( $input['qa'] ) ) { + foreach ( $input['qa'] as $item ) { + if ( empty( $item['keys'] ) ) continue; + $clean['qa'][] = [ + 'keys' => sanitize_text_field( $item['keys'] ), + 'val' => wp_kses_post( $item['val'] ), + ]; + } + } + + return $clean; +} + +// ========================================================================= +// 2. ADMIN-SEITE +// ========================================================================= + +// BUG-FIX: Funktion außerhalb von mm_render_bot_admin() definieren. +// Innerhalb einer Funktion definierte benannte Funktionen erzeugen einen +// Fatal Error "Cannot redeclare", wenn die äußere Funktion jemals ein +// zweites Mal ausgeführt wird (z.B. durch AJAX, REST, bestimmte Plugins). +if ( ! function_exists( 'mm_find_page_by_shortcode' ) ) : +function mm_find_page_by_shortcode( $shortcodes ) { + global $wpdb; + $conditions = []; + foreach ( (array) $shortcodes as $sc ) { + $conditions[] = $wpdb->prepare( 'post_content LIKE %s', '%[' . $wpdb->esc_like( $sc ) . '%' ); + } + if ( empty( $conditions ) ) return ''; + $where = implode( ' OR ', $conditions ); + $page = $wpdb->get_row( + "SELECT ID FROM {$wpdb->posts} + WHERE post_status = 'publish' + AND post_type IN ('page','post') + AND ({$where}) + LIMIT 1" + ); + return $page ? get_permalink( $page->ID ) : ''; +} +endif; + +function mm_render_bot_admin() { + $data = get_option( 'mm_bot_data', [] ); + ?> +
+

Bot-Zentrale

+ + + +
+ + + +
+

1. Server-Infos

+ + + + + + + + + + + + + +
+ +

Wird bei Fragen nach der Server-IP angezeigt.

+
+ +

Wird bei Fragen nach der Server-Hardware angezeigt.

+
+
+ + +
+

2. Bot-Einstellungen

+ + + + + + + + + + + + + +
+ + +

UUID / Name wird im Theme-Customizer unter "Assistent" gesetzt.

+
+ +

Erster Text der beim Öffnen des Assistenten angezeigt wird.

+
+
+ + +
+

3. Wichtige Links

+

+ 💡 Wenn eine Seite mit dem passenden Shortcode gefunden wird, erscheint ein „Vorschlag übernehmen"-Button. +

+ + mm_find_page_by_shortcode( ['wmw_wiki', 'wmw_search', 'wmw_article'] ), + 'url_rules' => mm_find_page_by_shortcode( ['mrp_rules', 'mc_rules', 'multi_rules'] ), + 'url_tickets' => mm_find_page_by_shortcode( ['wmtp_tickets', 'wm_tickets', 'multi_ticket'] ), + 'url_shop' => mm_find_page_by_shortcode( ['wis_shop', 'ingame_shop', 'wis_items'] ), + 'url_gallery' => mm_find_page_by_shortcode( ['mc_gallery', 'mc_gallery_overview', 'mc_gallery_upload', 'mc_gallery_all_albums'] ), + 'url_faq' => mm_find_page_by_shortcode( ['faq_list', 'faq', 'faq_page'] ), + 'url_player_history' => mm_find_page_by_shortcode( ['mc_player_history', 'mc_players', 'player_history'] ), + 'url_forum' => mm_find_page_by_shortcode( ['business_forum'] ), + 'litebans_dashboard_url' => mm_find_page_by_shortcode( ['litebans_dashboard', 'litebans', 'wp_litebans'] ), + ]; + + $links = [ + 'url_wiki' => [ 'label' => '📖 Wiki-URL', 'plugin' => 'WP Multi Wiki', 'active' => post_type_exists( 'wmw_article' ) ], + 'url_rules' => [ 'label' => '📜 Regelwerk-URL', 'plugin' => 'Multi Rules', 'active' => function_exists( 'mrp_get_plugin_version' ) ], + 'url_tickets' => [ 'label' => '🎫 Ticket/Support-URL', 'plugin' => 'WP Multi Ticket Pro', 'active' => class_exists( 'WP_Multi_Ticket_Pro' ) ], + 'url_shop' => [ 'label' => '🛒 Shop-URL', 'plugin' => 'WP Ingame Shop Pro', 'active' => class_exists( 'WIS_Activator' ) ], + 'url_gallery' => [ 'label' => '📷 Galerie-URL', 'plugin' => 'MC MultiServer Gallery PRO', 'active' => post_type_exists( 'mc_gallery' ) ], + 'url_faq' => [ 'label' => '❓ FAQ-URL', 'plugin' => 'FAQ Post Type', 'active' => post_type_exists( 'faq' ) ], + 'url_player_history' => [ 'label' => '👤 Spieler-History-URL', 'plugin' => 'MC Player History', 'active' => function_exists( 'mcph_get_plugin_version' ) ], + 'url_forum' => [ 'label' => '💬 Forum-URL', 'plugin' => 'WP Business Forum', 'active' => class_exists( 'WBF_DB' ) ], + 'url_team' => [ 'label' => '👥 Team-URL', 'plugin' => '', 'active' => true ], + 'link_discord' => [ 'label' => '💬 Discord-Einladung', 'plugin' => '', 'active' => true ], + 'litebans_dashboard_url' => [ 'label' => '🔨 LiteBans Dashboard-URL', 'plugin' => 'LiteBans Manager', 'active' => class_exists( 'WP_LiteBans_Pro' ) ], + ]; + ?> + + + + + + + + + $cfg ) : + $badge = ''; + if ( $cfg['plugin'] ) { + $cls = $cfg['active'] ? 'badge' : 'badge inactive'; + $txt = $cfg['active'] ? 'aktiv' : 'inaktiv'; + $badge = '' . esc_html( $cfg['plugin'] ) . ' ' . $txt . ''; + } + $saved = $data[ $key ] ?? ''; + $suggested = $autodetect[ $key ] ?? ''; + $show_suggest = $suggested && $suggested !== $saved; + ?> + + + + + +
+
+ + + + + + + + ✔ Erkannt & gesetzt + +
+
+
+ + +
+

4. Individuelle Q&A

+

+ Schlüsselwörter (kommagetrennt) → Antwort. Hat höchste Priorität vor allen Plugin-Abfragen. +

+ + + + + + +
SchlüsselwörterAntwort (HTML erlaubt)
+
+ $item ) : + if ( empty( $item['keys'] ) ) continue; + ?> +
+ + + +
+ +
+ +
+ + +
+
+ + + '🖥️ Server-Status', 'q' => 'server status' ]; + } + + // Regeln – nur wenn URL im Backend gesetzt + if ( ! empty( $data['url_rules'] ) ) { + $quick[] = [ 'label' => '📜 Regelwerk', 'q' => 'regeln' ]; + } + + // Wiki – nur wenn URL im Backend gesetzt + if ( ! empty( $data['url_wiki'] ) ) { + $quick[] = [ 'label' => '📖 Wiki', 'q' => 'wiki' ]; + } + + // Shop – nur wenn URL im Backend gesetzt + global $wpdb; + if ( ! empty( $data['url_shop'] ) ) { + $quick[] = [ 'label' => '🛒 Shop', 'q' => 'shop' ]; + } + + // Ticket / Support – nur wenn URL im Backend gesetzt + if ( ! empty( $data['url_tickets'] ) ) { + $quick[] = [ 'label' => '🎫 Support-Ticket', 'q' => 'ticket erstellen' ]; + } + + // Forum + if ( class_exists( 'WBF_DB' ) && ! empty( $data['url_forum'] ) ) { + $quick[] = [ 'label' => '💬 Forum', 'q' => 'forum' ]; + } + + // Galerie – nur wenn URL im Backend gesetzt + if ( ! empty( $data['url_gallery'] ) ) { + $quick[] = [ 'label' => '📷 Galerie', 'q' => 'galerie' ]; + } + + // Ban-Status + $lb = get_option( 'wp_litebans_pro_settings', [] ); + if ( ! empty( $lb['db_name'] ) ) { + $quick[] = [ 'label' => '🔨 Strafen prüfen', 'q' => 'meine strafen' ]; + } + + // Spieler-History – nur wenn URL im Backend gesetzt + if ( ! empty( $data['url_player_history'] ) ) { + $quick[] = [ 'label' => '⏱️ Spielzeit', 'q' => 'spielzeit' ]; + } + + // Discord + if ( ! empty( $data['link_discord'] ) ) { + $quick[] = [ 'label' => '💬 Discord', 'q' => 'discord' ]; + } + ?> + + +
+ + + + + + +
+ + + + + add_section( 'mm_bewerbung_section', array( + 'title' => __( 'Bewerbungsformular', 'minecraft-modern-theme' ), + 'priority' => 80, + ) ); + + $wp_customize->add_setting( 'mm_bewerbung_enabled', array( + 'default' => false, + 'sanitize_callback' => 'wp_validate_boolean', + ) ); + $wp_customize->add_control( 'mm_bewerbung_enabled', array( + 'label' => __( 'Bewerbungsformular aktivieren', 'minecraft-modern-theme' ), + 'description' => __( 'Schaltet die Bewerbungsseite und das Formular ein.', 'minecraft-modern-theme' ), + 'section' => 'mm_bewerbung_section', + 'type' => 'checkbox', + ) ); + + $wp_customize->add_setting( 'mm_bewerbung_title', array( + 'default' => __( 'Bewirb dich bei uns!', 'minecraft-modern-theme' ), + 'sanitize_callback' => 'sanitize_text_field', + ) ); + $wp_customize->add_control( 'mm_bewerbung_title', array( + 'label' => __( 'Titel der Bewerbungsseite', 'minecraft-modern-theme' ), + 'section' => 'mm_bewerbung_section', + 'type' => 'text', + ) ); + + $wp_customize->add_setting( 'mm_bewerbung_desc', array( + 'default' => __( 'Du möchtest Teil unseres Teams werden? Füll das Formular aus und wir melden uns bei dir.', 'minecraft-modern-theme' ), + 'sanitize_callback' => 'sanitize_textarea_field', + ) ); + $wp_customize->add_control( 'mm_bewerbung_desc', array( + 'label' => __( 'Beschreibungstext', 'minecraft-modern-theme' ), + 'section' => 'mm_bewerbung_section', + 'type' => 'textarea', + ) ); + + $wp_customize->add_setting( 'mm_bewerbung_success_msg', array( + 'default' => __( 'Deine Bewerbung wurde erfolgreich eingereicht! Wir melden uns so bald wie möglich bei dir.', 'minecraft-modern-theme' ), + 'sanitize_callback' => 'sanitize_textarea_field', + ) ); + $wp_customize->add_control( 'mm_bewerbung_success_msg', array( + 'label' => __( 'Erfolgsmeldung nach dem Absenden', 'minecraft-modern-theme' ), + 'section' => 'mm_bewerbung_section', + 'type' => 'textarea', + ) ); + + $wp_customize->add_setting( 'mm_bewerbung_min_alter', array( + 'default' => 14, + 'sanitize_callback' => 'absint', + ) ); + $wp_customize->add_control( 'mm_bewerbung_min_alter', array( + 'label' => __( 'Mindestalter', 'minecraft-modern-theme' ), + 'description' => __( 'Bewerbungen unter diesem Alter werden abgelehnt. 0 = kein Limit.', 'minecraft-modern-theme' ), + 'section' => 'mm_bewerbung_section', + 'type' => 'number', + 'input_attrs' => array( 'min' => 0, 'max' => 99 ), + ) ); + + // ── Positionen ── + $wp_customize->add_setting( 'mm_bewerbung_positionen', array( + 'default' => "Moderator +Supporter +Builder +Developer", + 'sanitize_callback' => 'sanitize_textarea_field', + ) ); + $wp_customize->add_control( 'mm_bewerbung_positionen', array( + 'label' => __( 'Bewerbungs-Positionen', 'minecraft-modern-theme' ), + 'description' => __( 'Eine Position pro Zeile. Der Bewerber wählt genau eine davon aus.', 'minecraft-modern-theme' ), + 'section' => 'mm_bewerbung_section', + 'type' => 'textarea', + ) ); +} +add_action( 'customize_register', 'mm_bewerbung_customizer' ); + +// Hilfsfunktion: Positions-Liste als Array zurückgeben +function mm_bewerbung_get_positionen() { + $raw = get_theme_mod( 'mm_bewerbung_positionen', "Moderator +Supporter +Builder +Developer" ); + $list = array_filter( array_map( 'trim', explode( " +", $raw ) ) ); + return array_values( $list ); +} + + +// --- 2. Custom Post Type: Bewerbung --- +function mm_register_bewerbung_cpt() { + if ( ! get_theme_mod( 'mm_bewerbung_enabled', false ) ) return; + + register_post_type( 'mm_bewerbung', array( + 'labels' => array( + 'name' => __( 'Bewerbungen', 'minecraft-modern-theme' ), + 'singular_name' => __( 'Bewerbung', 'minecraft-modern-theme' ), + 'all_items' => __( 'Alle Bewerbungen', 'minecraft-modern-theme' ), + 'menu_name' => __( 'Bewerbungen', 'minecraft-modern-theme' ), + ), + 'public' => false, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_icon' => 'dashicons-clipboard', + 'menu_position' => 8, + 'supports' => array( 'title' ), + 'capabilities' => array( + 'create_posts' => 'do_not_allow', // Nur über Frontend erstellbar + ), + 'map_meta_cap' => true, + ) ); +} +add_action( 'init', 'mm_register_bewerbung_cpt' ); + + +// --- 3. Admin: Meta-Box für Bewerbungs-Details --- +function mm_bewerbung_meta_box() { + add_meta_box( + 'mm_bewerbung_details', + __( 'Bewerbungs-Details', 'minecraft-modern-theme' ), + 'mm_bewerbung_meta_box_html', + 'mm_bewerbung', 'normal', 'high' + ); + add_meta_box( + 'mm_bewerbung_status_box', + __( 'Status', 'minecraft-modern-theme' ), + 'mm_bewerbung_status_box_html', + 'mm_bewerbung', 'side', 'high' + ); +} +add_action( 'add_meta_boxes', 'mm_bewerbung_meta_box' ); + +function mm_bewerbung_meta_box_html( $post ) { + $fields = array( + '_mm_bew_mc_name' => __( 'Minecraft Username', 'minecraft-modern-theme' ), + '_mm_bew_discord' => __( 'Discord Username', 'minecraft-modern-theme' ), + '_mm_bew_alter' => __( 'Alter', 'minecraft-modern-theme' ), + '_mm_bew_position' => __( 'Bewirbt sich als', 'minecraft-modern-theme' ), + '_mm_bew_warum' => __( 'Warum möchtest du mitspielen?', 'minecraft-modern-theme' ), + '_mm_bew_erfahrung' => __( 'Erfahrung / Vorstellung', 'minecraft-modern-theme' ), + '_mm_bew_datum' => __( 'Eingereicht am', 'minecraft-modern-theme' ), + '_mm_bew_ip' => __( 'IP-Adresse', 'minecraft-modern-theme' ), + ); + echo ''; + foreach ( $fields as $key => $label ) { + $val = get_post_meta( $post->ID, $key, true ); + if ( ! $val ) continue; + $is_long = in_array( $key, array( '_mm_bew_warum', '_mm_bew_erfahrung' ) ); + echo ''; + echo ''; + echo ''; + } + echo '
' . esc_html($label) . ''; + if ( $is_long ) { + echo '
' . esc_html($val) . '
'; + } else { + echo '' . esc_html($val) . ''; + } + echo '
'; +} + +function mm_bewerbung_status_box_html( $post ) { + $status = get_post_meta( $post->ID, '_mm_bew_status', true ) ?: 'neu'; + wp_nonce_field( 'mm_bew_status_save', 'mm_bew_status_nonce' ); + $options = array( + 'neu' => array( 'label' => __('Neu','minecraft-modern-theme'), 'color' => '#0073aa' ), + 'in_pruef' => array( 'label' => __('In Prüfung','minecraft-modern-theme'), 'color' => '#f0ad4e' ), + 'angenommen' => array( 'label' => __('Angenommen','minecraft-modern-theme'), 'color' => '#46b450' ), + 'abgelehnt' => array( 'label' => __('Abgelehnt','minecraft-modern-theme'), 'color' => '#dc3232' ), + ); + echo ''; + $cur = isset($options[$status]) ? $options[$status] : $options['neu']; + echo '
' . esc_html($cur['label']) . '
'; + + // Admin-Notiz + $notiz = get_post_meta( $post->ID, '_mm_bew_notiz', true ); + echo '
'; + echo ''; + echo ''; +} + +function mm_bewerbung_save_status( $post_id ) { + if ( ! isset($_POST['mm_bew_status_nonce']) || ! wp_verify_nonce($_POST['mm_bew_status_nonce'], 'mm_bew_status_save') ) return; + if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return; + if ( ! current_user_can('edit_post', $post_id) ) return; + if ( isset($_POST['mm_bew_status']) ) { + update_post_meta( $post_id, '_mm_bew_status', sanitize_text_field($_POST['mm_bew_status']) ); + } + if ( isset($_POST['mm_bew_notiz']) ) { + update_post_meta( $post_id, '_mm_bew_notiz', sanitize_textarea_field($_POST['mm_bew_notiz']) ); + } +} +add_action( 'save_post', 'mm_bewerbung_save_status' ); + + +// --- 4. Admin-Spalten in der Bewerbungsliste --- +function mm_bewerbung_columns( $cols ) { + return array( + 'cb' => $cols['cb'], + 'title' => __( 'Name', 'minecraft-modern-theme' ), + 'mc_name' => __( 'Minecraft', 'minecraft-modern-theme' ), + 'discord' => __( 'Discord', 'minecraft-modern-theme' ), + 'alter' => __( 'Alter', 'minecraft-modern-theme' ), + 'position' => __( 'Position', 'minecraft-modern-theme' ), + 'status' => __( 'Status', 'minecraft-modern-theme' ), + 'datum' => __( 'Eingereicht', 'minecraft-modern-theme' ), + ); +} +add_filter( 'manage_mm_bewerbung_posts_columns', 'mm_bewerbung_columns' ); + +function mm_bewerbung_column_content( $col, $post_id ) { + $status_colors = array( + 'neu' => '#0073aa', + 'in_pruef' => '#f0ad4e', + 'angenommen' => '#46b450', + 'abgelehnt' => '#dc3232', + ); + $status_labels = array( + 'neu' => __('Neu','minecraft-modern-theme'), + 'in_pruef' => __('In Prüfung','minecraft-modern-theme'), + 'angenommen' => __('Angenommen','minecraft-modern-theme'), + 'abgelehnt' => __('Abgelehnt','minecraft-modern-theme'), + ); + switch ($col) { + case 'mc_name': + $mc = get_post_meta($post_id, '_mm_bew_mc_name', true); + if ($mc) { + echo '
'; + echo ''; + echo esc_html($mc) . '
'; + } + break; + case 'discord': + echo esc_html( get_post_meta($post_id, '_mm_bew_discord', true) ); + break; + case 'alter': + echo esc_html( get_post_meta($post_id, '_mm_bew_alter', true) ); + break; + case 'position': + $pos = get_post_meta($post_id, '_mm_bew_position', true); + if ( $pos ) { + echo '' + . esc_html($pos) . ''; + } else { + echo ''; + } + break; + case 'status': + $s = get_post_meta($post_id, '_mm_bew_status', true) ?: 'neu'; + $color = isset($status_colors[$s]) ? $status_colors[$s] : '#0073aa'; + $label = isset($status_labels[$s]) ? $status_labels[$s] : $s; + echo '' . esc_html($label) . ''; + break; + case 'datum': + echo esc_html( get_post_meta($post_id, '_mm_bew_datum', true) ); + break; + } +} +add_action( 'manage_mm_bewerbung_posts_custom_column', 'mm_bewerbung_column_content', 10, 2 ); + + +// --- 5. AJAX: Formular absenden --- +add_action( 'wp_ajax_mm_submit_bewerbung', 'mm_submit_bewerbung' ); +add_action( 'wp_ajax_nopriv_mm_submit_bewerbung', 'mm_submit_bewerbung' ); + +function mm_submit_bewerbung() { + // Nonce prüfen + if ( ! isset($_POST['nonce']) || ! wp_verify_nonce($_POST['nonce'], 'mm_bewerbung_nonce') ) { + wp_send_json_error( array('msg' => __('Sicherheitsfehler. Bitte Seite neu laden.', 'minecraft-modern-theme')) ); + } + + // Felder validieren + $mc_name = sanitize_text_field( $_POST['mc_name'] ?? '' ); + $discord = sanitize_text_field( $_POST['discord'] ?? '' ); + $alter_raw = absint( $_POST['alter'] ?? 0 ); + $warum = sanitize_textarea_field( $_POST['warum'] ?? '' ); + $erfahrung = sanitize_textarea_field( $_POST['erfahrung'] ?? '' ); + + $position = sanitize_text_field( $_POST['position'] ?? '' ); + $positionen = mm_bewerbung_get_positionen(); + + $errors = array(); + if ( empty($mc_name) ) $errors[] = __('Minecraft Username ist erforderlich.', 'minecraft-modern-theme'); + if ( empty($discord) ) $errors[] = __('Discord Username ist erforderlich.', 'minecraft-modern-theme'); + if ( $alter_raw < 1 ) $errors[] = __('Bitte gib dein Alter an.', 'minecraft-modern-theme'); + if ( ! empty($positionen) && ! in_array($position, $positionen, true) ) { + $errors[] = __('Bitte wähle eine gültige Position aus.', 'minecraft-modern-theme'); + } + if ( empty($warum) ) $errors[] = __('Bitte erkläre warum du mitspielen möchtest.', 'minecraft-modern-theme'); + if ( empty($erfahrung) ) $errors[] = __('Bitte stell dich kurz vor.', 'minecraft-modern-theme'); + + // Mindestalter prüfen + $min_alter = absint( get_theme_mod('mm_bewerbung_min_alter', 14) ); + if ( $min_alter > 0 && $alter_raw < $min_alter ) { + $errors[] = sprintf( __('Du musst mindestens %d Jahre alt sein.', 'minecraft-modern-theme'), $min_alter ); + } + + // Doppelbewerbung prüfen (gleicher MC-Name in den letzten 30 Tagen) + $existing = get_posts( array( + 'post_type' => 'mm_bewerbung', + 'post_status' => 'publish', + 'meta_query' => array( + array( 'key' => '_mm_bew_mc_name', 'value' => $mc_name, 'compare' => '=' ), + ), + 'date_query' => array( + array( 'after' => '30 days ago' ), + ), + 'numberposts' => 1, + ) ); + if ( $existing ) { + $errors[] = __('Mit diesem Minecraft-Namen wurde in den letzten 30 Tagen bereits eine Bewerbung eingereicht.', 'minecraft-modern-theme'); + } + + if ( ! empty($errors) ) { + wp_send_json_error( array('msg' => implode(' ', $errors)) ); + } + + // Bewerbung als Post speichern + $post_id = wp_insert_post( array( + 'post_type' => 'mm_bewerbung', + 'post_status' => 'publish', + 'post_title' => $mc_name . ' – ' . date_i18n('d.m.Y H:i'), + ) ); + + if ( is_wp_error($post_id) ) { + wp_send_json_error( array('msg' => __('Fehler beim Speichern. Bitte versuche es erneut.', 'minecraft-modern-theme')) ); + } + + update_post_meta( $post_id, '_mm_bew_mc_name', $mc_name ); + update_post_meta( $post_id, '_mm_bew_discord', $discord ); + update_post_meta( $post_id, '_mm_bew_alter', $alter_raw ); + update_post_meta( $post_id, '_mm_bew_position', $position ); + update_post_meta( $post_id, '_mm_bew_warum', $warum ); + update_post_meta( $post_id, '_mm_bew_erfahrung', $erfahrung ); + update_post_meta( $post_id, '_mm_bew_status', 'neu' ); + update_post_meta( $post_id, '_mm_bew_datum', date_i18n('d.m.Y H:i:s') ); + update_post_meta( $post_id, '_mm_bew_ip', sanitize_text_field( $_SERVER['REMOTE_ADDR'] ?? '' ) ); + + $success_msg = get_theme_mod( 'mm_bewerbung_success_msg', __('Deine Bewerbung wurde erfolgreich eingereicht! Wir melden uns so bald wie möglich bei dir.', 'minecraft-modern-theme') ); + wp_send_json_success( array('msg' => $success_msg) ); +} + + +// --- 6. Template-Loader --- +function mm_bewerbung_template_loader( $template ) { + if ( ! get_theme_mod('mm_bewerbung_enabled', false) ) return $template; + if ( is_page('bewerbung') ) { + // BUG-FIX: locate_template() statt get_template_directory(), + // damit ein page-bewerbung.php im Child-Theme greift. + $t = locate_template( 'page-bewerbung.php' ); + if ( $t ) return $t; + } + return $template; +} +add_filter( 'template_include', 'mm_bewerbung_template_loader' ); + + +// --- 7. Seite automatisch anlegen --- +function mm_bewerbung_create_page() { + if ( ! get_theme_mod('mm_bewerbung_enabled', false) ) return; + if ( ! get_page_by_path('bewerbung') ) { + wp_insert_post( array( + 'post_title' => __('Bewerbung', 'minecraft-modern-theme'), + 'post_name' => 'bewerbung', + 'post_status' => 'publish', + 'post_type' => 'page', + 'post_author' => 1, + ) ); + } +} +add_action( 'customize_save_after', 'mm_bewerbung_create_page' ); diff --git a/Minecraft-Modern-Theme/inc/cookie-banner.php b/Minecraft-Modern-Theme/inc/cookie-banner.php new file mode 100644 index 0000000..774cc72 --- /dev/null +++ b/Minecraft-Modern-Theme/inc/cookie-banner.php @@ -0,0 +1,283 @@ + +
+ +
+

+

+
+
+ add_section( 'mm_cookie_banner_section', array( + 'title' => __( 'Cookie-Banner (DSGVO)', 'minecraft-modern-theme' ), + 'priority' => 75, + ) ); + + $wp_customize->add_setting( 'mm_cookie_enabled', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean', 'transport' => 'postMessage' ) ); + $wp_customize->add_control( 'mm_cookie_enabled', array( 'label' => __( 'Cookie-Banner aktivieren', 'minecraft-modern-theme' ), 'section' => 'mm_cookie_banner_section', 'type' => 'checkbox' ) ); + + $wp_customize->add_setting( 'mm_cookie_style', array( 'default' => 'bar', 'sanitize_callback' => 'sanitize_text_field', 'transport' => 'postMessage' ) ); + $wp_customize->add_control( 'mm_cookie_style', array( + 'label' => __( 'Design-Variante', 'minecraft-modern-theme' ), + 'section' => 'mm_cookie_banner_section', + 'type' => 'select', + 'choices' => array( + 'bar' => __( 'Variante 1 – Schmale Bar (volle Breite)', 'minecraft-modern-theme' ), + 'split' => __( 'Variante 2 – Zweispaltig (3A)', 'minecraft-modern-theme' ), + 'slide' => __( 'Variante 3 – Slide-In von rechts (3B)', 'minecraft-modern-theme' ), + 'stepper' => __( 'Variante 4 – Kompakt-Center mit Stepper (3C)', 'minecraft-modern-theme' ), + ), + ) ); + + $wp_customize->add_setting( 'mm_cookie_text', array( 'default' => __( 'Wir nutzen Cookies und ähnliche Technologien. Einige sind essenziell, andere helfen uns diese Website zu verbessern. Du kannst deine Auswahl jederzeit anpassen.', 'minecraft-modern-theme' ), 'sanitize_callback' => 'wp_kses_post', 'transport' => 'postMessage' ) ); + $wp_customize->add_control( 'mm_cookie_text', array( 'label' => __( 'Banner-Text', 'minecraft-modern-theme' ), 'section' => 'mm_cookie_banner_section', 'type' => 'textarea' ) ); + + $wp_customize->add_setting( 'mm_cookie_privacy_url', array( 'default' => '', 'sanitize_callback' => 'esc_url_raw' ) ); + $wp_customize->add_control( 'mm_cookie_privacy_url', array( 'label' => __( 'URL Datenschutzerklärung', 'minecraft-modern-theme' ), 'description' => __( 'Leer lassen um den Link auszublenden.', 'minecraft-modern-theme' ), 'section' => 'mm_cookie_banner_section', 'type' => 'url' ) ); + + foreach ( array( + 'necessary' => array( 'label' => __( 'Beschreibung: Notwendige', 'minecraft-modern-theme' ), 'default' => __( 'Grundlegende Funktionen der Website. Können nicht deaktiviert werden.', 'minecraft-modern-theme' ) ), + 'statistics' => array( 'label' => __( 'Beschreibung: Statistik', 'minecraft-modern-theme' ), 'default' => __( 'Helfen uns zu verstehen wie Besucher mit der Website interagieren (z.B. Google Analytics).', 'minecraft-modern-theme' ) ), + 'marketing' => array( 'label' => __( 'Beschreibung: Marketing', 'minecraft-modern-theme' ), 'default' => __( 'Werden genutzt um Werbung relevanter zu gestalten (z.B. YouTube, Facebook).', 'minecraft-modern-theme' ) ), + ) as $key => $opts ) { + $wp_customize->add_setting( 'mm_cookie_desc_' . $key, array( 'default' => $opts['default'], 'sanitize_callback' => 'sanitize_textarea_field' ) ); + $wp_customize->add_control( 'mm_cookie_desc_' . $key, array( 'label' => $opts['label'], 'section' => 'mm_cookie_banner_section', 'type' => 'textarea' ) ); + } + + $wp_customize->add_setting( 'mm_cookie_ga_id', array( 'default' => '', 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'mm_cookie_ga_id', array( 'label' => __( 'Google Analytics ID (optional)', 'minecraft-modern-theme' ), 'description' => __( 'z.B. G-XXXXXXXXXX', 'minecraft-modern-theme' ), 'section' => 'mm_cookie_banner_section', 'type' => 'text' ) ); + + $wp_customize->add_setting( 'mm_cookie_lifetime', array( 'default' => 365, 'sanitize_callback' => 'absint' ) ); + $wp_customize->add_control( 'mm_cookie_lifetime', array( 'label' => __( 'Cookie-Laufzeit (Tage)', 'minecraft-modern-theme' ), 'section' => 'mm_cookie_banner_section', 'type' => 'number', 'input_attrs' => array( 'min' => 1, 'max' => 730 ) ) ); + + if ( class_exists( 'MM_Cookie_Preview_Control' ) ) { + $wp_customize->add_setting( 'mm_cookie_preview_dummy', array( 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( new MM_Cookie_Preview_Control( $wp_customize, 'mm_cookie_preview_dummy', array( 'section' => 'mm_cookie_banner_section', 'priority' => 200 ) ) ); + } +} +add_action( 'customize_register', 'mm_cookie_banner_customizer' ); + + +// --- 2. Banner HTML – ALLE 4 LAYOUTS gleichzeitig ausgeben --- +// Im Customizer wechselt JS nur die Klasse auf #mm-cookie-banner. +// CSS zeigt immer nur das passende .mmc-layout-* div. +function mm_cookie_banner_render() { + $is_preview = is_customize_preview(); + if ( ! $is_preview && ! get_theme_mod( 'mm_cookie_enabled', true ) ) return; + + $style = get_theme_mod( 'mm_cookie_style', 'bar' ); + $text = get_theme_mod( 'mm_cookie_text', __( 'Wir nutzen Cookies und ähnliche Technologien. Einige sind essenziell, andere helfen uns diese Website zu verbessern.', 'minecraft-modern-theme' ) ); + $priv_url = get_theme_mod( 'mm_cookie_privacy_url', '' ); + $lifetime = absint( get_theme_mod( 'mm_cookie_lifetime', 365 ) ); + $ga_id = get_theme_mod( 'mm_cookie_ga_id', '' ); + $desc_n = get_theme_mod( 'mm_cookie_desc_necessary', __( 'Grundlegende Funktionen der Website. Können nicht deaktiviert werden.', 'minecraft-modern-theme' ) ); + $desc_s = get_theme_mod( 'mm_cookie_desc_statistics', __( 'Helfen uns zu verstehen wie Besucher mit der Website interagieren (z.B. Google Analytics).', 'minecraft-modern-theme' ) ); + $desc_m = get_theme_mod( 'mm_cookie_desc_marketing', __( 'Werden genutzt um Werbung relevanter zu gestalten (z.B. YouTube, Facebook).', 'minecraft-modern-theme' ) ); + + $priv_link = $priv_url ? '' . __( 'Datenschutzerklärung', 'minecraft-modern-theme' ) . '' : ''; + $preview_class = $is_preview ? ' mmc-visible mmc-preview-mode' : ''; + $inline_style = $is_preview ? '' : 'display:none;'; + + // Kategorien-Block (identisch in allen Varianten mit Kategorien) + $cats = '
+
' . __('Notwendige','minecraft-modern-theme') . '' . __('Immer aktiv','minecraft-modern-theme') . '

' . esc_html($desc_n) . '

+

' . esc_html($desc_s) . '

+

' . esc_html($desc_m) . '

+
'; + + $btn_accept = ''; + $btn_select = ''; + $btn_neces = ''; + + $text_esc = wp_kses_post($text); + ?> + + + + __('Cookie-Einstellungen','minecraft-modern-theme')),$atts);return ''.esc_html($a['text']).'';} +add_shortcode('cookie_settings','mm_cookie_settings_shortcode'); + + +// --- 4. Live-Vorschau: nur Klasse + Text wechseln, HTML ist bereits vollständig --- +function mm_cookie_banner_preview_js(){ + if(!is_customize_preview())return; ?> + + direkt in wp_head - * - slider_loop Setting ergänzt (war in slider-init.js referenziert, aber nie definiert) - * - Scroll-to-Top Toggle ergänzt - * - footer_copyright Default mit aktuellem Jahr zur Laufzeit - * - Import_Export_Control Klasse aus dem Callback extrahiert - */ - -// ========================================================================= -// Import/Export Control – außerhalb des Callbacks definiert -// ========================================================================= -if ( class_exists('WP_Customize_Control') && ! class_exists('MM_Import_Export_Control') ) : -class MM_Import_Export_Control extends WP_Customize_Control { - public $type = 'mm_import_export'; - - public function render_content() { - $export_url = admin_url('admin-post.php?action=export_theme_settings'); - $nonce = wp_create_nonce('theme-import-nonce'); - ?> -
-

- - -

- -
- 📦 Was wird gesichert:
- ✓ Customizer-Einstellungen (Farben, Social Links, Menü-Design, etc.)
- ✓ Livestream API Keys (YouTube, Twitch)
- ✓ Homepage-Seite (Titel, Inhalt, Highlight-Bild)
- ✓ Navigation Menüs inkl. aller Items & Struktur
- ✓ Widget-Konfigurationen
- ✓ Team-Mitglieder (mit UUID, Avatar, Banner)
- ✓ FAQ-Einträge & Kategorien
- ✓ Custom CSS
- ✓ Announcement-Bar Einstellungen -
- - - - - - -
- - - - - -

- ⚠️ -

-
- - - add_section( 'assistant_settings', array( - 'title' => __( 'Virtueller Assistent', 'minecraft-modern-theme' ), - 'priority' => 80, - 'description' => __( 'Steuert den virtuellen Assistenten im Frontend. Avatar basiert auf Minecraft-UUID.', 'minecraft-modern-theme' ), - ) ); - - $wp_customize->add_setting( 'assistant_enabled', array( - 'default' => false, - 'sanitize_callback' => 'wp_validate_boolean', - ) ); - $wp_customize->add_control( 'assistant_enabled', array( - 'label' => __( 'Virtuellen Assistenten aktivieren', 'minecraft-modern-theme' ), - 'section' => 'assistant_settings', - 'type' => 'checkbox', - ) ); - - $wp_customize->add_setting( 'assistant_minecraft_uuid', array( - 'default' => '', - 'sanitize_callback' => 'sanitize_text_field', - ) ); - $wp_customize->add_control( 'assistant_minecraft_uuid', array( - 'label' => __( 'Minecraft UUID für Avatar', 'minecraft-modern-theme' ), - 'section' => 'assistant_settings', - 'type' => 'text', - 'description' => __( 'Gib die Minecraft-UUID für den Avatar des Assistenten ein.', 'minecraft-modern-theme' ), - ) ); - - $wp_customize->add_setting( 'assistant_avatar_view', array( - 'default' => 'head', - 'sanitize_callback' => function ( $v ) { - return in_array( $v, array( 'head', 'body', '3dhead' ), true ) ? $v : 'head'; - }, - ) ); - $wp_customize->add_control( 'assistant_avatar_view', array( - 'label' => __( 'Avatar-Ansicht', 'minecraft-modern-theme' ), - 'section' => 'assistant_settings', - 'type' => 'select', - 'choices' => array( - 'head' => __( 'Kopf', 'minecraft-modern-theme' ), - 'body' => __( 'Ganzkörper', 'minecraft-modern-theme' ), - '3dhead' => __( '3D Kopf', 'minecraft-modern-theme' ), - ), - 'description' => __( 'Wähle, wie der Minecraft-Avatar im Assistenten angezeigt wird.', 'minecraft-modern-theme' ), - ) ); - - // BUG-FIX: assistant_position war in assistant-widget.php in einem eigenen - // customize_register-Hook registriert – also BEVOR diese Section existierte. - // Jetzt korrekt hier innerhalb von minecraft_modern_customize_register(). - $wp_customize->add_setting( 'assistant_position', array( - 'default' => 'bottom_right', - 'transport' => 'refresh', - 'sanitize_callback' => function ( $v ) { - $allowed = array( 'bottom_right', 'bottom_left', 'top_right', 'top_left' ); - return in_array( $v, $allowed, true ) ? $v : 'bottom_right'; - }, - ) ); - $wp_customize->add_control( 'assistant_position', array( - 'label' => __( 'Position des Assistenten', 'minecraft-modern-theme' ), - 'section' => 'assistant_settings', - 'type' => 'select', - 'choices' => array( - 'bottom_right' => __( 'Unten rechts', 'minecraft-modern-theme' ), - 'bottom_left' => __( 'Unten links', 'minecraft-modern-theme' ), - 'top_right' => __( 'Oben rechts', 'minecraft-modern-theme' ), - 'top_left' => __( 'Oben links', 'minecraft-modern-theme' ), - ), - ) ); - - // ========================================================================= - // 1. HEADER SLIDER - // ========================================================================= - $wp_customize->add_section( 'header_slider', array( - 'title' => __('Header Slider', 'minecraft-modern-theme'), - 'priority' => 20, - 'description' => __('Konfiguriere den großen Slider auf der Startseite.', 'minecraft-modern-theme'), - ) ); - - $wp_customize->add_setting( 'slider_enabled', array( 'default' => false, 'transport' => 'refresh', 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'slider_enabled', array( 'label' => __('Header Slider aktivieren', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'checkbox' ) ); - - // FIX: slider_loop war in slider-init.js als sliderSettings.loop referenziert, aber nie definiert - $wp_customize->add_setting( 'slider_loop', array( 'default' => true, 'transport' => 'refresh', 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'slider_loop', array( - 'label' => __('Slider Endlos-Loop aktivieren', 'minecraft-modern-theme'), - 'description' => __('Der Slider springt nach dem letzten Slide wieder zum ersten zurück.', 'minecraft-modern-theme'), - 'section' => 'header_slider', - 'type' => 'checkbox', - ) ); - - for ( $i = 1; $i <= 5; $i++ ) { - $wp_customize->add_setting( 'slider_image_' . $i, array( 'sanitize_callback' => 'esc_url_raw' ) ); - $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'slider_image_' . $i, array( - 'label' => sprintf( __('Banner %d - Bild', 'minecraft-modern-theme'), $i ), 'section' => 'header_slider', - ) ) ); - $wp_customize->add_setting( 'slider_title_' . $i, array( 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'slider_title_' . $i, array( 'label' => sprintf( __('Banner %d - Titel', 'minecraft-modern-theme'), $i ), 'section' => 'header_slider', 'type' => 'text' ) ); - $wp_customize->add_setting( 'slider_subtitle_' . $i, array( 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'slider_subtitle_' . $i, array( 'label' => sprintf( __('Banner %d - Untertitel', 'minecraft-modern-theme'), $i ), 'section' => 'header_slider', 'type' => 'text' ) ); - } - - $wp_customize->add_setting( 'slider_font_family', array( 'default' => 'Raleway', 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'slider_font_family', array( - 'label' => __('Schriftart', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'select', - 'choices' => array( 'Raleway' => 'Raleway', 'Poppins' => 'Poppins', 'Montserrat' => 'Montserrat', 'Oswald' => 'Oswald', 'Roboto' => 'Roboto', 'Lato' => 'Lato' ), - ) ); - - $wp_customize->add_setting( 'slider_font_size', array( 'default' => 'mittel', 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'slider_font_size', array( - 'label' => __('Schriftgröße', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'select', - 'choices' => array( 'klein' => __('Klein', 'minecraft-modern-theme'), 'mittel' => __('Mittel', 'minecraft-modern-theme'), 'gross' => __('Groß', 'minecraft-modern-theme'), 'extra-gross' => __('Extra Groß', 'minecraft-modern-theme') ), - ) ); - - $wp_customize->add_setting( 'slider_font_color', array( 'default' => '#ffffff', 'sanitize_callback' => 'sanitize_hex_color' ) ); - $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'slider_font_color', array( - 'label' => __('Schriftfarbe', 'minecraft-modern-theme'), 'section' => 'header_slider', - ) ) ); - - $wp_customize->add_setting( 'header_height', array( 'default' => 'mittel', 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'header_height', array( - 'label' => __('Header-Höhe', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'select', - 'choices' => array( 'klein' => __('Klein', 'minecraft-modern-theme'), 'mittel' => __('Mittel', 'minecraft-modern-theme'), 'gross' => __('Groß', 'minecraft-modern-theme') ), - ) ); - - $wp_customize->add_setting( 'slider_hide_arrows', array( 'default' => false, 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'slider_hide_arrows', array( 'label' => __('Pfeile ausblenden', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'checkbox' ) ); - - $wp_customize->add_setting( 'slider_hide_pagination', array( 'default' => false, 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'slider_hide_pagination', array( 'label' => __('Paginierung (Punkte) ausblenden', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'checkbox' ) ); - - - // ========================================================================= - // 2. HERO SECTION (Fallback) - // ========================================================================= - $wp_customize->add_section( 'hero_section', array( - 'title' => __('Startseiten-Hero (wenn Slider deaktiviert)', 'minecraft-modern-theme'), - 'priority' => 21, - ) ); - - $wp_customize->add_setting( 'hero_title', array( 'default' => __('Willkommen auf unserem Server', 'minecraft-modern-theme'), 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'hero_title', array( 'label' => __('Haupttitel', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'text' ) ); - $wp_customize->add_setting( 'hero_subtitle', array( 'default' => __('Trete einer Community voller Abenteuer bei.', 'minecraft-modern-theme'), 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'hero_subtitle', array( 'label' => __('Untertitel', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'text' ) ); - $wp_customize->add_setting( 'hero_bg_image', array( 'sanitize_callback' => 'esc_url_raw' ) ); - $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'hero_bg_image', array( 'label' => __('Hintergrundbild', 'minecraft-modern-theme'), 'section' => 'hero_section' ) ) ); - $wp_customize->add_setting( 'hero_button_1_text', array( 'default' => __('Zum Forum', 'minecraft-modern-theme'), 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'hero_button_1_text', array( 'label' => __('Button 1 Text', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'text' ) ); - $wp_customize->add_setting( 'hero_button_1_url', array( 'default' => '#', 'sanitize_callback' => 'esc_url_raw' ) ); - $wp_customize->add_control( 'hero_button_1_url', array( 'label' => __('Button 1 URL', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'url' ) ); - $wp_customize->add_setting( 'hero_button_2_text', array( 'default' => __('Zum Teamspeak', 'minecraft-modern-theme'), 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( 'hero_button_2_text', array( 'label' => __('Button 2 Text', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'text' ) ); - $wp_customize->add_setting( 'hero_button_2_url', array( 'default' => '#', 'sanitize_callback' => 'esc_url_raw' ) ); - $wp_customize->add_control( 'hero_button_2_url', array( 'label' => __('Button 2 URL', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'url' ) ); - $wp_customize->add_setting( 'show_home_title', array( 'default' => false, 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'show_home_title', array( 'label' => __('Seitentitel "Home" anzeigen', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'checkbox' ) ); - - - // ========================================================================= - // 3. FARBEN & DARSTELLUNG - // ========================================================================= - $wp_customize->add_section( 'theme_appearance_settings', array( - 'title' => __('Farben & Darstellung', 'minecraft-modern-theme'), 'priority' => 30, - ) ); - - $wp_customize->add_setting( 'theme_color_preset', array( 'default' => 'classic', 'sanitize_callback' => 'sanitize_key', 'transport' => 'refresh' ) ); - $wp_customize->add_control( 'theme_color_preset', array( - 'label' => __('Theme Preset (Farbschema)', 'minecraft-modern-theme'), - 'section' => 'theme_appearance_settings', - 'type' => 'select', - 'priority' => 1, - 'choices' => array( - 'classic' => __('Classic Minecraft (Diamant-Blau)', 'minecraft-modern-theme'), - 'nether' => __('Nether (Lava-Rot)', 'minecraft-modern-theme'), - 'end' => __('The End (Ender-Purpur)', 'minecraft-modern-theme'), - ), - ) ); - - $wp_customize->add_setting( 'primary_accent_color', array( 'default' => '#00d4ff', 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'refresh' ) ); - $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'primary_accent_color', array( 'label' => __('Akzentfarbe', 'minecraft-modern-theme'), 'section' => 'theme_appearance_settings' ) ) ); - - $wp_customize->add_setting( 'default_theme_mode', array( 'default' => 'dark', 'sanitize_callback' => 'sanitize_key' ) ); - $wp_customize->add_control( 'default_theme_mode', array( - 'label' => __('Standard-Theme-Modus', 'minecraft-modern-theme'), - 'section' => 'theme_appearance_settings', - 'type' => 'radio', - 'choices' => array( 'dark' => __('Dark Mode', 'minecraft-modern-theme'), 'light' => __('Light Mode', 'minecraft-modern-theme') ), - ) ); - - // FIX: Scroll-to-Top war nie im Customizer steuerbar - $wp_customize->add_setting( 'show_scroll_to_top', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'show_scroll_to_top', array( - 'label' => __('Scroll-to-Top Button anzeigen', 'minecraft-modern-theme'), - 'description' => __('Zeigt einen Button unten rechts zum Hochscrollen an.', 'minecraft-modern-theme'), - 'section' => 'theme_appearance_settings', - 'type' => 'checkbox', - ) ); - - - // ========================================================================= - // 4. SIDEBAR - // ========================================================================= - $wp_customize->add_section( 'sidebar_settings', array( 'title' => __('Sidebar Einstellungen', 'minecraft-modern-theme'), 'priority' => 35 ) ); - $wp_customize->add_setting( 'homepage_sidebar_enabled', array( 'default' => false, 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'homepage_sidebar_enabled', array( 'label' => __('Sidebar auf Startseite aktivieren', 'minecraft-modern-theme'), 'section' => 'sidebar_settings', 'type' => 'checkbox' ) ); - $wp_customize->add_setting( 'homepage_sidebar_position', array( 'default' => 'right', 'sanitize_callback' => 'sanitize_key' ) ); - $wp_customize->add_control( 'homepage_sidebar_position', array( - 'label' => __('Sidebar Position', 'minecraft-modern-theme'), 'section' => 'sidebar_settings', 'type' => 'select', - 'choices' => array( 'left' => __('Links', 'minecraft-modern-theme'), 'right' => __('Rechts', 'minecraft-modern-theme') ), - ) ); - - - // ========================================================================= - // 5. SOCIAL MEDIA - // ========================================================================= - $wp_customize->add_section( 'social_links', array( 'title' => __('Social Media Links', 'minecraft-modern-theme'), 'priority' => 40 ) ); - $social_platforms = array( - 'bluesky' => 'BlueSky', 'discord' => 'Discord', 'youtube' => 'YouTube', 'twitter' => 'Twitter (X)', - 'facebook' => 'Facebook', 'instagram' => 'Instagram', 'tiktok' => 'TikTok', - 'twitch' => 'Twitch', 'steam' => 'Steam', 'github' => 'GitHub', - 'linkedin' => 'LinkedIn', 'pinterest' => 'Pinterest', 'reddit' => 'Reddit', - 'mastodon' => 'Mastodon', 'threads' => 'Threads', 'kickstarter' => 'Kickstarter', - 'teamspeak' => 'Teamspeak', 'spotify' => 'Spotify', 'stoat' => 'Stoat', - ); - foreach ( $social_platforms as $key => $label ) { - $wp_customize->add_setting( 'social_' . $key, array( 'sanitize_callback' => 'esc_url_raw' ) ); - $wp_customize->add_control( 'social_' . $key, array( 'label' => $label . ' URL', 'section' => 'social_links', 'type' => 'url' ) ); - } - - // ========================================================================= - // 6. FOOTER - // ========================================================================= - $wp_customize->add_section( 'footer_settings', array( 'title' => __('Footer-Einstellungen', 'minecraft-modern-theme'), 'priority' => 50 ) ); - - // FIX: Default mit aktuellem Jahr zur Laufzeit auswerten, nicht bei class-load - $wp_customize->add_setting( 'footer_copyright', array( - 'default' => '', // Leer = dynamisch berechnet in footer.php - 'sanitize_callback' => 'wp_kses_post', - ) ); - $wp_customize->add_control( 'footer_copyright', array( - 'label' => __('Copyright-Text', 'minecraft-modern-theme'), - 'description' => __('Leer lassen für automatischen Text mit aktuellem Jahr.', 'minecraft-modern-theme'), - 'section' => 'footer_settings', - 'type' => 'textarea', - ) ); - - $wp_customize->add_setting( 'footer_impressum_url', array( 'sanitize_callback' => 'esc_url_raw' ) ); - $wp_customize->add_control( 'footer_impressum_url', array( 'label' => __('URL für Impressum', 'minecraft-modern-theme'), 'section' => 'footer_settings', 'type' => 'url' ) ); - $wp_customize->add_setting( 'footer_datenschutz_url', array( 'sanitize_callback' => 'esc_url_raw' ) ); - $wp_customize->add_control( 'footer_datenschutz_url', array( 'label' => __('URL für Datenschutz', 'minecraft-modern-theme'), 'section' => 'footer_settings', 'type' => 'url' ) ); - $wp_customize->add_setting( 'show_footer_credit', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'show_footer_credit', array( 'label' => __('Footer-Credit anzeigen', 'minecraft-modern-theme'), 'section' => 'footer_settings', 'type' => 'checkbox' ) ); - - - // ========================================================================= - // 7. FAQ & TEAM - // ========================================================================= - $wp_customize->add_section( 'faq_settings', array( 'title' => __('FAQ Einstellungen', 'minecraft-modern-theme'), 'priority' => 60 ) ); - $wp_customize->add_setting( 'faq_enabled', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'faq_enabled', array( 'label' => __('FAQ System aktivieren', 'minecraft-modern-theme'), 'section' => 'faq_settings', 'type' => 'checkbox' ) ); - - $wp_customize->add_section( 'team_settings', array( 'title' => __('Team Einstellungen', 'minecraft-modern-theme'), 'priority' => 65 ) ); - $wp_customize->add_setting( 'team_enabled', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean' ) ); - $wp_customize->add_control( 'team_enabled', array( 'label' => __('Team Showcase aktivieren', 'minecraft-modern-theme'), 'section' => 'team_settings', 'type' => 'checkbox' ) ); - - - // ========================================================================= - // 8. LOGIN - // ========================================================================= - $wp_customize->add_section( 'login_settings', array( 'title' => __('Login-Einstellungen', 'minecraft-modern-theme'), 'priority' => 70 ) ); - $wp_customize->add_setting( 'login_background_image', array( 'sanitize_callback' => 'esc_url_raw', 'transport' => 'refresh' ) ); - $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'login_background_image', array( 'label' => __('Login-Hintergrundbild', 'minecraft-modern-theme'), 'section' => 'login_settings' ) ) ); - $wp_customize->add_setting( 'login_logo', array( 'sanitize_callback' => 'esc_url_raw', 'transport' => 'refresh' ) ); - $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'login_logo', array( 'label' => __('Login-Logo', 'minecraft-modern-theme'), 'section' => 'login_settings' ) ) ); - - for ( $i = 1; $i <= 5; $i++ ) { - $wp_customize->add_setting( 'login_avatar_uuid_' . $i, array( 'sanitize_callback' => 'sanitize_text_field', 'transport' => 'refresh' ) ); - $wp_customize->add_control( 'login_avatar_uuid_' . $i, array( - 'label' => sprintf( __('Avatar %d UUID', 'minecraft-modern-theme'), $i ), - 'section' => 'login_settings', - 'type' => 'text', - ) ); - } - - $wp_customize->add_setting( 'login_avatar_slider_speed', array( 'default' => 4, 'sanitize_callback' => 'absint', 'transport' => 'refresh' ) ); - $wp_customize->add_control( 'login_avatar_slider_speed', array( - 'label' => __('Avatar-Wechsel (Sekunden)', 'minecraft-modern-theme'), - 'section' => 'login_settings', - 'type' => 'number', - 'input_attrs' => array( 'min' => 2, 'max' => 10, 'step' => 1 ), - ) ); - - - // ========================================================================= - // 8.5. VIDEO / LIVESTREAM EINSTELLUNGEN - // ========================================================================= - $wp_customize->add_section( 'video_livestream_settings', array( - 'title' => __('Video & Livestream', 'minecraft-modern-theme'), - 'description' => __('Einstellungen für YouTube Livestream-Erkennung. Hauptmethode: Livestream-Posts unter "Livestreams" erstellen. Optional: Zusätzlichen Hauptkanal hier eintragen.', 'minecraft-modern-theme'), - 'priority' => 75, - ) ); - - $wp_customize->add_setting( 'youtube_api_key', array( - 'default' => '', - 'sanitize_callback' => 'sanitize_text_field', - 'transport' => 'refresh', - ) ); - $wp_customize->add_control( 'youtube_api_key', array( - 'label' => __('YouTube API Key', 'minecraft-modern-theme'), - 'description' => __('Erforderlich für automatische YouTube Live-Erkennung. Hier API Key erstellen', 'minecraft-modern-theme'), - 'section' => 'video_livestream_settings', - 'type' => 'text', - 'input_attrs' => array( - 'placeholder' => 'AIzaSyD...', - ), - ) ); - - $wp_customize->add_setting( 'twitch_client_id', array( - 'default' => '', - 'sanitize_callback' => 'sanitize_text_field', - 'transport' => 'refresh', - ) ); - $wp_customize->add_control( 'twitch_client_id', array( - 'label' => __('Twitch Client ID', 'minecraft-modern-theme'), - 'description' => __('Erforderlich für Twitch Live-Erkennung. Hier App erstellen', 'minecraft-modern-theme'), - 'section' => 'video_livestream_settings', - 'type' => 'text', - 'input_attrs' => array( - 'placeholder' => 'xxxxxxxxxxxxxx', - ), - ) ); - - $wp_customize->add_setting( 'twitch_client_secret', array( - 'default' => '', - 'sanitize_callback' => 'sanitize_text_field', - 'transport' => 'refresh', - ) ); - $wp_customize->add_control( 'twitch_client_secret', array( - 'label' => __('Twitch Client Secret', 'minecraft-modern-theme'), - 'description' => __('Nur für Live-Prüfung. Wird serverseitig genutzt.', 'minecraft-modern-theme'), - 'section' => 'video_livestream_settings', - 'type' => 'text', - 'input_attrs' => array( - 'placeholder' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', - ), - ) ); - - // ========================================================================= - // 9. EXPORT / IMPORT - // ========================================================================= - $wp_customize->add_section( 'theme_mods_import_export', array( - 'title' => __('Einstellungen sichern', 'minecraft-modern-theme'), - 'priority' => 999, - ) ); - $wp_customize->add_setting( 'import_export_placeholder', array( 'sanitize_callback' => 'sanitize_text_field' ) ); - $wp_customize->add_control( new MM_Import_Export_Control( $wp_customize, 'import_export_placeholder', array( - 'section' => 'theme_mods_import_export', - ) ) ); -} -add_action( 'customize_register', 'minecraft_modern_customize_register' ); - - -// ========================================================================= -// DYNAMISCHES CSS – FIX: Google Font via wp_enqueue_style(), nicht in wp_head -// ========================================================================= -function minecraft_modern_enqueue_dynamic_styles() { - $font = get_theme_mod( 'slider_font_family', 'Raleway' ); - - // Google Font sauber einbinden - $font_url = 'https://fonts.googleapis.com/css2?family=' . urlencode($font) . ':wght@400;600;700&display=swap'; - wp_enqueue_style( 'minecraft-modern-google-font', $font_url, array(), null ); - - // Dynamisches CSS als inline style - $accent_color = get_theme_mod( 'primary_accent_color', '#00d4ff' ); - $slider_color = get_theme_mod( 'slider_font_color', '#ffffff' ); - $slider_size_setting = get_theme_mod( 'slider_font_size', 'mittel' ); - $header_height_setting = get_theme_mod( 'header_height', 'mittel' ); - - $height_map = array( 'klein' => '200px', 'mittel' => '300px', 'gross' => '400px' ); - $header_height_value = isset($height_map[$header_height_setting]) ? $height_map[$header_height_setting] : '300px'; - - $font_sizes = array( - 'klein' => array( 'title' => '2.5rem', 'subtitle' => '1.2rem' ), - 'mittel' => array( 'title' => '3.5rem', 'subtitle' => '1.4rem' ), - 'gross' => array( 'title' => '4.5rem', 'subtitle' => '1.6rem' ), - 'extra-gross' => array( 'title' => '5.5rem', 'subtitle' => '1.8rem' ), - ); - $sizes = isset($font_sizes[$slider_size_setting]) ? $font_sizes[$slider_size_setting] : $font_sizes['mittel']; - - $css = " - :root { - --primary-accent: " . esc_attr($accent_color) . "; - --header-height: " . esc_attr($header_height_value) . "; - } - .slider-title, .slider-subtitle, .hero-title, .hero-subtitle, .hero-button-1, .hero-button-2 { - font-family: '" . esc_attr($font) . "', sans-serif; - color: " . esc_attr($slider_color) . "; - } - .slider-title, .hero-title { font-size: " . esc_attr($sizes['title']) . "; } - .slider-subtitle, .hero-subtitle { font-size: " . esc_attr($sizes['subtitle']) . "; } - .site-header { border-bottom: 4px solid var(--primary-accent); } - .hero-slider { border-bottom: 4px solid var(--primary-accent); } - .site-footer { border-top: 4px solid var(--primary-accent); } - "; - - wp_add_inline_style( 'minecraft-modern-style', $css ); -} -add_action( 'wp_enqueue_scripts', 'minecraft_modern_enqueue_dynamic_styles', 20 ); - - -// ========================================================================= -// PRESET LOGIC (JS im Customizer) -// ========================================================================= -function minecraft_preset_customize_js() { ?> - - direkt in wp_head + * - slider_loop Setting ergänzt (war in slider-init.js referenziert, aber nie definiert) + * - Scroll-to-Top Toggle ergänzt + * - footer_copyright Default mit aktuellem Jahr zur Laufzeit + * - Import_Export_Control Klasse aus dem Callback extrahiert + */ + +// ========================================================================= +// Import/Export Control – außerhalb des Callbacks definiert +// ========================================================================= +if ( class_exists('WP_Customize_Control') && ! class_exists('MM_Import_Export_Control') ) : +class MM_Import_Export_Control extends WP_Customize_Control { + public $type = 'mm_import_export'; + + public function render_content() { + $export_url = admin_url('admin-post.php?action=export_theme_settings'); + $nonce = wp_create_nonce('theme-import-nonce'); + ?> +
+

+ + +

+ +
+ 📦 Was wird gesichert:
+ ✓ Customizer-Einstellungen (Farben, Social Links, Menü-Design, etc.)
+ ✓ Livestream API Keys (YouTube, Twitch)
+ ✓ Homepage-Seite (Titel, Inhalt, Highlight-Bild)
+ ✓ Navigation Menüs inkl. aller Items & Struktur
+ ✓ Widget-Konfigurationen
+ ✓ Team-Mitglieder (mit UUID, Avatar, Banner)
+ ✓ FAQ-Einträge & Kategorien
+ ✓ Custom CSS
+ ✓ Announcement-Bar Einstellungen +
+ + + + + + +
+ + + + + +

+ ⚠️ +

+
+ + + add_section( 'assistant_settings', array( + 'title' => __( 'Virtueller Assistent', 'minecraft-modern-theme' ), + 'priority' => 80, + 'description' => __( 'Steuert den virtuellen Assistenten im Frontend. Avatar basiert auf Minecraft-UUID.', 'minecraft-modern-theme' ), + ) ); + + $wp_customize->add_setting( 'assistant_enabled', array( + 'default' => false, + 'sanitize_callback' => 'wp_validate_boolean', + ) ); + $wp_customize->add_control( 'assistant_enabled', array( + 'label' => __( 'Virtuellen Assistenten aktivieren', 'minecraft-modern-theme' ), + 'section' => 'assistant_settings', + 'type' => 'checkbox', + ) ); + + $wp_customize->add_setting( 'assistant_minecraft_uuid', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + ) ); + $wp_customize->add_control( 'assistant_minecraft_uuid', array( + 'label' => __( 'Minecraft UUID für Avatar', 'minecraft-modern-theme' ), + 'section' => 'assistant_settings', + 'type' => 'text', + 'description' => __( 'Gib die Minecraft-UUID für den Avatar des Assistenten ein.', 'minecraft-modern-theme' ), + ) ); + + $wp_customize->add_setting( 'assistant_avatar_view', array( + 'default' => 'head', + 'sanitize_callback' => function ( $v ) { + return in_array( $v, array( 'head', 'body', '3dhead' ), true ) ? $v : 'head'; + }, + ) ); + $wp_customize->add_control( 'assistant_avatar_view', array( + 'label' => __( 'Avatar-Ansicht', 'minecraft-modern-theme' ), + 'section' => 'assistant_settings', + 'type' => 'select', + 'choices' => array( + 'head' => __( 'Kopf', 'minecraft-modern-theme' ), + 'body' => __( 'Ganzkörper', 'minecraft-modern-theme' ), + '3dhead' => __( '3D Kopf', 'minecraft-modern-theme' ), + ), + 'description' => __( 'Wähle, wie der Minecraft-Avatar im Assistenten angezeigt wird.', 'minecraft-modern-theme' ), + ) ); + + // BUG-FIX: assistant_position war in assistant-widget.php in einem eigenen + // customize_register-Hook registriert – also BEVOR diese Section existierte. + // Jetzt korrekt hier innerhalb von minecraft_modern_customize_register(). + $wp_customize->add_setting( 'assistant_position', array( + 'default' => 'bottom_right', + 'transport' => 'refresh', + 'sanitize_callback' => function ( $v ) { + $allowed = array( 'bottom_right', 'bottom_left', 'top_right', 'top_left' ); + return in_array( $v, $allowed, true ) ? $v : 'bottom_right'; + }, + ) ); + $wp_customize->add_control( 'assistant_position', array( + 'label' => __( 'Position des Assistenten', 'minecraft-modern-theme' ), + 'section' => 'assistant_settings', + 'type' => 'select', + 'choices' => array( + 'bottom_right' => __( 'Unten rechts', 'minecraft-modern-theme' ), + 'bottom_left' => __( 'Unten links', 'minecraft-modern-theme' ), + 'top_right' => __( 'Oben rechts', 'minecraft-modern-theme' ), + 'top_left' => __( 'Oben links', 'minecraft-modern-theme' ), + ), + ) ); + + // ========================================================================= + // 1. HEADER SLIDER + // ========================================================================= + $wp_customize->add_section( 'header_slider', array( + 'title' => __('Header Slider', 'minecraft-modern-theme'), + 'priority' => 20, + 'description' => __('Konfiguriere den großen Slider auf der Startseite.', 'minecraft-modern-theme'), + ) ); + + $wp_customize->add_setting( 'slider_enabled', array( 'default' => false, 'transport' => 'refresh', 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'slider_enabled', array( 'label' => __('Header Slider aktivieren', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'checkbox' ) ); + + // FIX: slider_loop war in slider-init.js als sliderSettings.loop referenziert, aber nie definiert + $wp_customize->add_setting( 'slider_loop', array( 'default' => true, 'transport' => 'refresh', 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'slider_loop', array( + 'label' => __('Slider Endlos-Loop aktivieren', 'minecraft-modern-theme'), + 'description' => __('Der Slider springt nach dem letzten Slide wieder zum ersten zurück.', 'minecraft-modern-theme'), + 'section' => 'header_slider', + 'type' => 'checkbox', + ) ); + + for ( $i = 1; $i <= 5; $i++ ) { + $wp_customize->add_setting( 'slider_image_' . $i, array( 'sanitize_callback' => 'esc_url_raw' ) ); + $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'slider_image_' . $i, array( + 'label' => sprintf( __('Banner %d - Bild', 'minecraft-modern-theme'), $i ), 'section' => 'header_slider', + ) ) ); + $wp_customize->add_setting( 'slider_title_' . $i, array( 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'slider_title_' . $i, array( 'label' => sprintf( __('Banner %d - Titel', 'minecraft-modern-theme'), $i ), 'section' => 'header_slider', 'type' => 'text' ) ); + $wp_customize->add_setting( 'slider_subtitle_' . $i, array( 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'slider_subtitle_' . $i, array( 'label' => sprintf( __('Banner %d - Untertitel', 'minecraft-modern-theme'), $i ), 'section' => 'header_slider', 'type' => 'text' ) ); + } + + $wp_customize->add_setting( 'slider_font_family', array( 'default' => 'Raleway', 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'slider_font_family', array( + 'label' => __('Schriftart', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'select', + 'choices' => array( 'Raleway' => 'Raleway', 'Poppins' => 'Poppins', 'Montserrat' => 'Montserrat', 'Oswald' => 'Oswald', 'Roboto' => 'Roboto', 'Lato' => 'Lato' ), + ) ); + + $wp_customize->add_setting( 'slider_font_size', array( 'default' => 'mittel', 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'slider_font_size', array( + 'label' => __('Schriftgröße', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'select', + 'choices' => array( 'klein' => __('Klein', 'minecraft-modern-theme'), 'mittel' => __('Mittel', 'minecraft-modern-theme'), 'gross' => __('Groß', 'minecraft-modern-theme'), 'extra-gross' => __('Extra Groß', 'minecraft-modern-theme') ), + ) ); + + $wp_customize->add_setting( 'slider_font_color', array( 'default' => '#ffffff', 'sanitize_callback' => 'sanitize_hex_color' ) ); + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'slider_font_color', array( + 'label' => __('Schriftfarbe', 'minecraft-modern-theme'), 'section' => 'header_slider', + ) ) ); + + $wp_customize->add_setting( 'header_height', array( 'default' => 'mittel', 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'header_height', array( + 'label' => __('Header-Höhe', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'select', + 'choices' => array( 'klein' => __('Klein', 'minecraft-modern-theme'), 'mittel' => __('Mittel', 'minecraft-modern-theme'), 'gross' => __('Groß', 'minecraft-modern-theme') ), + ) ); + + $wp_customize->add_setting( 'slider_hide_arrows', array( 'default' => false, 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'slider_hide_arrows', array( 'label' => __('Pfeile ausblenden', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'checkbox' ) ); + + $wp_customize->add_setting( 'slider_hide_pagination', array( 'default' => false, 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'slider_hide_pagination', array( 'label' => __('Paginierung (Punkte) ausblenden', 'minecraft-modern-theme'), 'section' => 'header_slider', 'type' => 'checkbox' ) ); + + + // ========================================================================= + // 2. HERO SECTION (Fallback) + // ========================================================================= + $wp_customize->add_section( 'hero_section', array( + 'title' => __('Startseiten-Hero (wenn Slider deaktiviert)', 'minecraft-modern-theme'), + 'priority' => 21, + ) ); + + $wp_customize->add_setting( 'hero_title', array( 'default' => __('Willkommen auf unserem Server', 'minecraft-modern-theme'), 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'hero_title', array( 'label' => __('Haupttitel', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'text' ) ); + $wp_customize->add_setting( 'hero_subtitle', array( 'default' => __('Trete einer Community voller Abenteuer bei.', 'minecraft-modern-theme'), 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'hero_subtitle', array( 'label' => __('Untertitel', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'text' ) ); + $wp_customize->add_setting( 'hero_bg_image', array( 'sanitize_callback' => 'esc_url_raw' ) ); + $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'hero_bg_image', array( 'label' => __('Hintergrundbild', 'minecraft-modern-theme'), 'section' => 'hero_section' ) ) ); + $wp_customize->add_setting( 'hero_button_1_text', array( 'default' => __('Zum Forum', 'minecraft-modern-theme'), 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'hero_button_1_text', array( 'label' => __('Button 1 Text', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'text' ) ); + $wp_customize->add_setting( 'hero_button_1_url', array( 'default' => '#', 'sanitize_callback' => 'esc_url_raw' ) ); + $wp_customize->add_control( 'hero_button_1_url', array( 'label' => __('Button 1 URL', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'url' ) ); + $wp_customize->add_setting( 'hero_button_2_text', array( 'default' => __('Zum Teamspeak', 'minecraft-modern-theme'), 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'hero_button_2_text', array( 'label' => __('Button 2 Text', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'text' ) ); + $wp_customize->add_setting( 'hero_button_2_url', array( 'default' => '#', 'sanitize_callback' => 'esc_url_raw' ) ); + $wp_customize->add_control( 'hero_button_2_url', array( 'label' => __('Button 2 URL', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'url' ) ); + $wp_customize->add_setting( 'show_home_title', array( 'default' => false, 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'show_home_title', array( 'label' => __('Seitentitel "Home" anzeigen', 'minecraft-modern-theme'), 'section' => 'hero_section', 'type' => 'checkbox' ) ); + + + // ========================================================================= + // 3. FARBEN & DARSTELLUNG + // ========================================================================= + $wp_customize->add_section( 'theme_appearance_settings', array( + 'title' => __('Farben & Darstellung', 'minecraft-modern-theme'), 'priority' => 30, + ) ); + + $wp_customize->add_setting( 'theme_color_preset', array( 'default' => 'classic', 'sanitize_callback' => 'sanitize_key', 'transport' => 'refresh' ) ); + $wp_customize->add_control( 'theme_color_preset', array( + 'label' => __('Theme Preset (Farbschema)', 'minecraft-modern-theme'), + 'section' => 'theme_appearance_settings', + 'type' => 'select', + 'priority' => 1, + 'choices' => array( + 'classic' => __('Classic Minecraft (Diamant-Blau)', 'minecraft-modern-theme'), + 'nether' => __('Nether (Lava-Rot)', 'minecraft-modern-theme'), + 'end' => __('The End (Ender-Purpur)', 'minecraft-modern-theme'), + ), + ) ); + + $wp_customize->add_setting( 'primary_accent_color', array( 'default' => '#00d4ff', 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'refresh' ) ); + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'primary_accent_color', array( 'label' => __('Akzentfarbe', 'minecraft-modern-theme'), 'section' => 'theme_appearance_settings' ) ) ); + + $wp_customize->add_setting( 'default_theme_mode', array( 'default' => 'dark', 'sanitize_callback' => 'sanitize_key' ) ); + $wp_customize->add_control( 'default_theme_mode', array( + 'label' => __('Standard-Theme-Modus', 'minecraft-modern-theme'), + 'section' => 'theme_appearance_settings', + 'type' => 'radio', + 'choices' => array( 'dark' => __('Dark Mode', 'minecraft-modern-theme'), 'light' => __('Light Mode', 'minecraft-modern-theme') ), + ) ); + + // FIX: Scroll-to-Top war nie im Customizer steuerbar + $wp_customize->add_setting( 'show_scroll_to_top', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'show_scroll_to_top', array( + 'label' => __('Scroll-to-Top Button anzeigen', 'minecraft-modern-theme'), + 'description' => __('Zeigt einen Button unten rechts zum Hochscrollen an.', 'minecraft-modern-theme'), + 'section' => 'theme_appearance_settings', + 'type' => 'checkbox', + ) ); + + + // ========================================================================= + // 4. SIDEBAR + // ========================================================================= + $wp_customize->add_section( 'sidebar_settings', array( 'title' => __('Sidebar Einstellungen', 'minecraft-modern-theme'), 'priority' => 35 ) ); + $wp_customize->add_setting( 'homepage_sidebar_enabled', array( 'default' => false, 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'homepage_sidebar_enabled', array( 'label' => __('Sidebar auf Startseite aktivieren', 'minecraft-modern-theme'), 'section' => 'sidebar_settings', 'type' => 'checkbox' ) ); + $wp_customize->add_setting( 'homepage_sidebar_position', array( 'default' => 'right', 'sanitize_callback' => 'sanitize_key' ) ); + $wp_customize->add_control( 'homepage_sidebar_position', array( + 'label' => __('Sidebar Position', 'minecraft-modern-theme'), 'section' => 'sidebar_settings', 'type' => 'select', + 'choices' => array( 'left' => __('Links', 'minecraft-modern-theme'), 'right' => __('Rechts', 'minecraft-modern-theme') ), + ) ); + + + // ========================================================================= + // 5. SOCIAL MEDIA + // ========================================================================= + $wp_customize->add_section( 'social_links', array( 'title' => __('Social Media Links', 'minecraft-modern-theme'), 'priority' => 40 ) ); + $social_platforms = array( + 'bluesky' => 'BlueSky', 'discord' => 'Discord', 'youtube' => 'YouTube', 'twitter' => 'Twitter (X)', + 'facebook' => 'Facebook', 'instagram' => 'Instagram', 'tiktok' => 'TikTok', + 'twitch' => 'Twitch', 'steam' => 'Steam', 'github' => 'GitHub', + 'linkedin' => 'LinkedIn', 'pinterest' => 'Pinterest', 'reddit' => 'Reddit', + 'mastodon' => 'Mastodon', 'threads' => 'Threads', 'kickstarter' => 'Kickstarter', + 'teamspeak' => 'Teamspeak', 'spotify' => 'Spotify', 'stoat' => 'Stoat', + ); + foreach ( $social_platforms as $key => $label ) { + $wp_customize->add_setting( 'social_' . $key, array( 'sanitize_callback' => 'esc_url_raw' ) ); + $wp_customize->add_control( 'social_' . $key, array( 'label' => $label . ' URL', 'section' => 'social_links', 'type' => 'url' ) ); + } + + // ========================================================================= + // 6. FOOTER + // ========================================================================= + $wp_customize->add_section( 'footer_settings', array( 'title' => __('Footer-Einstellungen', 'minecraft-modern-theme'), 'priority' => 50 ) ); + + // FIX: Default mit aktuellem Jahr zur Laufzeit auswerten, nicht bei class-load + $wp_customize->add_setting( 'footer_copyright', array( + 'default' => '', // Leer = dynamisch berechnet in footer.php + 'sanitize_callback' => 'wp_kses_post', + ) ); + $wp_customize->add_control( 'footer_copyright', array( + 'label' => __('Copyright-Text', 'minecraft-modern-theme'), + 'description' => __('Leer lassen für automatischen Text mit aktuellem Jahr.', 'minecraft-modern-theme'), + 'section' => 'footer_settings', + 'type' => 'textarea', + ) ); + + $wp_customize->add_setting( 'footer_impressum_url', array( 'sanitize_callback' => 'esc_url_raw' ) ); + $wp_customize->add_control( 'footer_impressum_url', array( 'label' => __('URL für Impressum', 'minecraft-modern-theme'), 'section' => 'footer_settings', 'type' => 'url' ) ); + $wp_customize->add_setting( 'footer_datenschutz_url', array( 'sanitize_callback' => 'esc_url_raw' ) ); + $wp_customize->add_control( 'footer_datenschutz_url', array( 'label' => __('URL für Datenschutz', 'minecraft-modern-theme'), 'section' => 'footer_settings', 'type' => 'url' ) ); + $wp_customize->add_setting( 'show_footer_credit', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'show_footer_credit', array( 'label' => __('Footer-Credit anzeigen', 'minecraft-modern-theme'), 'section' => 'footer_settings', 'type' => 'checkbox' ) ); + + + // ========================================================================= + // 7. FAQ & TEAM + // ========================================================================= + $wp_customize->add_section( 'faq_settings', array( 'title' => __('FAQ Einstellungen', 'minecraft-modern-theme'), 'priority' => 60 ) ); + $wp_customize->add_setting( 'faq_enabled', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'faq_enabled', array( 'label' => __('FAQ System aktivieren', 'minecraft-modern-theme'), 'section' => 'faq_settings', 'type' => 'checkbox' ) ); + + $wp_customize->add_section( 'team_settings', array( 'title' => __('Team Einstellungen', 'minecraft-modern-theme'), 'priority' => 65 ) ); + $wp_customize->add_setting( 'team_enabled', array( 'default' => true, 'sanitize_callback' => 'wp_validate_boolean' ) ); + $wp_customize->add_control( 'team_enabled', array( 'label' => __('Team Showcase aktivieren', 'minecraft-modern-theme'), 'section' => 'team_settings', 'type' => 'checkbox' ) ); + + + // ========================================================================= + // 8. LOGIN + // ========================================================================= + $wp_customize->add_section( 'login_settings', array( 'title' => __('Login-Einstellungen', 'minecraft-modern-theme'), 'priority' => 70 ) ); + $wp_customize->add_setting( 'login_background_image', array( 'sanitize_callback' => 'esc_url_raw', 'transport' => 'refresh' ) ); + $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'login_background_image', array( 'label' => __('Login-Hintergrundbild', 'minecraft-modern-theme'), 'section' => 'login_settings' ) ) ); + $wp_customize->add_setting( 'login_logo', array( 'sanitize_callback' => 'esc_url_raw', 'transport' => 'refresh' ) ); + $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'login_logo', array( 'label' => __('Login-Logo', 'minecraft-modern-theme'), 'section' => 'login_settings' ) ) ); + + for ( $i = 1; $i <= 5; $i++ ) { + $wp_customize->add_setting( 'login_avatar_uuid_' . $i, array( 'sanitize_callback' => 'sanitize_text_field', 'transport' => 'refresh' ) ); + $wp_customize->add_control( 'login_avatar_uuid_' . $i, array( + 'label' => sprintf( __('Avatar %d UUID', 'minecraft-modern-theme'), $i ), + 'section' => 'login_settings', + 'type' => 'text', + ) ); + } + + $wp_customize->add_setting( 'login_avatar_slider_speed', array( 'default' => 4, 'sanitize_callback' => 'absint', 'transport' => 'refresh' ) ); + $wp_customize->add_control( 'login_avatar_slider_speed', array( + 'label' => __('Avatar-Wechsel (Sekunden)', 'minecraft-modern-theme'), + 'section' => 'login_settings', + 'type' => 'number', + 'input_attrs' => array( 'min' => 2, 'max' => 10, 'step' => 1 ), + ) ); + + + // ========================================================================= + // 8.5. VIDEO / LIVESTREAM EINSTELLUNGEN + // ========================================================================= + $wp_customize->add_section( 'video_livestream_settings', array( + 'title' => __('Video & Livestream', 'minecraft-modern-theme'), + 'description' => __('Einstellungen für YouTube Livestream-Erkennung. Hauptmethode: Livestream-Posts unter "Livestreams" erstellen. Optional: Zusätzlichen Hauptkanal hier eintragen.', 'minecraft-modern-theme'), + 'priority' => 75, + ) ); + + $wp_customize->add_setting( 'youtube_api_key', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'refresh', + ) ); + $wp_customize->add_control( 'youtube_api_key', array( + 'label' => __('YouTube API Key', 'minecraft-modern-theme'), + 'description' => __('Erforderlich für automatische YouTube Live-Erkennung. Hier API Key erstellen', 'minecraft-modern-theme'), + 'section' => 'video_livestream_settings', + 'type' => 'text', + 'input_attrs' => array( + 'placeholder' => 'AIzaSyD...', + ), + ) ); + + $wp_customize->add_setting( 'twitch_client_id', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'refresh', + ) ); + $wp_customize->add_control( 'twitch_client_id', array( + 'label' => __('Twitch Client ID', 'minecraft-modern-theme'), + 'description' => __('Erforderlich für Twitch Live-Erkennung. Hier App erstellen', 'minecraft-modern-theme'), + 'section' => 'video_livestream_settings', + 'type' => 'text', + 'input_attrs' => array( + 'placeholder' => 'xxxxxxxxxxxxxx', + ), + ) ); + + $wp_customize->add_setting( 'twitch_client_secret', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'refresh', + ) ); + $wp_customize->add_control( 'twitch_client_secret', array( + 'label' => __('Twitch Client Secret', 'minecraft-modern-theme'), + 'description' => __('Nur für Live-Prüfung. Wird serverseitig genutzt.', 'minecraft-modern-theme'), + 'section' => 'video_livestream_settings', + 'type' => 'text', + 'input_attrs' => array( + 'placeholder' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + ), + ) ); + + // ========================================================================= + // 9. EXPORT / IMPORT + // ========================================================================= + $wp_customize->add_section( 'theme_mods_import_export', array( + 'title' => __('Einstellungen sichern', 'minecraft-modern-theme'), + 'priority' => 999, + ) ); + $wp_customize->add_setting( 'import_export_placeholder', array( 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( new MM_Import_Export_Control( $wp_customize, 'import_export_placeholder', array( + 'section' => 'theme_mods_import_export', + ) ) ); +} +add_action( 'customize_register', 'minecraft_modern_customize_register' ); + + +// ========================================================================= +// DYNAMISCHES CSS – Slider-Schrift wird lokal eingebunden (DSGVO) +// ========================================================================= +function minecraft_modern_enqueue_dynamic_styles() { + $font = get_theme_mod( 'slider_font_family', 'Raleway' ); + + // Lokale Schrift statt fonts.googleapis.com (siehe mm_enqueue_local_font()). + // Fällt die Schrift aus, greift die Basis-Schrift bzw. sans-serif aus dem CSS. + mm_enqueue_local_font( $font ); + + // Dynamisches CSS als inline style + $accent_color = get_theme_mod( 'primary_accent_color', '#00d4ff' ); + $slider_color = get_theme_mod( 'slider_font_color', '#ffffff' ); + $slider_size_setting = get_theme_mod( 'slider_font_size', 'mittel' ); + $header_height_setting = get_theme_mod( 'header_height', 'mittel' ); + + $height_map = array( 'klein' => '200px', 'mittel' => '300px', 'gross' => '400px' ); + $header_height_value = isset($height_map[$header_height_setting]) ? $height_map[$header_height_setting] : '300px'; + + $font_sizes = array( + 'klein' => array( 'title' => '2.5rem', 'subtitle' => '1.2rem' ), + 'mittel' => array( 'title' => '3.5rem', 'subtitle' => '1.4rem' ), + 'gross' => array( 'title' => '4.5rem', 'subtitle' => '1.6rem' ), + 'extra-gross' => array( 'title' => '5.5rem', 'subtitle' => '1.8rem' ), + ); + $sizes = isset($font_sizes[$slider_size_setting]) ? $font_sizes[$slider_size_setting] : $font_sizes['mittel']; + + $css = " + :root { + --primary-accent: " . esc_attr($accent_color) . "; + --header-height: " . esc_attr($header_height_value) . "; + } + .slider-title, .slider-subtitle, .hero-title, .hero-subtitle, .hero-button-1, .hero-button-2 { + font-family: '" . esc_attr($font) . "', sans-serif; + color: " . esc_attr($slider_color) . "; + } + .slider-title, .hero-title { font-size: " . esc_attr($sizes['title']) . "; } + .slider-subtitle, .hero-subtitle { font-size: " . esc_attr($sizes['subtitle']) . "; } + .site-header { border-bottom: 4px solid var(--primary-accent); } + .hero-slider { border-bottom: 4px solid var(--primary-accent); } + .site-footer { border-top: 4px solid var(--primary-accent); } + "; + + wp_add_inline_style( 'minecraft-modern-style', $css ); +} +add_action( 'wp_enqueue_scripts', 'minecraft_modern_enqueue_dynamic_styles', 20 ); + + +// ========================================================================= +// PRESET LOGIC (JS im Customizer) +// ========================================================================= +function minecraft_preset_customize_js() { ?> + + array( + 'name' => __( 'FAQs', 'minecraft-modern-theme' ), + 'singular_name' => __( 'FAQ', 'minecraft-modern-theme' ), + 'add_new' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ), + 'add_new_item' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ), + 'edit_item' => __( 'FAQ bearbeiten', 'minecraft-modern-theme' ), + 'new_item' => __( 'Neue FAQ', 'minecraft-modern-theme' ), + 'view_item' => __( 'FAQ ansehen', 'minecraft-modern-theme' ), + 'search_items' => __( 'FAQs durchsuchen', 'minecraft-modern-theme' ), + 'not_found' => __( 'Keine FAQs gefunden', 'minecraft-modern-theme' ), + 'not_found_in_trash' => __( 'Keine FAQs im Papierkorb gefunden', 'minecraft-modern-theme' ), + 'all_items' => __( 'Alle FAQs', 'minecraft-modern-theme' ), + ), + 'public' => true, + 'has_archive' => true, + 'menu_icon' => 'dashicons-format-chat', + 'supports' => array( 'title', 'editor', 'page-attributes' ), + 'rewrite' => array( 'slug' => 'faq' ), + 'show_in_rest' => true, + ) ); + register_taxonomy( 'faq_category', 'faq', array( + 'label' => __( 'FAQ Kategorien', 'minecraft-modern-theme' ), + 'rewrite' => array( 'slug' => 'faq-kategorie' ), + 'hierarchical' => true, + 'show_in_rest' => true, + ) ); + } +} +add_action( 'init', 'create_faq_post_type' ); + +// ============================================================================= +// FAQ-Seitenerstellung +// ============================================================================= + +function create_faq_page_automatically() { + if ( ! get_theme_mod( 'faq_enabled', true ) ) return; + + // BUG-FIX: get_page_by_title() ist seit WP 6.2 deprecated. Ersetzt durch WP_Query. + $faq_query = new WP_Query( array( + 'post_type' => 'page', + 'title' => 'FAQ', + 'post_status' => 'publish', + 'posts_per_page' => 1, + 'no_found_rows' => true, + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + ) ); + if ( $faq_query->have_posts() ) return; + + wp_insert_post( array( + 'post_title' => 'FAQ', + 'post_content' => 'Diese Seite zeigt alle FAQs an. Der Inhalt wird automatisch generiert.', + 'post_status' => 'publish', + 'post_type' => 'page', + 'post_author' => 1, + ) ); +} +add_action( 'customize_save_after', 'create_faq_page_automatically' ); + + +function load_faq_page_template( $template ) { + if ( get_theme_mod( 'faq_enabled', true ) && is_page() ) { + global $post; + if ( $post && $post->post_title === 'FAQ' ) { + // BUG-FIX: get_template_directory() erzwang das Parent-Template und + // ignorierte ein archive-faq.php im Child-Theme. locate_template() + // bevorzugt das Child-Theme und fällt sonst aufs Parent zurück. + $t = locate_template( 'archive-faq.php' ); + if ( $t ) return $t; + } + } + return $template; +} +add_filter( 'template_include', 'load_faq_page_template' ); diff --git a/Minecraft-Modern-Theme/inc/frontpage.php b/Minecraft-Modern-Theme/inc/frontpage.php new file mode 100644 index 0000000..792b2a7 --- /dev/null +++ b/Minecraft-Modern-Theme/inc/frontpage.php @@ -0,0 +1,58 @@ + 'page', + 'title' => 'Home', + 'post_status' => 'publish', + 'posts_per_page' => 1, + 'no_found_rows' => true, + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + ) ); + $home_page = $home_query->have_posts() ? $home_query->posts[0] : null; + if ( ! $home_page ) { + $home_page_id = wp_insert_post( array( + 'post_title' => 'Home', + 'post_content' => 'Diese Seite dient als statische Startseite.', + 'post_status' => 'publish', + 'post_type' => 'page', + 'post_author' => 1, + ) ); + } else { + $home_page_id = $home_page->ID; + } + if ( $home_page_id ) { + update_option( 'show_on_front', 'page' ); + update_option( 'page_on_front', $home_page_id ); + } + } +} +add_action( 'after_switch_theme', 'set_static_front_page_automatically' ); + + +function add_home_body_class( $classes ) { + if ( is_front_page() && ! get_theme_mod( 'show_home_title', true ) ) { + $classes[] = 'home-title-hidden'; + } + return $classes; +} +add_filter( 'body_class', 'add_home_body_class' ); diff --git a/Minecraft-Modern-Theme/inc/header-nav.php b/Minecraft-Modern-Theme/inc/header-nav.php new file mode 100644 index 0000000..c260961 --- /dev/null +++ b/Minecraft-Modern-Theme/inc/header-nav.php @@ -0,0 +1,308 @@ + +
+ + + +

+ +

+ + + +

+ +

+ + +
+ + + 'fab fa-bluesky', 'discord' => 'fab fa-discord', 'youtube' => 'fab fa-youtube', + 'twitter' => 'fab fa-x-twitter', 'facebook' => 'fab fa-facebook-f', + 'instagram' => 'fab fa-instagram', 'tiktok' => 'fab fa-tiktok', + 'twitch' => 'fab fa-twitch', 'steam' => 'fab fa-steam', + 'github' => 'fab fa-github', 'linkedin' => 'fab fa-linkedin-in', + 'pinterest' => 'fab fa-pinterest-p', 'reddit' => 'fab fa-reddit-alien', + 'mastodon' => 'fab fa-mastodon', 'threads' => 'fab fa-threads', + 'kickstarter' => 'fab fa-kickstarter', 'teamspeak' => 'fab fa-teamspeak', 'spotify' => 'fab fa-spotify', + 'stoat' => 'fab fa-diaspora', + ); ?> +
+ + +
+add_section( 'header_menu_style_section', array( + 'title' => __( 'Menü-Design', 'minecraft-modern-theme' ), + 'priority' => 30, + ) ); + $wp_customize->add_setting( 'header_menu_style', array( + 'default' => 'classic', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'refresh', + ) ); + $wp_customize->add_control( 'header_menu_style', array( + 'label' => __( 'Menü-Layout wählen', 'minecraft-modern-theme' ), + 'section' => 'header_menu_style_section', + 'type' => 'select', + 'choices' => array( + 'classic' => __( '① Classic – Logo links, Menü Mitte, Icons rechts', 'minecraft-modern-theme' ), + 'centered' => __( '② Zentriert – Logo oben, Menü darunter', 'minecraft-modern-theme' ), + 'sidebar' => __( '③ Sidebar – Menü als vertikale Leiste', 'minecraft-modern-theme' ), + 'mega' => __( '④ Mega-Menü – breite Dropdown-Spalten', 'minecraft-modern-theme' ), + ), + ) ); + + // Branding-Position (gilt für alle Layouts) + $wp_customize->add_setting( 'sidebar_branding_position', array( + 'default' => 'left', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'refresh', + ) ); + $wp_customize->add_control( 'sidebar_branding_position', array( + 'label' => __( 'Logo/Titel Position', 'minecraft-modern-theme' ), + 'description' => __( 'Gilt für alle Menü-Layouts.', 'minecraft-modern-theme' ), + 'section' => 'header_menu_style_section', + 'type' => 'select', + 'choices' => array( + 'left' => __( 'Links', 'minecraft-modern-theme' ), + 'center' => __( 'Mitte', 'minecraft-modern-theme' ), + 'right' => __( 'Rechts', 'minecraft-modern-theme' ), + ), + ) ); +} +add_action( 'customize_register', 'minecraft_modern_menu_style_customizer' ); + + +// === Sidebar-Menü JavaScript (nur wenn Sidebar-Layout aktiv) === +function minecraft_modern_sidebar_menu_script() { + if ( get_theme_mod( 'header_menu_style', 'classic' ) !== 'sidebar' ) return; + ?> + + __( 'Beitrag Sidebar', 'minecraft-modern-theme' ), + 'id' => 'single-post-sidebar', + 'description' => __( 'Widget-Bereich für die Sidebar auf Einzelbeitrags-Seiten.', 'minecraft-modern-theme' ), + 'before_widget' => '', + 'before_title' => '

', + 'after_title' => '

', + ) ); +} +add_action( 'widgets_init', 'minecraft_modern_single_sidebar' ); + + +// === Single-Post Sidebar Render-Funktion === +function minecraft_modern_render_single_sidebar() { + if ( is_active_sidebar( 'single-post-sidebar' ) ) { + dynamic_sidebar( 'single-post-sidebar' ); + } else { + ?> + + + + + + + + add_section( 'single_sidebar_section', array( + 'title' => __( 'Beitrag Sidebar', 'minecraft-modern-theme' ), + 'priority' => 55, + ) ); + $wp_customize->add_setting( 'single_sidebar_enabled', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + ) ); + $wp_customize->add_control( 'single_sidebar_enabled', array( + 'label' => __( 'Sidebar auf Einzelbeiträgen anzeigen', 'minecraft-modern-theme' ), + 'section' => 'single_sidebar_section', + 'type' => 'checkbox', + ) ); + $wp_customize->add_setting( 'single_sidebar_position', array( + 'default' => 'right', + 'sanitize_callback' => 'sanitize_text_field', + ) ); + $wp_customize->add_control( 'single_sidebar_position', array( + 'label' => __( 'Sidebar-Position', 'minecraft-modern-theme' ), + 'section' => 'single_sidebar_section', + 'type' => 'select', + 'choices' => array( + 'right' => __( 'Rechts', 'minecraft-modern-theme' ), + 'left' => __( 'Links', 'minecraft-modern-theme' ), + ), + ) ); +} +add_action( 'customize_register', 'minecraft_modern_single_sidebar_customizer' ); diff --git a/Minecraft-Modern-Theme/inc/login-url.php b/Minecraft-Modern-Theme/inc/login-url.php new file mode 100644 index 0000000..4a2b239 --- /dev/null +++ b/Minecraft-Modern-Theme/inc/login-url.php @@ -0,0 +1,251 @@ + wp-login.php ausliefern + if ( $path === $slug ) { + global $pagenow, $error, $interim_login, $action, $user_login; + $pagenow = 'wp-login.php'; + require_once ABSPATH . 'wp-login.php'; + exit; + } + + // 2) Alte Login-Adresse -> Startseite + if ( $path === 'wp-login.php' ) { + wp_safe_redirect( home_url( '/' ), 302 ); + exit; + } + + // 3) /wp-admin für Nicht-Angemeldete -> Startseite. + // admin-ajax.php und admin-post.php bleiben offen, sonst brechen + // Frontend-AJAX und der Authentik-OAuth-Rückkanal. + if ( $path === 'wp-admin' || strpos( $path, 'wp-admin/' ) === 0 ) { + $datei = basename( $path ); + $erlaubt = array( 'admin-ajax.php', 'admin-post.php' ); + + if ( ! in_array( $datei, $erlaubt, true ) && ! is_user_logged_in() ) { + wp_safe_redirect( home_url( '/' ), 302 ); + exit; + } + } +} +add_action( 'init', 'mm_login_slug_handle_request', 1 ); + + +// ========================================================================= +// CUSTOMIZER: Login-URL einstellen +// ========================================================================= + +function mm_login_slug_sanitize( $value ) { + $value = sanitize_title( (string) $value ); + return in_array( $value, mm_login_slug_reserviert(), true ) ? '' : $value; +} + +/** + * Prüft die Eingabe und meldet Kollisionen direkt im Customizer zurück, + * statt sie stillschweigend zu verwerfen. + */ +function mm_login_slug_validate( $validity, $value ) { + $value = sanitize_title( (string) $value ); + + if ( $value === '' ) { + return $validity; // leer ist erlaubt (= Funktion greift nicht) + } + if ( in_array( $value, mm_login_slug_reserviert(), true ) ) { + $validity->add( 'reserviert', __( 'Dieser Pfad ist von WordPress belegt. Bitte einen anderen wählen.', 'minecraft-modern-theme' ) ); + return $validity; + } + // Kollision mit einer bestehenden Seite/Beitrag? + $vorhanden = get_page_by_path( $value, OBJECT, array( 'page', 'post' ) ); + if ( $vorhanden ) { + $validity->add( 'belegt', sprintf( + /* translators: %s: Titel des kollidierenden Inhalts */ + __( 'Der Pfad wird bereits von "%s" verwendet - diese Seite wäre dann nicht mehr erreichbar.', 'minecraft-modern-theme' ), + $vorhanden->post_title + ) ); + } + return $validity; +} +add_filter( 'customize_validate_mm_login_slug', 'mm_login_slug_validate', 10, 2 ); + +function mm_login_slug_customizer( $wp_customize ) { + $notfall = "define( 'MM_DISABLE_LOGIN_SLUG', true );"; + + $wp_customize->add_section( 'mm_login_url_section', array( + 'title' => __( 'Login-URL', 'minecraft-modern-theme' ), + 'priority' => 85, + 'description' => __( 'Ersetzt die Standard-Adresse /wp-login.php durch einen eigenen Pfad und reduziert so automatisierte Anmeldeversuche.', 'minecraft-modern-theme' ) + . '

' . esc_html__( 'Notfall:', 'minecraft-modern-theme' ) . ' ' + . esc_html__( 'Diese Zeile in die wp-config.php eintragen, dann ist /wp-login.php sofort wieder erreichbar:', 'minecraft-modern-theme' ) + . '
' . esc_html( $notfall ) . '', + ) ); + + $wp_customize->add_setting( 'mm_login_slug', array( + 'default' => '', + 'sanitize_callback' => 'mm_login_slug_sanitize', + 'transport' => 'refresh', + ) ); + $wp_customize->add_control( 'mm_login_slug', array( + 'label' => __( 'Eigener Login-Pfad', 'minecraft-modern-theme' ), + 'description' => sprintf( + /* translators: %s: Beispiel-URL */ + __( 'Nur der Pfad, ohne Schrägstriche. Ergibt: %s', 'minecraft-modern-theme' ), + '' . esc_html( home_url( '/' ) ) . 'DEIN-PFAD/' + ), + 'section' => 'mm_login_url_section', + 'type' => 'text', + ) ); + + $wp_customize->add_setting( 'mm_login_slug_enabled', array( + 'default' => false, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'refresh', + ) ); + $wp_customize->add_control( 'mm_login_slug_enabled', array( + 'label' => __( 'Eigene Login-URL aktivieren', 'minecraft-modern-theme' ), + 'description' => __( 'Erst aktivieren, wenn oben ein Pfad eingetragen und gespeichert ist. Notiere dir die neue Adresse, bevor du dich abmeldest!', 'minecraft-modern-theme' ), + 'section' => 'mm_login_url_section', + 'type' => 'checkbox', + ) ); +} +add_action( 'customize_register', 'mm_login_slug_customizer' ); + + +/** + * Hinweis im Adminbereich mit der aktuell gültigen Login-Adresse. + */ +function mm_login_slug_admin_notice() { + $slug = mm_login_slug_get(); + if ( ! $slug || ! current_user_can( 'manage_options' ) ) { + return; + } + $screen = get_current_screen(); + if ( ! $screen || ! in_array( $screen->id, array( 'dashboard', 'themes' ), true ) ) { + return; + } + printf( + '

%s %s

', + esc_html__( 'Die Anmeldung erfolgt auf dieser Seite über:', 'minecraft-modern-theme' ), + esc_html( home_url( '/' . $slug . '/' ) ) + ); +} +add_action( 'admin_notices', 'mm_login_slug_admin_notice' ); diff --git a/Minecraft-Modern-Theme/inc/login.php b/Minecraft-Modern-Theme/inc/login.php new file mode 100644 index 0000000..92ae133 --- /dev/null +++ b/Minecraft-Modern-Theme/inc/login.php @@ -0,0 +1,104 @@ +
'); + }); + " ); + + $slider_speed = get_theme_mod( 'login_avatar_slider_speed', 4 ); + wp_localize_script( 'minecraft-avatar-slider-script', 'avatarSliderSettings', array( + 'speed' => $slider_speed * 1000, + ) ); + + $login_bg_image = get_theme_mod( 'login_background_image' ); + if ( $login_bg_image ) { + wp_add_inline_style( 'minecraft-modern-login-style', "body.login { background-image: url('" . esc_url( $login_bg_image ) . "') !important; }" ); + } + $logo_url = get_theme_mod( 'login_logo' ); + if ( $logo_url ) { + wp_add_inline_style( 'minecraft-modern-login-style', ".login h1 a { background-image: url('" . esc_url( $logo_url ) . "') !important; }" ); + } +} +add_action( 'login_enqueue_scripts', 'minecraft_modern_login_assets' ); + + +function add_minecraft_avatar_slider_to_login() { + $avatar_html = '
'; + $has_avatars = false; + + for ( $i = 1; $i <= 5; $i++ ) { + $uuid = get_theme_mod( 'login_avatar_uuid_' . $i ); + if ( ! empty( $uuid ) ) { + $has_avatars = true; + $avatar_url = 'https://visage.surgeplay.com/full/' . $uuid . '.png'; + // FIX: Klasse wird hier gesetzt, JS überschreibt sie trotzdem (kompatibel) + $active_class = ( $i === 1 ) ? 'avatar-slide avatar-slide-active' : 'avatar-slide'; + $avatar_html .= 'Minecraft Avatar ' . $i . ''; + } + } + $avatar_html .= '
'; + + if ( $has_avatars ) { + echo $avatar_html; + } +} +add_action( 'login_form', 'add_minecraft_avatar_slider_to_login' ); + + +function add_post_login_links() { + ?> + + array( 'label' => __( 'Ganz oben (unter Dashboard)', 'minecraft-modern-theme' ), 'pos' => 3 ), + 'inhalte' => array( 'label' => __( 'Nach den Inhalten', 'minecraft-modern-theme' ), 'pos' => 26 ), + 'werkzeug' => array( 'label' => __( 'Bei den Werkzeugen', 'minecraft-modern-theme' ), 'pos' => 76 ), + 'unten' => array( 'label' => __( 'Ganz unten', 'minecraft-modern-theme' ), 'pos' => 101 ), + ); +} + +/** Gespeicherte Links. */ +function mm_menu_links_get() { + $links = get_option( 'mm_menu_links', array() ); + return is_array( $links ) ? $links : array(); +} + +/** + * Prüft ein Linkziel und gibt es zurück - oder '' wenn es nicht zulässig ist. + * + * Erlaubt sind ausschliesslich http/https sowie relative Ziele innerhalb des + * Backends (z. B. edit.php?post_type=video). Alles andere - insbesondere + * javascript: und data: - wird verworfen, da die Adresse später unverändert + * als href in der Adminleiste landet. + */ +function mm_menu_links_url_pruefen( $url ) { + $url = (string) $url; + + // Steuerzeichen und Leerraum entfernen. Ohne das liesse sich die + // Schema-Prüfung mit "java\nscript:..." umgehen - Browser ignorieren + // solche Zeichen beim Auflösen der Adresse. + $url = preg_replace( '/[\x00-\x20\x7F]/', '', $url ); + if ( $url === '' ) { + return ''; + } + + // Protokollrelative Adressen (//example.com) nicht zulassen + if ( strpos( $url, '//' ) === 0 ) { + return ''; + } + + // Enthält das Ziel ein Schema? + if ( preg_match( '#^([a-z][a-z0-9+.\-]*):#i', $url, $t ) ) { + if ( ! in_array( strtolower( $t[1] ), array( 'http', 'https' ), true ) ) { + return ''; + } + return esc_url_raw( $url, array( 'http', 'https' ) ); + } + + // Relatives Ziel im Backend + return sanitize_text_field( $url ); +} + + +// ========================================================================= +// 1. Links in die Seitenleiste einhängen +// ========================================================================= + +/** + * Sucht ab $wunsch den nächsten freien Platz im Menü, damit vorhandene + * Einträge nicht überschrieben werden. + */ +function mm_menu_links_freier_platz( $wunsch ) { + global $menu; + + // Bewusst nur der String-Schlüssel: Bei einem Float-Schlüssel schneidet PHP + // die Nachkommastellen ab, $menu[3.1] würde also $menu[3] abfragen und + // jede Zwischenposition fälschlich als belegt melden. + $pos = (float) $wunsch; + while ( isset( $menu[ (string) $pos ] ) ) { + $pos = round( $pos + 0.1, 1 ); + } + return (string) $pos; +} + +function mm_menu_links_registrieren() { + global $menu; + + $positionen = mm_menu_links_positionen(); + + foreach ( mm_menu_links_get() as $i => $link ) { + $titel = isset( $link['titel'] ) ? $link['titel'] : ''; + + // Zweite Prüfung beim Ausgeben: Die Adresse landet unverändert als + // href in der Adminleiste, deshalb auch hier nichts Ungeprüftes durchlassen. + $url = mm_menu_links_url_pruefen( $link['url'] ?? '' ); + + if ( $titel === '' || $url === '' ) { + continue; + } + + $icon = ! empty( $link['icon'] ) ? $link['icon'] : 'dashicons-admin-links'; + $extern = ! empty( $link['neues_fenster'] ); + $schl = isset( $link['position'] ) ? $link['position'] : 'unten'; + $wunsch = isset( $positionen[ $schl ] ) ? $positionen[ $schl ]['pos'] : 101; + + $klassen = 'menu-top mm-menu-link'; + if ( $extern ) { + $klassen .= ' mm-menu-link-extern'; + } + + // Aufbau wie in wp-admin/menu.php: + // 0 Beschriftung, 1 Fähigkeit, 2 Ziel, 3 Seitentitel, 4 Klassen, 5 Id, 6 Icon + $menu[ mm_menu_links_freier_platz( $wunsch ) ] = array( + $titel, + 'read', // alle mit Backend-Zugang + $url, + $titel, + $klassen, + 'mm-menu-link-' . (int) $i, + $icon, + ); + } +} +add_action( 'admin_menu', 'mm_menu_links_registrieren', 100 ); + +/** + * Externe Links in einem neuen Tab öffnen. + * WordPress kennt kein target-Attribut für Menüpunkte, deshalb per Skript. + */ +function mm_menu_links_target() { + $hat_externe = false; + foreach ( mm_menu_links_get() as $link ) { + if ( ! empty( $link['neues_fenster'] ) ) { + $hat_externe = true; + break; + } + } + if ( ! $hat_externe ) { + return; + } + ?> + + 'array', + 'sanitize_callback' => 'mm_menu_links_sanitize', + 'default' => array(), + ) ); +} +add_action( 'admin_menu', 'mm_menu_links_admin_menu' ); + +function mm_menu_links_sanitize( $roh ) { + $sauber = array(); + if ( ! is_array( $roh ) ) { + return $sauber; + } + $erlaubte_positionen = array_keys( mm_menu_links_positionen() ); + + foreach ( $roh as $z ) { + $titel = sanitize_text_field( $z['titel'] ?? '' ); + $url = mm_menu_links_url_pruefen( $z['url'] ?? '' ); + + // Zeilen ohne Beschriftung oder ohne zulässiges Ziel verwerfen + if ( $titel === '' || $url === '' ) { + continue; + } + + $pos = sanitize_key( $z['position'] ?? 'unten' ); + + $sauber[] = array( + 'titel' => $titel, + 'url' => $url, + 'icon' => sanitize_html_class( $z['icon'] ?? '' ) ?: 'dashicons-admin-links', + 'position' => in_array( $pos, $erlaubte_positionen, true ) ? $pos : 'unten', + 'neues_fenster' => ! empty( $z['neues_fenster'] ) ? 1 : 0, + ); + } + return $sauber; +} + +/** Eine Eingabezeile. */ +function mm_menu_links_zeile( $i, $z ) { + $titel = $z['titel'] ?? ''; + $url = $z['url'] ?? ''; + $icon = $z['icon'] ?? 'dashicons-admin-links'; + $pos = $z['position'] ?? 'unten'; + $extern = ! empty( $z['neues_fenster'] ); + $n = 'mm_menu_links[' . $i . ']'; + ?> +
+ + + + + + + + + + + + + +
+ + + + + + + '3.0', + '_exported' => date( 'Y-m-d H:i:s' ), + '_theme' => $theme_slug, + ); + + // 1. Alle Customizer-Einstellungen (Theme Mods) + // Enthält: Farben, Slider, Hero, Social Links, Menü-Design, Login-Einstellungen, Sidebar-Einstellungen usw. + $data['theme_mods'] = get_theme_mods(); + + // 2. Announcement-Bar (gespeichert als wp_options, nicht als Theme Mod) + $announcement_keys = array( + 'mm_announcement_enabled', 'mm_announcement_text', 'mm_announcement_bg', + 'mm_announcement_color', 'mm_announcement_font_size', 'mm_announcement_font_family', + 'mm_announcement_position', 'mm_announcement_countdown_enabled', + 'mm_announcement_countdown_label', 'mm_announcement_countdown_date', + 'mm_announcement_countdown_expired_msg', + ); + foreach ( $announcement_keys as $key ) { + $data['announcement'][ $key ] = get_option( $key ); + } + + // 3. Widget-Konfigurationen aller Theme-Sidebars + $theme_sidebars = array( + 'single-post-sidebar', + 'homepage-sidebar-top', 'homepage-sidebar-middle-1', + 'homepage-sidebar-middle-2', 'homepage-sidebar-bottom', + 'homepage-sidebar-extra', 'footer-1', 'footer-2', 'footer-3', + ); + $all_sidebars = wp_get_sidebars_widgets(); + $widget_data = array(); + foreach ( $theme_sidebars as $sidebar_id ) { + $widget_data[ $sidebar_id ] = array(); + if ( empty( $all_sidebars[ $sidebar_id ] ) ) continue; + foreach ( $all_sidebars[ $sidebar_id ] as $widget_id ) { + if ( ! preg_match( '/^(.+)-(\d+)$/', $widget_id, $m ) ) continue; + $type = $m[1]; + $index = intval( $m[2] ); + $all = get_option( 'widget_' . $type, array() ); + $widget_data[ $sidebar_id ][] = array( + 'type' => $type, + 'index' => $index, + 'settings' => isset( $all[ $index ] ) ? $all[ $index ] : array(), + ); + } + } + $data['widgets'] = $widget_data; + + // 4. Team-Mitglieder (mit UUID, Banner, Thumbnail) + $team_data = array(); + $team_query = new WP_Query( array( + 'post_type' => 'team_member', + 'posts_per_page' => -1, + 'orderby' => 'menu_order', + 'order' => 'ASC', + ) ); + if ( $team_query->have_posts() ) { + while ( $team_query->have_posts() ) { + $team_query->the_post(); + $post_id = get_the_ID(); + $team_data[] = array( + 'title' => get_the_title(), + 'content' => get_the_content(), + 'rank' => get_post_meta( $post_id, '_team_member_rank', true ), + 'uuid' => get_post_meta( $post_id, '_team_member_uuid', true ), + 'banner_id' => get_post_meta( $post_id, '_team_member_banner', true ), + 'thumbnail_id' => get_post_thumbnail_id( $post_id ), + 'menu_order' => get_post_field( 'menu_order', $post_id ), + ); + } + wp_reset_postdata(); + } + $data['team'] = $team_data; + + // 5. FAQ-Einträge (theme-eigener Custom Post Type) + $faq_data = array(); + $faq_query = new WP_Query( array( + 'post_type' => 'faq', + 'posts_per_page' => -1, + 'orderby' => 'menu_order', + 'order' => 'ASC', + ) ); + if ( $faq_query->have_posts() ) { + while ( $faq_query->have_posts() ) { + $faq_query->the_post(); + $terms = wp_get_post_terms( get_the_ID(), 'faq_category', array( 'fields' => 'names' ) ); + $faq_data[] = array( + 'title' => get_the_title(), + 'content' => get_the_content(), + 'menu_order' => get_post_field( 'menu_order', get_the_ID() ), + 'categories' => is_wp_error( $terms ) ? array() : $terms, + ); + } + wp_reset_postdata(); + } + $data['faqs'] = $faq_data; + + // 6. Custom CSS (Customizer → Zusätzliches CSS) + $data['custom_css'] = wp_get_custom_css(); + + // 7. Homepage-Seite (falls eingestellt) + $homepage_id = get_option( 'page_on_front' ); + if ( $homepage_id ) { + $homepage = get_post( $homepage_id ); + if ( $homepage ) { + $data['homepage'] = array( + 'title' => $homepage->post_title, + 'content' => $homepage->post_content, + 'excerpt' => $homepage->post_excerpt, + 'featured_img' => get_post_thumbnail_id( $homepage_id ), + ); + } + } + + // 8. Navigation Menüs mit Items + $nav_menus = array(); + $all_nav_menus = wp_get_nav_menus(); + foreach ( $all_nav_menus as $menu ) { + $nav_menus[ $menu->slug ] = array( + 'name' => $menu->name, + 'description' => $menu->description, + 'items' => array(), + ); + $menu_items = wp_get_nav_menu_items( $menu->term_id ); + if ( $menu_items ) { + foreach ( $menu_items as $item ) { + $nav_menus[ $menu->slug ]['items'][] = array( + 'title' => $item->title, + 'url' => $item->url, + 'description' => $item->description, + 'type' => $item->type, + 'type_label' => $item->type_label, + 'object' => $item->object, + 'object_id' => $item->object_id, + 'parent' => $item->menu_item_parent, + 'menu_order' => $item->menu_order, + 'target' => get_post_meta( $item->ID, '_menu_item_target', true ), + 'classes' => implode( ' ', (array) $item->classes ), + 'xfn' => get_post_meta( $item->ID, '_menu_item_xfn', true ), + ); + } + } + } + $data['nav_menus'] = $nav_menus; + + // 9. Menü-Positionen (welches Menü ist welchem Theme-Location zugewiesen) + $data['nav_menu_locations'] = get_theme_mod( 'nav_menu_locations', array() ); + + $json = json_encode( $data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE ); + header( 'Content-Type: application/json; charset=utf-8' ); + header( 'Content-Disposition: attachment; filename=' . $theme_slug . '-theme-backup-' . date( 'Y-m-d' ) . '.json' ); + header( 'Pragma: no-cache' ); + header( 'Expires: 0' ); + echo $json; + exit; +} + + +add_action( 'wp_ajax_import_theme_settings', 'handle_theme_settings_import' ); + +function handle_theme_settings_import() { + if ( ! current_user_can( 'edit_theme_options' ) ) { + wp_send_json_error( __( 'Keine Berechtigung.', 'minecraft-modern-theme' ) ); + } + check_ajax_referer( 'theme-import-nonce', 'nonce' ); + + if ( empty( $_FILES['import_file']['tmp_name'] ) ) { + wp_send_json_error( __( 'Keine Datei hochgeladen.', 'minecraft-modern-theme' ) ); + } + + $json_content = file_get_contents( $_FILES['import_file']['tmp_name'] ); + $data = json_decode( $json_content, true ); + + if ( json_last_error() !== JSON_ERROR_NONE || ! is_array( $data ) ) { + wp_send_json_error( __( 'Ungültige JSON-Datei.', 'minecraft-modern-theme' ) ); + } + + $imported = array(); + $version = isset( $data['_version'] ) ? $data['_version'] : '1.0'; + + // ------------------------------------------------------------------------- + // 1. Customizer / Theme Mods + // ------------------------------------------------------------------------- + $mods = array(); + if ( $version === '3.0' && isset( $data['theme_mods'] ) ) { + $mods = $data['theme_mods']; + } elseif ( $version === '2.0' && isset( $data['theme_mods'] ) ) { + $mods = $data['theme_mods']; + } else { + // Altes v1-Format: alles auf oberster Ebene + $skip = array( '_version', '_exported', '_theme', 'announcement', 'widgets', 'team', 'faqs', 'menus', 'wp_options', 'custom_css', 'team_data' ); + foreach ( $data as $k => $v ) { + if ( ! in_array( $k, $skip ) ) $mods[ $k ] = $v; + } + } + foreach ( $mods as $key => $value ) { + set_theme_mod( $key, $value ); + } + $imported[] = 'Customizer-Einstellungen'; + + // ------------------------------------------------------------------------- + // 2. Announcement-Bar + // ------------------------------------------------------------------------- + $announcement_keys = array( + 'mm_announcement_enabled', 'mm_announcement_text', 'mm_announcement_bg', + 'mm_announcement_color', 'mm_announcement_font_size', 'mm_announcement_font_family', + 'mm_announcement_position', 'mm_announcement_countdown_enabled', + 'mm_announcement_countdown_label', 'mm_announcement_countdown_date', + 'mm_announcement_countdown_expired_msg', + ); + $ann = isset( $data['announcement'] ) ? $data['announcement'] : $data; + foreach ( $announcement_keys as $key ) { + if ( array_key_exists( $key, $ann ) ) { + update_option( $key, $ann[ $key ] ); + } + } + $imported[] = 'Ankündigung'; + + // ------------------------------------------------------------------------- + // 3. Widgets + // ------------------------------------------------------------------------- + if ( ! empty( $data['widgets'] ) ) { + $current_sidebars = get_option( 'sidebars_widgets', array() ); + foreach ( $data['widgets'] as $sidebar_id => $widgets ) { + $current_sidebars[ $sidebar_id ] = array(); + foreach ( $widgets as $widget ) { + $type = sanitize_key( $widget['type'] ); + $index = intval( $widget['index'] ); + $all = get_option( 'widget_' . $type, array() ); + $all[ $index ] = $widget['settings']; + update_option( 'widget_' . $type, $all ); + $current_sidebars[ $sidebar_id ][] = $type . '-' . $index; + } + } + update_option( 'sidebars_widgets', $current_sidebars ); + $imported[] = 'Widgets'; + } + + // ------------------------------------------------------------------------- + // 4. Team-Mitglieder + // ------------------------------------------------------------------------- + $team_data = isset( $data['team'] ) ? $data['team'] : ( isset( $data['team_data'] ) ? $data['team_data'] : array() ); + if ( ! empty( $team_data ) ) { + $existing = new WP_Query( array( 'post_type' => 'team_member', 'posts_per_page' => -1, 'fields' => 'ids' ) ); + if ( $existing->have_posts() ) { + foreach ( $existing->posts as $pid ) wp_delete_post( $pid, true ); + } + wp_reset_postdata(); + foreach ( $team_data as $member ) { + $id = wp_insert_post( array( + 'post_title' => sanitize_text_field( $member['title'] ), + 'post_content' => wp_kses_post( $member['content'] ), + 'post_type' => 'team_member', + 'post_status' => 'publish', + 'menu_order' => intval( isset( $member['menu_order'] ) ? $member['menu_order'] : 0 ), + ) ); + if ( $id && ! is_wp_error( $id ) ) { + // Rank + if ( ! empty( $member['rank'] ) ) { + update_post_meta( $id, '_team_member_rank', sanitize_text_field( $member['rank'] ) ); + } + // UUID + if ( ! empty( $member['uuid'] ) ) { + update_post_meta( $id, '_team_member_uuid', sanitize_text_field( $member['uuid'] ) ); + } + // Thumbnail + if ( ! empty( $member['thumbnail_id'] ) ) { + set_post_thumbnail( $id, intval( $member['thumbnail_id'] ) ); + } + // Banner + if ( ! empty( $member['banner_id'] ) ) { + update_post_meta( $id, '_team_member_banner', intval( $member['banner_id'] ) ); + } + } + } + $imported[] = count( $team_data ) . ' Team-Mitglieder'; + } + + // ------------------------------------------------------------------------- + // 5. FAQs + // ------------------------------------------------------------------------- + if ( ! empty( $data['faqs'] ) ) { + $existing = new WP_Query( array( 'post_type' => 'faq', 'posts_per_page' => -1, 'fields' => 'ids' ) ); + if ( $existing->have_posts() ) { + foreach ( $existing->posts as $pid ) wp_delete_post( $pid, true ); + } + wp_reset_postdata(); + foreach ( $data['faqs'] as $faq ) { + $id = wp_insert_post( array( + 'post_title' => sanitize_text_field( $faq['title'] ), + 'post_content' => wp_kses_post( $faq['content'] ), + 'post_type' => 'faq', + 'post_status' => 'publish', + 'menu_order' => intval( isset( $faq['menu_order'] ) ? $faq['menu_order'] : 0 ), + ) ); + if ( $id && ! is_wp_error( $id ) && ! empty( $faq['categories'] ) ) { + foreach ( (array) $faq['categories'] as $cat_name ) { + $term = term_exists( sanitize_text_field( $cat_name ), 'faq_category' ); + if ( ! $term ) { + $term = wp_insert_term( sanitize_text_field( $cat_name ), 'faq_category' ); + } + if ( ! is_wp_error( $term ) ) { + wp_set_post_terms( $id, array( intval( $term['term_id'] ) ), 'faq_category', true ); + } + } + } + } + $imported[] = count( $data['faqs'] ) . ' FAQs'; + } + + // ------------------------------------------------------------------------- + // 6. Custom CSS + // ------------------------------------------------------------------------- + if ( isset( $data['custom_css'] ) && $data['custom_css'] !== '' ) { + wp_update_custom_css_post( $data['custom_css'] ); + $imported[] = 'Custom CSS'; + } + + // ------------------------------------------------------------------------- + // 7. Homepage-Seite + // ------------------------------------------------------------------------- + if ( ! empty( $data['homepage'] ) ) { + $homepage_id = get_option( 'page_on_front' ); + if ( $homepage_id ) { + wp_update_post( array( + 'ID' => $homepage_id, + 'post_title' => sanitize_text_field( $data['homepage']['title'] ), + 'post_content' => wp_kses_post( $data['homepage']['content'] ), + 'post_excerpt' => sanitize_textarea_field( $data['homepage']['excerpt'] ), + ) ); + if ( ! empty( $data['homepage']['featured_img'] ) ) { + set_post_thumbnail( $homepage_id, intval( $data['homepage']['featured_img'] ) ); + } + $imported[] = 'Homepage-Seite'; + } + } + + // ------------------------------------------------------------------------- + // 8. Navigation Menüs mit Items + // ------------------------------------------------------------------------- + if ( ! empty( $data['nav_menus'] ) ) { + $menu_id_map = array(); // slug => term_id Mapping für Item-Parent-Zuordnung + + // Alle existierenden Menüs löschen + $existing_menus = wp_get_nav_menus(); + foreach ( $existing_menus as $menu ) { + wp_delete_nav_menu( $menu->term_id ); + } + + // Neue Menüs und Items importieren + foreach ( $data['nav_menus'] as $menu_slug => $menu_data ) { + $new_menu = wp_create_nav_menu( $menu_data['name'] ); + if ( ! is_wp_error( $new_menu ) ) { + $menu_id_map[ $menu_slug ] = $new_menu; + + // Items hinzufügen + if ( ! empty( $menu_data['items'] ) ) { + $item_id_map = array(); // Altes Item ID => Neues Item ID Mapping + + // Erste Runde: Root-Items (parent = 0) + foreach ( $menu_data['items'] as $idx => $item ) { + if ( empty( $item['parent'] ) || $item['parent'] == 0 ) { + $item_id = wp_update_nav_menu_item( $new_menu, 0, array( + 'menu-item-title' => sanitize_text_field( $item['title'] ), + 'menu-item-url' => esc_url_raw( $item['url'] ), + 'menu-item-description' => sanitize_text_field( $item['description'] ), + 'menu-item-type' => sanitize_key( $item['type'] ), + 'menu-item-object' => sanitize_key( $item['object'] ), + 'menu-item-object-id' => intval( $item['object_id'] ), + 'menu-item-target' => sanitize_text_field( $item['target'] ), + 'menu-item-classes' => sanitize_text_field( $item['classes'] ), + 'menu-item-xfn' => sanitize_text_field( $item['xfn'] ), + 'menu-item-status' => 'publish', + ) ); + if ( $item_id && ! is_wp_error( $item_id ) ) { + $item_id_map[ $idx ] = $item_id; + } + } + } + + // Zweite Runde: Sub-Items (parent > 0) + foreach ( $menu_data['items'] as $idx => $item ) { + if ( ! empty( $item['parent'] ) && $item['parent'] > 0 ) { + $parent_item_id = isset( $item_id_map[ $item['parent'] - 1 ] ) ? $item_id_map[ $item['parent'] - 1 ] : 0; + $item_id = wp_update_nav_menu_item( $new_menu, 0, array( + 'menu-item-title' => sanitize_text_field( $item['title'] ), + 'menu-item-url' => esc_url_raw( $item['url'] ), + 'menu-item-description' => sanitize_text_field( $item['description'] ), + 'menu-item-type' => sanitize_key( $item['type'] ), + 'menu-item-object' => sanitize_key( $item['object'] ), + 'menu-item-object-id' => intval( $item['object_id'] ), + 'menu-item-parent-id' => $parent_item_id, + 'menu-item-target' => sanitize_text_field( $item['target'] ), + 'menu-item-classes' => sanitize_text_field( $item['classes'] ), + 'menu-item-xfn' => sanitize_text_field( $item['xfn'] ), + 'menu-item-status' => 'publish', + ) ); + if ( $item_id && ! is_wp_error( $item_id ) ) { + $item_id_map[ $idx ] = $item_id; + } + } + } + } + } + } + $imported[] = 'Navigation Menüs (' . count( $data['nav_menus'] ) . ')'; + } + + // ------------------------------------------------------------------------- + // 9. Menü-Positionen + // ------------------------------------------------------------------------- + if ( ! empty( $data['nav_menu_locations'] ) ) { + set_theme_mod( 'nav_menu_locations', $data['nav_menu_locations'] ); + $imported[] = 'Menü-Positionen'; + } + + wp_send_json_success( sprintf( + __( 'Erfolgreich wiederhergestellt: %s', 'minecraft-modern-theme' ), + implode( ', ', $imported ) + ) ); +} diff --git a/Minecraft-Modern-Theme/inc/team.php b/Minecraft-Modern-Theme/inc/team.php new file mode 100644 index 0000000..c50e3c3 --- /dev/null +++ b/Minecraft-Modern-Theme/inc/team.php @@ -0,0 +1,513 @@ + array( + 'name' => __( 'Team', 'minecraft-modern-theme' ), + 'singular_name' => __( 'Teammitglied', 'minecraft-modern-theme' ), + 'add_new' => __( 'Neues Mitglied', 'minecraft-modern-theme' ), + 'menu_name' => __( 'Team', 'minecraft-modern-theme' ), + ), + 'public' => true, + 'has_archive' => true, + 'menu_icon' => 'dashicons-groups', + 'supports' => array( 'title', 'thumbnail', 'page-attributes' ), + 'rewrite' => array( 'slug' => 'team' ), + 'show_in_rest' => true, + 'show_in_menu' => false, + ) ); + } +} +add_action( 'init', 'create_team_post_type' ); + + +function add_team_meta_boxes() { + add_meta_box( 'team_member_rank_box', __( 'Rang & Position', 'minecraft-modern-theme' ), 'team_member_rank_callback', 'team_member', 'side', 'default' ); +} +add_action( 'add_meta_boxes', 'add_team_meta_boxes' ); + +function team_member_rank_callback( $post ) { + wp_nonce_field( 'team_member_rank_save', 'team_member_rank_nonce' ); + $value = get_post_meta( $post->ID, '_team_member_rank', true ); + ?> +

+ + +

+ id !== 'toplevel_page_mm-team-manager' ) return; + echo ''; +} +add_action( 'admin_head', 'mm_team_manager_admin_css' ); + +function mm_team_manager_page_html() { + ?> +
+

Team Verwaltung

+

Hier kannst du Teammitglieder hinzufügen, sortieren und bearbeiten.

+ +
+

Neues Mitglied hinzufügen

+
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+
+ +

UUID eingeben → Avatar wird automatisch geladen

+
+ +
+
+
+ + + Kein Bild gewählt +
+

Wird ignoriert wenn UUID gesetzt ist

+
+ +
+
+
+ + + Kein Banner gewählt +
+

Hintergrundbild der Card (optional)

+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + 'team_member', 'posts_per_page' => -1, 'orderby' => 'menu_order', 'order' => 'ASC' ) ); + if ( $team_query->have_posts() ) : + while ( $team_query->have_posts() ) : $team_query->the_post(); + $id = get_the_ID(); + $name = get_the_title(); + $rank = get_post_meta( $id, '_team_member_rank', true ); + $bio = get_the_content(); + $uuid = get_post_meta( $id, '_team_member_uuid', true ); + $img_id = get_post_thumbnail_id( $id ); + $banner_id = get_post_meta( $id, '_team_member_banner', true ); + $banner_url = $banner_id ? wp_get_attachment_image_url( $banner_id, 'medium' ) : false; + + // Avatar anzeigen: UUID > Bild > Placeholder + if ( $uuid ) { + $avatar_src = 'https://visage.surgeplay.com/bust/' . esc_attr($uuid) . '.png'; + } elseif ( $img_id ) { + $avatar_src = wp_get_attachment_image_url( $img_id, array(40,40) ); + } else { + $avatar_src = false; + } + ?> + + + + + + + + + + '; + endif; + ?> + +
BildNameRangBioUUID / BildSort.Aktionen
+
+ + + + 👤 + +
+
+ +
+ + + +
+ +
+
+ + + + + +
Noch keine Mitglieder vorhanden.
+
+
+ + + $id, 'menu_order' => $pos ) ); + $pos++; + } + wp_send_json_success(); +} + + +add_action( 'wp_ajax_mm_add_team_member', 'handle_mm_add_member' ); +function handle_mm_add_member() { + check_ajax_referer( 'mm_team_nonce', 'nonce' ); + if ( ! current_user_can( 'publish_posts' ) ) wp_send_json_error( 'Keine Berechtigung' ); + + $id = wp_insert_post( array( + 'post_title' => sanitize_text_field( $_POST['name'] ), + 'post_content' => sanitize_textarea_field( $_POST['bio'] ), + 'post_type' => 'team_member', + 'post_status' => 'publish', + 'menu_order' => 999, + ) ); + + if ( ! $id || is_wp_error( $id ) ) { + wp_send_json_error( 'Fehler beim Erstellen' ); + } + + update_post_meta( $id, '_team_member_rank', sanitize_text_field( $_POST['rank'] ) ); + + // UUID speichern (kein externer Request hier – nur als Text speichern) + if ( ! empty( $_POST['uuid'] ) ) { + $uuid = sanitize_text_field( trim( $_POST['uuid'] ) ); + update_post_meta( $id, '_team_member_uuid', $uuid ); + } elseif ( ! empty( $_POST['img_id'] ) ) { + set_post_thumbnail( $id, intval( $_POST['img_id'] ) ); + } + + // Banner-Bild speichern + if ( ! empty( $_POST['banner_id'] ) ) { + update_post_meta( $id, '_team_member_banner', intval( $_POST['banner_id'] ) ); + } + + wp_send_json_success( array( 'id' => $id, 'msg' => 'Hinzugefügt' ) ); +} + +add_action( 'wp_ajax_mm_update_team_member', 'handle_mm_update_team_member' ); +function handle_mm_update_team_member() { + check_ajax_referer( 'mm_team_nonce', 'nonce' ); + if ( ! current_user_can( 'edit_posts' ) ) wp_send_json_error( 'Keine Berechtigung' ); + $id = intval( $_POST['id'] ); + wp_update_post( array( + 'ID' => $id, + 'post_title' => sanitize_text_field( $_POST['title'] ), + 'post_content' => sanitize_textarea_field( $_POST['bio'] ), + ) ); + update_post_meta( $id, '_team_member_rank', sanitize_text_field( $_POST['rank'] ) ); + // UUID speichern oder löschen + if ( isset( $_POST['uuid'] ) ) { + $uuid = sanitize_text_field( trim( $_POST['uuid'] ) ); + if ( $uuid ) { + update_post_meta( $id, '_team_member_uuid', $uuid ); + } else { + delete_post_meta( $id, '_team_member_uuid' ); + } + } + // Bild nur setzen wenn keine UUID + if ( empty( $_POST['uuid'] ) && ! empty( $_POST['img_id'] ) ) { + set_post_thumbnail( $id, intval( $_POST['img_id'] ) ); + } + // Banner speichern + if ( isset( $_POST['banner_id'] ) ) { + if ( ! empty( $_POST['banner_id'] ) ) { + update_post_meta( $id, '_team_member_banner', intval( $_POST['banner_id'] ) ); + } + } + wp_send_json_success( 'Gespeichert' ); +} + +add_action( 'wp_ajax_mm_delete_team_member', 'handle_mm_delete_team_member' ); +function handle_mm_delete_team_member() { + check_ajax_referer( 'mm_team_nonce', 'nonce' ); + if ( ! current_user_can( 'delete_posts' ) ) wp_send_json_error( 'Keine Berechtigung' ); + wp_delete_post( intval( $_POST['id'] ), true ); + wp_send_json_success( 'Gelöscht' ); +} + + +function create_team_page_automatically() { + if ( get_theme_mod( 'team_enabled', true ) && get_page_by_title( 'Team' ) == null ) { + wp_insert_post( array( 'post_title' => 'Team', 'post_status' => 'publish', 'post_type' => 'page', 'post_author' => 1 ) ); + } +} +add_action( 'customize_save_after', 'create_team_page_automatically' ); + + +function load_team_page_template( $template ) { + if ( ! get_theme_mod( 'team_enabled', true ) ) return $template; + + // BUG-FIX: locate_template() statt get_template_directory() – so wird ein + // archive-team.php im Child-Theme berücksichtigt. + $is_team_page = false; + if ( is_post_type_archive( 'team_member' ) ) { + $is_team_page = true; + } elseif ( is_page() ) { + $obj = get_queried_object(); + $is_team_page = ( $obj && $obj->post_name === 'team' ); + } + + if ( $is_team_page ) { + $t = locate_template( 'archive-team.php' ); + if ( $t ) return $t; + } + return $template; +} +add_filter( 'template_include', 'load_team_page_template' ); + + +// Doppelte team_customize_register entfernt – ist jetzt in inc/customizer.php diff --git a/Minecraft-Modern-Theme/inc/theme-setup.php b/Minecraft-Modern-Theme/inc/theme-setup.php new file mode 100644 index 0000000..70c96c1 --- /dev/null +++ b/Minecraft-Modern-Theme/inc/theme-setup.php @@ -0,0 +1,267 @@ + 9999, + 'width' => 9999, + 'flex-height' => true, + 'flex-width' => true, + 'header_text' => array( 'site-title', 'site-description' ), + ) ); + + add_theme_support( 'custom-background' ); + + register_nav_menus( array( + 'primary' => __( 'Hauptmenü', 'minecraft-modern-theme' ), + 'footer' => __( 'Footer-Menü', 'minecraft-modern-theme' ), + ) ); + + // FIX: 'script' und 'style' ergänzt für sauberes HTML5-Output-Format + add_theme_support( 'html5', array( + 'search-form', 'comment-form', 'comment-list', + 'gallery', 'caption', 'script', 'style', + ) ); +} +add_action( 'after_setup_theme', 'minecraft_modern_setup' ); + + +// ========================================================================= +// LOKALE SCHRIFTEN (DSGVO) +// ========================================================================= +// Schriften liegen unter /fonts//font.css samt woff2-Dateien und werden +// lokal ausgeliefert. Dadurch wird beim Seitenaufruf keine Verbindung zu +// fonts.googleapis.com / fonts.gstatic.com aufgebaut und keine Besucher-IP +// an Google übertragen. + +/** + * Wandelt einen Schriftnamen in den Ordnernamen unter /fonts/ um. + * "Open Sans" -> "open-sans" + */ +function mm_font_slug( $font_name ) { + return strtolower( str_replace( ' ', '-', trim( $font_name ) ) ); +} + +/** + * Bindet eine lokal gehostete Schrift ein. + * + * Das Handle wird aus dem Schriftnamen abgeleitet ("Open Sans" -> mm-font-open-sans). + * Dadurch wird dieselbe Schrift automatisch nur einmal eingebunden, auch wenn sie + * an mehreren Stellen angefordert wird (z. B. Basis- und Slider-Schrift beide Raleway). + * + * @param string $font_name Schriftname, z. B. "Open Sans". + * @return bool True, wenn die Schrift lokal vorhanden war und eingebunden wurde. + */ +function mm_enqueue_local_font( $font_name ) { + if ( empty( $font_name ) ) { + return false; + } + $slug = mm_font_slug( $font_name ); + $rel = '/fonts/' . $slug . '/font.css'; + $path = get_template_directory() . $rel; + + if ( ! file_exists( $path ) ) { + return false; + } + wp_enqueue_style( 'mm-font-' . $slug, get_template_directory_uri() . $rel, array(), filemtime( $path ) ); + return true; +} + + +// === Styles & Scripts laden === +function minecraft_modern_scripts() { + // Haupt-Stylesheet des Parent-Themes. + // Bewusst get_template_directory_uri() statt get_stylesheet_uri(): Bei aktivem + // Child-Theme zeigt get_stylesheet_uri() auf das Child. Das Child-Theme belegt + // dasselbe Handle mit der Parent-Datei – zeigten beide auf unterschiedliche + // Dateien, entschiede die Aufrufreihenfolge darüber, welches CSS geladen wird + // (WordPress ignoriert den zweiten Aufruf eines bereits registrierten Handles). + // So liefern beide Seiten dieselbe Datei und die Reihenfolge ist egal. + wp_enqueue_style( + 'minecraft-modern-style', + get_template_directory_uri() . '/style.css', + array(), + filemtime( get_template_directory() . '/style.css' ) + ); + + // Bei aktivem Child-Theme dessen style.css danach laden, damit das Theme auch + // dann vollständig ist, wenn das Child keine eigene Enqueue-Funktion mitbringt. + if ( is_child_theme() && file_exists( get_stylesheet_directory() . '/style.css' ) ) { + wp_enqueue_style( + 'minecraft-modern-child-style', + get_stylesheet_uri(), + array( 'minecraft-modern-style' ), + filemtime( get_stylesheet_directory() . '/style.css' ) + ); + } + + // Basis-Schrift des Themes (lokal, siehe mm_enqueue_local_font) + mm_enqueue_local_font( 'Raleway' ); + + // Font Awesome (lokal statt cdnjs) – vorher als fester in header.php + wp_enqueue_style( + 'font-awesome', + get_template_directory_uri() . '/css/fontawesome.min.css', + array(), + filemtime( get_template_directory() . '/css/fontawesome.min.css' ) + ); + + // Swiper.js CSS (lokal statt CDN) + wp_enqueue_style( + 'swiper-css', + get_template_directory_uri() . '/css/swiper-bundle.min.css', + array(), + filemtime( get_template_directory() . '/css/swiper-bundle.min.css' ) + ); + + // Header-Scroll + Suche Toggle + wp_enqueue_script( + 'minecraft-modern-header-script', + get_template_directory_uri() . '/js/header-scroll.js', + array(), + filemtime( get_template_directory() . '/js/header-scroll.js' ), + true + ); + + // Navigation (Dropdown + Außenklick-Schließen) + wp_enqueue_script( + 'minecraft-navigation', + get_template_directory_uri() . '/js/navigation.js', + array(), + filemtime( get_template_directory() . '/js/navigation.js' ), + true + ); + + // Swiper.js (lokal statt CDN) + wp_enqueue_script( + 'swiper-js', + get_template_directory_uri() . '/js/swiper-bundle.min.js', + array(), + filemtime( get_template_directory() . '/js/swiper-bundle.min.js' ), + true + ); + + // Slider-Init + wp_enqueue_script( + 'minecraft-modern-slider-script', + get_template_directory_uri() . '/js/slider-init.js', + array( 'swiper-js' ), + filemtime( get_template_directory() . '/js/slider-init.js' ), + true + ); + + // Theme Toggle + wp_enqueue_script( + 'theme-toggle-script', + get_template_directory_uri() . '/js/theme-toggle.js', + array(), + filemtime( get_template_directory() . '/js/theme-toggle.js' ), + true + ); + + // BUG-FIX: post_type_exists('faq') prüft nur ob der CPT registriert ist, nicht ob wir + // auf einer FAQ-Seite sind – das Script wurde damit seitenübergreifend geladen. + // Jetzt: nur auf FAQ-Archiv-, Einzel- und Seiten mit FAQ-Template laden. + if ( post_type_exists( 'faq' ) && ( is_post_type_archive( 'faq' ) || is_singular( 'faq' ) || is_page( 'FAQ' ) || is_page( 'faq' ) ) ) { + wp_enqueue_script( + 'faq-accordion-script', + get_template_directory_uri() . '/js/faq-accordion.js', + array(), + filemtime( get_template_directory() . '/js/faq-accordion.js' ), + true + ); + } + + // FIX: 'loop' ergänzt – war in slider-init.js als sliderSettings.loop referenziert, aber nie übergeben + wp_localize_script( + 'minecraft-modern-slider-script', + 'sliderSettings', + array( + 'hideArrows' => get_theme_mod( 'slider_hide_arrows', false ) ? '1' : '0', + 'hidePagination' => get_theme_mod( 'slider_hide_pagination', false ) ? '1' : '0', + 'effect' => get_theme_mod( 'slider_effect', 'fade' ), + 'direction' => get_theme_mod( 'slider_direction', 'horizontal' ), + 'defaultMode' => get_theme_mod( 'default_theme_mode', 'dark' ), + 'loop' => get_theme_mod( 'slider_loop', true ) ? '1' : '0', + 'ajax_url' => admin_url( 'admin-ajax.php' ), + ) + ); + + wp_localize_script( + 'minecraft-modern-header-script', + 'headerSettings', + array( + 'isCustomizer' => is_customize_preview(), + ) + ); +} +add_action( 'wp_enqueue_scripts', 'minecraft_modern_scripts' ); + + +// FIX: Scroll-to-Top via Customizer ein-/ausblendbar +function minecraft_modern_scroll_to_top_css() { + if ( ! get_theme_mod( 'show_scroll_to_top', true ) ) { + wp_add_inline_style( 'minecraft-modern-style', '#scroll-to-top { display: none !important; }' ); + } +} +add_action( 'wp_enqueue_scripts', 'minecraft_modern_scroll_to_top_css', 25 ); + + +// ========================================================================= +// PERFORMANCE: WordPress-Emoji-Ersetzung abschalten +// ========================================================================= +// WordPress prüft per JavaScript, ob der Browser den neuesten Emoji-Satz +// kennt. Fällt der Test negativ aus (unter Windows 10 häufig der Fall), +// werden ALLE Emoji im Seiteninhalt durch SVG-Grafiken von s.w.org ersetzt. +// Auf dieser Seite waren das 9 externe Downloads mit rund 13 Sekunden +// Gesamtladezeit – ausgelöst durch die Emoji in der Ankündigungs-Leiste und +// den Assistent-Buttons. +// +// Ohne das Skript stellt der Browser die Emoji als ganz normale Schriftzeichen +// dar; sie bleiben also sichtbar, es entfällt nur der externe Bilder-Download. +// Zum Rückgängigmachen genügt es, die folgende Funktion samt Hooks zu löschen. +function minecraft_modern_disable_emoji_scripts() { + remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); + remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + remove_action( 'wp_print_styles', 'print_emoji_styles' ); + remove_action( 'admin_print_styles', 'print_emoji_styles' ); + remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); + remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); + remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); +} +add_action( 'init', 'minecraft_modern_disable_emoji_scripts' ); + +/** + * Entfernt zusätzlich das Emoji-Skript aus dem TinyMCE-Editor. + */ +function minecraft_modern_disable_emoji_tinymce( $plugins ) { + return is_array( $plugins ) ? array_diff( $plugins, array( 'wpemoji' ) ) : array(); +} +add_filter( 'tiny_mce_plugins', 'minecraft_modern_disable_emoji_tinymce' ); + +/** + * Verhindert den DNS-Prefetch auf s.w.org, den WordPress sonst zusätzlich setzt. + */ +function minecraft_modern_remove_emoji_dns_prefetch( $urls, $relation_type ) { + if ( 'dns-prefetch' === $relation_type ) { + $emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/' ); + $urls = array_diff( $urls, array( $emoji_svg_url ) ); + } + return $urls; +} +add_filter( 'wp_resource_hints', 'minecraft_modern_remove_emoji_dns_prefetch', 10, 2 ); diff --git a/Minecraft-Modern-Theme/inc/theme-updater.php b/Minecraft-Modern-Theme/inc/theme-updater.php index 1863f67..6ed18b8 100644 --- a/Minecraft-Modern-Theme/inc/theme-updater.php +++ b/Minecraft-Modern-Theme/inc/theme-updater.php @@ -1,141 +1,141 @@ -theme_slug = get_template(); - - add_action( 'admin_notices', [ $this, 'display_update_notice' ] ); - add_action( 'wp_dashboard_setup', [ $this, 'add_dashboard_widget' ] ); - add_action( 'admin_init', [ $this, 'handle_refresh_request' ] ); - } - - /** - * Holt die API-Daten von Gitea (mit Transient-Cache). - */ - private function get_latest_release() { - $update_data = get_transient( $this->transient_key ); - - if ( false === $update_data ) { - $api_url = "https://git.viper.ipv64.net/api/v1/repos/{$this->repo}/releases/latest"; - $response = wp_remote_get( $api_url, [ 'timeout' => 10 ] ); - - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) { - set_transient( $this->transient_key, [ 'error' => true ], 2 * HOUR_IN_SECONDS ); - return [ 'error' => true ]; - } - - $data = json_decode( wp_remote_retrieve_body( $response ) ); - $new_version = ltrim( $data->tag_name, 'vV' ); - - $update_data = [ - 'version' => $new_version, - 'url' => "https://git.viper.ipv64.net/{$this->repo}/releases", - ]; - - set_transient( $this->transient_key, $update_data, 12 * HOUR_IN_SECONDS ); - } - - return $update_data; - } - - /** - * Zeigt die gelbe Info-Box oben im Admin-Bereich an, wenn ein Update verfügbar ist. - */ - public function display_update_notice() { - if ( ! current_user_can( 'update_themes' ) ) return; - - $latest = $this->get_latest_release(); - if ( isset( $latest['error'] ) ) return; - - $current_version = wp_get_theme( $this->theme_slug )->get( 'Version' ); - if ( ! $current_version ) return; - - if ( version_compare( $current_version, $latest['version'], '<' ) ) { - ?> -
-

- - Minecraft Modern Update verfügbar: - Version ist bereit zum Download. - - Zum Download → - -

-
- theme_slug )->get( 'Version' ); - $latest = $this->get_latest_release(); - - echo '
'; - echo '

Installiert: ' . esc_html( $current_version ?: '–' ) . '

'; - - if ( isset( $latest['version'] ) ) { - echo '

Aktuellste: ' . esc_html( $latest['version'] ) . '

'; - - if ( $current_version && version_compare( $current_version, $latest['version'], '<' ) ) { - echo '
'; - echo '

Update verfügbar!

'; - echo 'Download ZIP von Gitea'; - echo '
'; - } else { - echo '

'; - echo ' Theme ist aktuell.

'; - } - } else { - echo '

Prüfung fehlgeschlagen.

'; - } - - $refresh_url = wp_nonce_url( admin_url( 'index.php?mm_refresh_check=1' ), 'mm_refresh_action' ); - echo '

Update-Cache jetzt leeren

'; - echo '
'; - } - - /** - * Verarbeitet den Klick auf "Update-Cache jetzt leeren". - */ - public function handle_refresh_request() { - if ( isset( $_GET['mm_refresh_check'] ) && check_admin_referer( 'mm_refresh_action' ) ) { - delete_transient( $this->transient_key ); - wp_redirect( admin_url( 'index.php' ) ); - exit; - } - } -} - +theme_slug = get_template(); + + add_action( 'admin_notices', [ $this, 'display_update_notice' ] ); + add_action( 'wp_dashboard_setup', [ $this, 'add_dashboard_widget' ] ); + add_action( 'admin_init', [ $this, 'handle_refresh_request' ] ); + } + + /** + * Holt die API-Daten von Gitea (mit Transient-Cache). + */ + private function get_latest_release() { + $update_data = get_transient( $this->transient_key ); + + if ( false === $update_data ) { + $api_url = "https://git.viper.ipv64.net/api/v1/repos/{$this->repo}/releases/latest"; + $response = wp_remote_get( $api_url, [ 'timeout' => 10 ] ); + + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) { + set_transient( $this->transient_key, [ 'error' => true ], 2 * HOUR_IN_SECONDS ); + return [ 'error' => true ]; + } + + $data = json_decode( wp_remote_retrieve_body( $response ) ); + $new_version = ltrim( $data->tag_name, 'vV' ); + + $update_data = [ + 'version' => $new_version, + 'url' => "https://git.viper.ipv64.net/{$this->repo}/releases", + ]; + + set_transient( $this->transient_key, $update_data, 12 * HOUR_IN_SECONDS ); + } + + return $update_data; + } + + /** + * Zeigt die gelbe Info-Box oben im Admin-Bereich an, wenn ein Update verfügbar ist. + */ + public function display_update_notice() { + if ( ! current_user_can( 'update_themes' ) ) return; + + $latest = $this->get_latest_release(); + if ( isset( $latest['error'] ) ) return; + + $current_version = wp_get_theme( $this->theme_slug )->get( 'Version' ); + if ( ! $current_version ) return; + + if ( version_compare( $current_version, $latest['version'], '<' ) ) { + ?> +
+

+ + Minecraft Modern Update verfügbar: + Version ist bereit zum Download. + + Zum Download → + +

+
+ theme_slug )->get( 'Version' ); + $latest = $this->get_latest_release(); + + echo '
'; + echo '

Installiert: ' . esc_html( $current_version ?: '–' ) . '

'; + + if ( isset( $latest['version'] ) ) { + echo '

Aktuellste: ' . esc_html( $latest['version'] ) . '

'; + + if ( $current_version && version_compare( $current_version, $latest['version'], '<' ) ) { + echo '
'; + echo '

Update verfügbar!

'; + echo 'Download ZIP von Gitea'; + echo '
'; + } else { + echo '

'; + echo ' Theme ist aktuell.

'; + } + } else { + echo '

Prüfung fehlgeschlagen.

'; + } + + $refresh_url = wp_nonce_url( admin_url( 'index.php?mm_refresh_check=1' ), 'mm_refresh_action' ); + echo '

Update-Cache jetzt leeren

'; + echo '
'; + } + + /** + * Verarbeitet den Klick auf "Update-Cache jetzt leeren". + */ + public function handle_refresh_request() { + if ( isset( $_GET['mm_refresh_check'] ) && check_admin_referer( 'mm_refresh_action' ) ) { + delete_transient( $this->transient_key ); + wp_redirect( admin_url( 'index.php' ) ); + exit; + } + } +} + new Minecraft_Modern_Theme_Manager(); \ No newline at end of file diff --git a/Minecraft-Modern-Theme/inc/video.php b/Minecraft-Modern-Theme/inc/video.php new file mode 100644 index 0000000..9bffdbf --- /dev/null +++ b/Minecraft-Modern-Theme/inc/video.php @@ -0,0 +1,1272 @@ + array( + 'name' => __( 'Videos', 'minecraft-modern-theme' ), + 'singular_name' => __( 'Video', 'minecraft-modern-theme' ), + 'add_new' => __( 'Neues Video', 'minecraft-modern-theme' ), + 'add_new_item' => __( 'Neues Video hinzufügen', 'minecraft-modern-theme' ), + 'edit_item' => __( 'Video bearbeiten', 'minecraft-modern-theme' ), + 'all_items' => __( 'Alle Videos', 'minecraft-modern-theme' ), + 'menu_name' => __( 'Videos', 'minecraft-modern-theme' ), + ), + 'public' => true, + 'has_archive' => true, + 'menu_icon' => 'dashicons-video-alt3', + 'menu_position' => 7, + 'supports' => array( 'title', 'thumbnail', 'excerpt', 'page-attributes' ), + 'rewrite' => array( 'slug' => 'videos' ), + 'show_in_rest' => true, + ) ); + + register_post_type( 'mm_livestream', array( + 'labels' => array( + 'name' => __( 'Livestreams', 'minecraft-modern-theme' ), + 'singular_name' => __( 'Livestream', 'minecraft-modern-theme' ), + 'add_new' => __( 'Neuer Livestream', 'minecraft-modern-theme' ), + 'add_new_item' => __( 'Neuen Livestream hinzufügen', 'minecraft-modern-theme' ), + 'edit_item' => __( 'Livestream bearbeiten', 'minecraft-modern-theme' ), + 'all_items' => __( 'Alle Livestreams', 'minecraft-modern-theme' ), + 'menu_name' => __( 'Livestreams', 'minecraft-modern-theme' ), + ), + 'public' => true, + 'publicly_queryable' => false, + 'exclude_from_search' => true, + 'show_ui' => true, + 'show_in_menu' => 'edit.php?post_type=mm_video', + 'menu_position' => 8, + 'supports' => array( 'title', 'excerpt', 'page-attributes' ), + 'show_in_rest' => true, + ) ); +} +add_action( 'init', 'mm_register_video_post_type' ); + + +// --- 2. Meta-Box: Video URL + Kategorie --- +function mm_video_meta_boxes() { + add_meta_box( + 'mm_video_data', + __( 'Video-Einstellungen', 'minecraft-modern-theme' ), + 'mm_video_meta_box_html', + 'mm_video', 'normal', 'high' + ); + + add_meta_box( + 'mm_livestream_data', + __( 'Livestream-Einstellungen', 'minecraft-modern-theme' ), + 'mm_livestream_meta_box_html', + 'mm_livestream', 'normal', 'high' + ); +} +add_action( 'add_meta_boxes', 'mm_video_meta_boxes' ); + +function mm_video_meta_box_html( $post ) { + wp_nonce_field( 'mm_video_save', 'mm_video_nonce' ); + $url = get_post_meta( $post->ID, '_mm_video_url', true ); + $category = get_post_meta( $post->ID, '_mm_video_category', true ); + $post_id = $post->ID; + ?> + + + + + + + + + + + + + +
+ +

+ +

+
+ +

+
+ +
+ + +

+ +

+ +
+ ID, '_mm_livestream_url', true ); + $player_url = get_post_meta( $post->ID, '_mm_livestream_player_url', true ); + $owner = get_post_meta( $post->ID, '_mm_livestream_owner', true ); + ?> + + + + + + + + + + + + + + + + + +
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+

+
+ Tag ausgegeben, nicht iframe + } + + return false; +} + +function mm_video_get_type( $url ) { + if ( preg_match( '/youtube\.com|youtu\.be/', $url ) ) return 'youtube'; + if ( strpos( $url, 'vimeo.com' ) !== false ) return 'vimeo'; + if ( strpos( $url, 'twitch.tv' ) !== false ) return 'twitch'; + if ( preg_match( '/\.(mp4|webm|ogv|ogg)(\?.*)?$/i', $url ) ) return 'mp4'; + return 'unknown'; +} + +function mm_twitch_get_channel_from_url( $url ) { + if ( preg_match( '/twitch\.tv\/([a-zA-Z0-9_]+)(?:\/|\?|$)/', (string) $url, $m ) ) { + return strtolower( $m[1] ); + } + + return ''; +} + +function mm_twitch_get_app_token() { + $client_id = get_theme_mod( 'twitch_client_id', '' ); + $client_secret = get_theme_mod( 'twitch_client_secret', '' ); + + if ( empty( $client_id ) || empty( $client_secret ) ) { + return false; + } + + $cache_key = 'mm_twitch_app_token'; + $cached = get_transient( $cache_key ); + if ( ! empty( $cached ) ) { + return $cached; + } + + $response = wp_remote_post( 'https://id.twitch.tv/oauth2/token', array( + 'timeout' => 8, + 'body' => array( + 'client_id' => $client_id, + 'client_secret' => $client_secret, + 'grant_type' => 'client_credentials', + ), + ) ); + + if ( is_wp_error( $response ) ) { + return false; + } + + $data = json_decode( wp_remote_retrieve_body( $response ), true ); + if ( empty( $data['access_token'] ) || empty( $data['expires_in'] ) ) { + return false; + } + + $ttl = max( 60, (int) $data['expires_in'] - 60 ); + set_transient( $cache_key, $data['access_token'], $ttl ); + + return $data['access_token']; +} + +function mm_twitch_is_live( $channel ) { + $channel = sanitize_text_field( (string) $channel ); + if ( $channel === '' ) { + return false; + } + + $cache_key = 'mm_twitch_live_' . $channel; + $cached = get_transient( $cache_key ); + if ( false !== $cached ) { + return $cached === 'live'; + } + + $client_id = get_theme_mod( 'twitch_client_id', '' ); + $token = mm_twitch_get_app_token(); + if ( empty( $client_id ) || empty( $token ) ) { + return false; + } + + $url = add_query_arg( array( + 'user_login' => $channel, + ), 'https://api.twitch.tv/helix/streams' ); + + $response = wp_remote_get( $url, array( + 'timeout' => 8, + 'headers' => array( + 'Client-ID' => $client_id, + 'Authorization' => 'Bearer ' . $token, + ), + ) ); + + if ( is_wp_error( $response ) ) { + return false; + } + + $data = json_decode( wp_remote_retrieve_body( $response ), true ); + $is_live = ! empty( $data['data'][0] ); + set_transient( $cache_key, $is_live ? 'live' : 'offline', 2 * MINUTE_IN_SECONDS ); + + return $is_live; +} + +function mm_video_get_youtube_player_url( $identifier, $mode = 'video' ) { + $params = 'autoplay=0&rel=0&modestbranding=1'; + + if ( $mode === 'channel' ) { + return 'https://www.youtube.com/embed/live_stream?channel=' . rawurlencode( $identifier ) . '&' . $params; + } + + if ( $mode === 'handle-live' ) { + return 'https://www.youtube.com/embed/' . ltrim( $identifier ) . '/live?' . $params; + } + + return 'https://www.youtube.com/embed/' . rawurlencode( $identifier ) . '?' . $params; +} + +function mm_video_get_youtube_handle_from_url( $url ) { + if ( preg_match( '~youtube\.com/(@[A-Za-z0-9._-]+)(?:/.*)?$~i', (string) $url, $matches ) ) { + return sanitize_text_field( $matches[1] ); + } + + return ''; +} + +function mm_video_extract_youtube_live_video_id( $html ) { + $patterns = array( + '/"canonicalBaseUrl":"\\/watch\?v=([A-Za-z0-9_-]{11})"/i', + '/"watchEndpoint":\{"videoId":"([A-Za-z0-9_-]{11})"/i', + '/\/watch\?v=([A-Za-z0-9_-]{11})\\u0026/i', + '/"videoId":"([A-Za-z0-9_-]{11})".{0,600}?"isLiveNow":true/is', + '/"videoId":"([A-Za-z0-9_-]{11})".{0,600}?"style":"LIVE"/is', + '/"videoId":"([A-Za-z0-9_-]{11})".{0,600}?LIVE_NOW/is', + '/https:\/\/www\.youtube\.com\/watch\?v=([A-Za-z0-9_-]{11})/i', + '/ 5 ) ); + if ( ! is_wp_error( $response ) ) { + $data = json_decode( wp_remote_retrieve_body( $response ), true ); + if ( ! empty( $data['items'][0] ) ) { + $state = $data['items'][0]['snippet']['liveBroadcastContent'] ?? ''; + $is_live = ( $state === 'live' ); + set_transient( $cache_key, $is_live ? 'live' : 'offline', 2 * MINUTE_IN_SECONDS ); + return $is_live; + } + } + } + + // Fallback: Wenn keine API, gehen wir davon aus dass die video_id aktuell ist + // weil sie von mm_video_resolve_youtube_live_video_id() kam + set_transient( $cache_key, 'live', 2 * MINUTE_IN_SECONDS ); + return true; +} + +function mm_video_resolve_youtube_live_video_id( $profile_url = '', $youtube_channel_id = '' ) { + $profile_url = trim( (string) $profile_url ); + $youtube_channel_id = trim( (string) $youtube_channel_id ); + $cache_key = 'mm_yt_live_v2_' . md5( strtolower( $profile_url . '|' . $youtube_channel_id ) ); + $cached = get_transient( $cache_key ); + + if ( is_array( $cached ) && array_key_exists( 'video_id', $cached ) ) { + return $cached['video_id']; + } + + $candidate_urls = array(); + $handle = mm_video_get_youtube_handle_from_url( $profile_url ); + + if ( $youtube_channel_id && preg_match( '/^UC[a-zA-Z0-9_-]+$/', $youtube_channel_id ) ) { + $candidate_urls[] = 'https://www.youtube.com/channel/' . rawurlencode( $youtube_channel_id ) . '/live'; + $candidate_urls[] = 'https://www.youtube.com/channel/' . rawurlencode( $youtube_channel_id ) . '/streams'; + } + + if ( $handle ) { + $candidate_urls[] = 'https://www.youtube.com/' . rawurlencode( ltrim( $handle, '/' ) ) . '/live'; + $candidate_urls[] = 'https://www.youtube.com/' . rawurlencode( ltrim( $handle, '/' ) ) . '/streams'; + } + + if ( $profile_url ) { + $candidate_urls[] = untrailingslashit( $profile_url ) . '/live'; + $candidate_urls[] = untrailingslashit( $profile_url ) . '/streams'; + } + + $candidate_urls = array_values( array_unique( array_filter( $candidate_urls ) ) ); + $request_args = array( + 'timeout' => 10, + 'redirection' => 5, + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36', + 'headers' => array( + 'Accept-Language' => 'en-US,en;q=0.9,de;q=0.8', + ), + ); + + foreach ( $candidate_urls as $candidate_url ) { + $response = wp_remote_get( $candidate_url, $request_args ); + + if ( is_wp_error( $response ) ) { + continue; + } + + $body = wp_remote_retrieve_body( $response ); + if ( ! is_string( $body ) || $body === '' ) { + continue; + } + + $video_id = mm_video_extract_youtube_live_video_id( $body ); + if ( $video_id ) { + set_transient( $cache_key, array( 'video_id' => $video_id ), 2 * MINUTE_IN_SECONDS ); + return $video_id; + } + } + + set_transient( $cache_key, array( 'video_id' => '' ), 60 ); + return ''; +} + +function mm_video_get_livestream_data( $profile_url = '', $player_url = '', $youtube_channel_id = '' ) { + if ( empty( $profile_url ) && empty( $player_url ) && empty( $youtube_channel_id ) ) { + return false; + } + + $profile_url = trim( $profile_url ); + $player_url = trim( $player_url ); + $youtube_channel_id = trim( $youtube_channel_id ); + $source_url = $player_url ? $player_url : $profile_url; + $parent_host = parse_url( home_url(), PHP_URL_HOST ); + $data = array( + 'profile_url' => esc_url_raw( $profile_url ? $profile_url : $player_url ), + 'platform' => 'unknown', + 'label' => __( 'Livestream', 'minecraft-modern-theme' ), + 'icon' => 'fas fa-tower-broadcast', + 'color' => '#00d4ff', + 'cta' => __( 'Profil öffnen', 'minecraft-modern-theme' ), + 'embed_url' => '', + 'video_id' => '', + 'channel' => '', + 'channel_display' => '', + ); + + if ( ! empty( $youtube_channel_id ) && preg_match( '/^UC[a-zA-Z0-9_-]+$/', $youtube_channel_id ) ) { + $resolved_video_id = mm_video_resolve_youtube_live_video_id( $profile_url, $youtube_channel_id ); + + $data['platform'] = 'youtube'; + $data['label'] = __( 'YouTube Livestream', 'minecraft-modern-theme' ); + $data['icon'] = 'fab fa-youtube'; + $data['color'] = '#ff0000'; + $data['cta'] = __( 'Zum YouTube-Kanal', 'minecraft-modern-theme' ); + $data['channel'] = $youtube_channel_id; + $data['channel_display'] = $youtube_channel_id; + $data['video_id'] = $resolved_video_id; + $data['embed_url'] = $resolved_video_id ? mm_video_get_youtube_player_url( $resolved_video_id, 'video' ) : ''; + + if ( preg_match( '~youtube\.com/(@[A-Za-z0-9._-]+)(?:/.*)?$~i', $profile_url, $handle_matches ) ) { + $data['channel_display'] = sanitize_text_field( $handle_matches[1] ); + } + + if ( empty( $data['profile_url'] ) ) { + $data['profile_url'] = 'https://www.youtube.com/channel/' . rawurlencode( $youtube_channel_id ); + } + + if ( empty( $player_url ) ) { + return $data; + } + } + + if ( empty( $source_url ) ) { + return false; + } + + if ( preg_match( '/youtube\.com|youtu\.be/', $source_url ) && preg_match( '/(?:youtube\.com\/(?:watch\?v=|shorts\/|embed\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/', $source_url ) ) { + $data['platform'] = 'youtube'; + $data['label'] = __( 'YouTube Livestream', 'minecraft-modern-theme' ); + $data['icon'] = 'fab fa-youtube'; + $data['color'] = '#ff0000'; + $data['cta'] = __( 'Zum YouTube-Kanal', 'minecraft-modern-theme' ); + preg_match( '/(?:youtube\.com\/(?:watch\?v=|shorts\/|embed\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/', $source_url, $video_match ); + $data['video_id'] = ! empty( $video_match[1] ) ? $video_match[1] : ''; + $data['embed_url'] = ! empty( $video_match[1] ) ? mm_video_get_youtube_player_url( $video_match[1], 'video' ) : ''; + return $data; + } + + if ( preg_match( '~twitch\.tv/([A-Za-z0-9_]+)(?:/)?(?:\?.*)?$~i', $source_url, $matches ) && strtolower( $matches[1] ) !== 'videos' ) { + $channel = sanitize_key( $matches[1] ); + $data['platform'] = 'twitch'; + $data['label'] = __( 'Twitch Livestream', 'minecraft-modern-theme' ); + $data['icon'] = 'fab fa-twitch'; + $data['color'] = '#9146ff'; + $data['cta'] = __( 'Zum Twitch-Kanal', 'minecraft-modern-theme' ); + $data['channel'] = $channel; + $data['channel_display'] = '@' . $channel; + $data['embed_url'] = 'https://player.twitch.tv/?channel=' . rawurlencode( $channel ) . '&parent=' . rawurlencode( $parent_host ) . '&autoplay=false'; + return $data; + } + + if ( preg_match( '~kick\.com/([A-Za-z0-9_]+)(?:/)?(?:\?.*)?$~i', $source_url, $matches ) ) { + $channel = sanitize_key( $matches[1] ); + $data['platform'] = 'kick'; + $data['label'] = __( 'Kick Livestream', 'minecraft-modern-theme' ); + $data['icon'] = 'fas fa-satellite-dish'; + $data['color'] = '#53fc18'; + $data['cta'] = __( 'Zum Kick-Kanal', 'minecraft-modern-theme' ); + $data['channel'] = $channel; + $data['channel_display'] = '@' . $channel; + $data['embed_url'] = 'https://player.kick.com/' . rawurlencode( $channel ); + return $data; + } + + if ( preg_match( '~youtube\.com/channel/(UC[a-zA-Z0-9_-]+)~i', $source_url, $matches ) ) { + $channel_id = sanitize_text_field( $matches[1] ); + $resolved_video_id = mm_video_resolve_youtube_live_video_id( $source_url, $channel_id ); + $data['platform'] = 'youtube'; + $data['label'] = __( 'YouTube Livestream', 'minecraft-modern-theme' ); + $data['icon'] = 'fab fa-youtube'; + $data['color'] = '#ff0000'; + $data['cta'] = __( 'Zum YouTube-Kanal', 'minecraft-modern-theme' ); + $data['channel'] = $channel_id; + $data['channel_display'] = $channel_id; + $data['video_id'] = $resolved_video_id; + $data['embed_url'] = $resolved_video_id ? mm_video_get_youtube_player_url( $resolved_video_id, 'video' ) : ''; + return $data; + } + + if ( preg_match( '~youtube\.com/(@[A-Za-z0-9._-]+)(?:/.*)?$~i', $source_url, $matches ) ) { + $handle = sanitize_text_field( $matches[1] ); + $resolved_video_id = mm_video_resolve_youtube_live_video_id( $source_url, '' ); + $data['platform'] = 'youtube'; + $data['label'] = __( 'YouTube Livestream', 'minecraft-modern-theme' ); + $data['icon'] = 'fab fa-youtube'; + $data['color'] = '#ff0000'; + $data['cta'] = __( 'Zum YouTube-Kanal', 'minecraft-modern-theme' ); + $data['channel'] = ltrim( $handle, '@' ); + $data['channel_display'] = $handle; + $data['video_id'] = $resolved_video_id; + $data['embed_url'] = $resolved_video_id ? mm_video_get_youtube_player_url( $resolved_video_id, 'video' ) : ''; + return $data; + } + + if ( preg_match( '~youtube\.com/(?:c|user)/([A-Za-z0-9._-]+)(?:/.*)?$~i', $source_url, $matches ) ) { + $channel_name = sanitize_text_field( $matches[1] ); + $resolved_video_id = mm_video_resolve_youtube_live_video_id( $source_url, '' ); + $data['platform'] = 'youtube'; + $data['label'] = __( 'YouTube Livestream', 'minecraft-modern-theme' ); + $data['icon'] = 'fab fa-youtube'; + $data['color'] = '#ff0000'; + $data['cta'] = __( 'Zum YouTube-Kanal', 'minecraft-modern-theme' ); + $data['channel'] = $channel_name; + $data['channel_display'] = '@' . ltrim( $channel_name, '@' ); + $data['video_id'] = $resolved_video_id; + $data['embed_url'] = $resolved_video_id ? mm_video_get_youtube_player_url( $resolved_video_id, 'video' ) : ''; + return $data; + } + + if ( strpos( $source_url, 'youtube.com' ) !== false || strpos( $source_url, 'youtu.be' ) !== false ) { + $data['platform'] = 'youtube'; + $data['label'] = __( 'YouTube Livestream', 'minecraft-modern-theme' ); + $data['icon'] = 'fab fa-youtube'; + $data['color'] = '#ff0000'; + $data['cta'] = __( 'Zum YouTube-Kanal', 'minecraft-modern-theme' ); + } + + return $data; +} + +function mm_video_get_livestream_item( $post_id ) { + $stream_url = get_post_meta( $post_id, '_mm_livestream_url', true ); + $player_url = get_post_meta( $post_id, '_mm_livestream_player_url', true ); + $owner_meta = trim( get_post_meta( $post_id, '_mm_livestream_owner', true ) ); + $youtube_channel_id = get_post_meta( $post_id, '_mm_livestream_youtube_channel_id', true ); + $stream = mm_video_get_livestream_data( $stream_url, $player_url, $youtube_channel_id ); + + if ( ! $stream || empty( $stream['profile_url'] ) ) { + return false; + } + + $stream_title = trim( get_the_title( $post_id ) ); + if ( empty( $stream_title ) || $stream_title === '(kein Titel)' || stripos( $stream_title, 'Automatisch gespeicherter Entwurf' ) !== false || stripos( $stream_title, 'Auto Draft' ) !== false ) { + $stream_title = ! empty( $stream['channel_display'] ) ? $stream['channel_display'] : $stream['label']; + } + + $stream_excerpt = has_excerpt( $post_id ) ? get_the_excerpt( $post_id ) : ''; + $owner = $owner_meta; + if ( empty( $owner ) ) { + $owner = ! empty( $stream['channel_display'] ) ? $stream['channel_display'] : $stream_title; + } + + return array( + 'post_id' => $post_id, + 'owner' => $owner, + 'title' => $stream_title, + 'description' => $stream_excerpt, + 'profile_url' => $stream['profile_url'], + 'channel' => $stream['channel'], + 'stream' => $stream, + ); +} + +/** + * Automatische YouTube-Live-Erkennung via @Handle (Optimiert) + */ + +/** + * 1. Hilfsfunktion: Wandelt @Handle in eine Channel-ID um + */ +function mm_get_channel_id_by_handle( $handle ) { + $api_key = get_theme_mod( 'youtube_api_key' ); + if ( empty( $api_key ) || empty( $handle ) ) { + return false; + } + + // Handle normalisieren (ohne @) + $handle = ltrim( $handle, '@' ); + + // Cache für die Channel-ID (diese ändert sich nie, daher 30 Tage speichern) + $cache_key = 'mm_id_for_' . $handle; + $channel_id = get_transient( $cache_key ); + if ( false !== $channel_id ) { + return $channel_id; + } + + // Suche Kanal zum Handle + $url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q=' . urlencode( '@' . $handle ) . '&type=channel&maxResults=1&key=' . $api_key; + + $response = wp_remote_get( $url ); + if ( is_wp_error( $response ) ) { + return false; + } + + $data = json_decode( wp_remote_retrieve_body( $response ) ); + + if ( ! empty( $data->items[0]->snippet->channelId ) ) { + $id = $data->items[0]->snippet->channelId; + set_transient( $cache_key, $id, DAY_IN_SECONDS * 30 ); + return $id; + } + + return false; +} + +/** + * 2. Hauptfunktion: Findet die Video-ID des aktuellen Livestreams + */ +function mm_get_youtube_live_id_from_handle( $handle ) { + $api_key = get_theme_mod( 'youtube_api_key' ); + if ( empty( $api_key ) ) { + return false; + } + + // 1. Kanal-ID zum Handle finden + $channel_id = mm_get_channel_id_by_handle( $handle ); + if ( ! $channel_id ) { + return false; + } + + // 2. Aktuellen Livestream in diesem Kanal suchen + $cache_key_live = 'mm_live_status_' . $channel_id; + $live_id = get_transient( $cache_key_live ); + if ( false !== $live_id ) { + return ( $live_id === 'none' ) ? false : $live_id; + } + + // Wir suchen direkt nach dem Live-Event des Kanals + $url = 'https://www.googleapis.com/youtube/v3/search?part=id&channelId=' . $channel_id . '&eventType=live&type=video&key=' . $api_key; + + $response = wp_remote_get( $url ); + if ( is_wp_error( $response ) ) { + return false; + } + + $data = json_decode( wp_remote_retrieve_body( $response ) ); + + if ( ! empty( $data->items[0]->id->videoId ) ) { + $video_id = $data->items[0]->id->videoId; + set_transient( $cache_key_live, $video_id, 2 * MINUTE_IN_SECONDS ); // Nur 2 Min für schnellere Reaktion + return $video_id; + } + + // Wenn nicht live, 'none' speichern, um API-Anfragen zu drosseln + set_transient( $cache_key_live, 'none', 2 * MINUTE_IN_SECONDS ); + return false; +} + +/** + * 3. Update für mm_video_get_livestream_groups - Hybrid-System + * Zeigt ALLE konfigurierten Livestreams an: + * - Livestream-Posts (Hauptmethode für mehrere Kanäle) + * - Optional: Customizer @Handle (für einzelnen Hauptkanal) + */ +function mm_video_get_livestream_groups() { + $groups = array(); + $api_key = get_theme_mod( 'youtube_api_key', '' ); + + // === METHODE 1: Livestream-Posts (IMMER abfragen) === + $posts = get_posts( array( + 'post_type' => 'mm_livestream', + 'post_status' => 'publish', + 'posts_per_page' => -1, + 'orderby' => 'ID', + 'order' => 'ASC', + ) ); + + if ( ! empty( $posts ) ) { + foreach ( $posts as $post ) { + $profile_url = get_post_meta( $post->ID, '_mm_livestream_url', true ); + $stream_url = get_post_meta( $post->ID, '_mm_livestream_player_url', true ); + $owner = get_post_meta( $post->ID, '_mm_livestream_owner', true ); + $channel_id = ''; + + // Versuche Channel-ID aus Profil-URL zu extrahieren (nur für YouTube) + if ( ! empty( $profile_url ) && strpos( $profile_url, 'youtube.com' ) !== false ) { + // Channel-URL mit UC-ID + if ( preg_match( '~/channel/(UC[a-zA-Z0-9_-]+)~', $profile_url, $m ) ) { + $channel_id = $m[1]; + } + // @Handle -> über API auflösen + elseif ( preg_match( '~/@([a-zA-Z0-9_.-]+)(?:/|$)~', $profile_url, $m ) && ! empty( $api_key ) ) { + $channel_id = mm_get_channel_id_by_handle( $m[1] ); + } + } + + // YouTube-Livestream: Prüfe ob live via API + if ( ! empty( $channel_id ) && ! empty( $api_key ) ) { + $cache_key_live = 'mm_live_status_' . $channel_id; + $live_id = get_transient( $cache_key_live ); + + if ( false === $live_id ) { + $search_url = add_query_arg( array( + 'part' => 'id', + 'channelId' => $channel_id, + 'eventType' => 'live', + 'type' => 'video', + 'key' => $api_key, + ), 'https://www.googleapis.com/youtube/v3/search' ); + + $response = wp_remote_get( $search_url, array( 'timeout' => 10 ) ); + + if ( ! is_wp_error( $response ) ) { + $data = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( isset( $data['items'][0]['id']['videoId'] ) ) { + $live_id = $data['items'][0]['id']['videoId']; + set_transient( $cache_key_live, $live_id, 2 * MINUTE_IN_SECONDS ); + } else { + set_transient( $cache_key_live, 'none', 2 * MINUTE_IN_SECONDS ); + $live_id = false; + } + } else { + $live_id = false; + } + } elseif ( $live_id === 'none' ) { + $live_id = false; + } + + // Nur hinzufügen wenn live + if ( $live_id && $live_id !== 'none' ) { + $groups[] = array( + 'title' => $post->post_title, + 'platform' => 'youtube', + 'yt_id' => $live_id, + 'handle' => $profile_url, + ); + } + } + // Andere Plattformen (Twitch, etc.): Prüfe zuerst direkte Stream-URL, sonst Profil-URL + elseif ( ! empty( $stream_url ) || ! empty( $profile_url ) ) { + $use_url = ! empty( $stream_url ) ? $stream_url : $profile_url; + $embed_url = mm_video_get_embed_url( $use_url ); + + // Nur Live-Streams anzeigen (Twitch muss live sein) + if ( $embed_url ) { + $platform = mm_video_get_type( $use_url ); + + if ( $platform !== 'twitch' ) { + continue; + } + + $channel = mm_twitch_get_channel_from_url( $use_url ); + if ( ! mm_twitch_is_live( $channel ) ) { + continue; + } + + $groups[] = array( + 'title' => $post->post_title, + 'platform' => $platform, + 'embed_url' => $embed_url, + 'profile_url' => $profile_url, + 'owner' => $owner, + ); + } + } + } + } + + return $groups; +} + +/** + * Debug-Informationen für Livestream-System + */ +function mm_video_get_api_livestream_debug() { + if ( ! is_user_logged_in() || ! current_user_can( 'edit_posts' ) ) { + return array(); + } + + $api_key = get_theme_mod( 'youtube_api_key', '' ); + + // Zähle Livestream-Posts + $posts_count = wp_count_posts( 'mm_livestream' ); + $published_posts = isset( $posts_count->publish ) ? $posts_count->publish : 0; + + // === Fall 1: Keine Konfiguration === + if ( $published_posts === 0 ) { + return array( + 'status' => 'error', + 'message' => 'Keine Livestream-Posts gefunden', + 'hint' => 'Erstelle Livestream-Posts über "Livestreams → Neu"', + ); + } + + // === Fall 2: API Key fehlt (nur Warnung) === + if ( empty( $api_key ) ) { + return array( + 'status' => 'warning', + 'message' => 'Kein YouTube API Key', + 'hint' => 'API Key wird für YouTube Live-Erkennung benötigt. Twitch-Streams funktionieren ohne.', + 'posts_count' => $published_posts, + ); + } + + // === Fall 3: Alles OK === + return array( + 'status' => 'ok', + 'posts_count' => $published_posts, + 'api_key_length' => strlen( $api_key ), + ); +} + +function mm_video_get_hidden_livestream_count() { + // Für API-basiertes System nicht relevant + return 0; +} + +function mm_video_get_livestream_debug_rows() { + // Ersetzt durch mm_video_get_api_livestream_debug() + return array(); +} + +function mm_video_render_livestream_group( $group, $index = 0 ) { + // Format 1: Neues API-YouTube-Format mit yt_id (Customizer oder Posts) + if ( isset( $group['yt_id'] ) && isset( $group['platform'] ) && $group['platform'] === 'youtube' ) { + $video_id = trim( (string) $group['yt_id'] ); + $title = isset( $group['title'] ) ? $group['title'] : __( 'Live', 'minecraft-modern-theme' ); + $handle = isset( $group['handle'] ) ? trim( (string) $group['handle'] ) : ''; + + if ( empty( $video_id ) ) { + return ''; + } + + $embed_url = 'https://www.youtube-nocookie.com/embed/' . rawurlencode( $video_id ) . '?autoplay=0&rel=0&modestbranding=1&playsinline=1'; + + ob_start(); + ?> +
+
+ +
+
+ + + + + + + + + + + +
+
+ array( 'icon' => 'fab fa-twitch', 'color' => '#9146ff' ), + 'vimeo' => array( 'icon' => 'fab fa-vimeo-v', 'color' => '#1ab7ea' ), + 'youtube' => array( 'icon' => 'fab fa-youtube', 'color' => '#ff0000' ), + ); + $icon = isset( $platform_icons[$platform] ) ? $platform_icons[$platform]['icon'] : 'fas fa-play'; + + ob_start(); + ?> +
+
+ +
+
+ + + + + + + + + + + +
+
+ 1 + ? __( 'Mehrere aktive oder gespeicherte Streams dieses Streamers lassen sich hier direkt umschalten.', 'minecraft-modern-theme' ) + : __( 'Der Bereich wird automatisch aus deinem Profil-Link erzeugt und oberhalb der Videos eingebunden.', 'minecraft-modern-theme' ) ); + + ob_start(); + ?> +
+
+ + + + +

+

+ 1 ) : ?> +
+ + 1 / + +
+
+ $item ) : ?> + + +
+ +
+ + + + + + + +
+

+
+
+ +
+ +
+ + + +
+ +

+
+ +
+
+ ' . __('Ungültige Video-URL.', 'minecraft-modern-theme') . '

'; + + $type = mm_video_get_type( $url ); + $title = isset($args['title']) ? esc_attr($args['title']) : __('Video', 'minecraft-modern-theme'); + + if ( $type === 'mp4' ) { + return '
' + . '
'; + } + + return '
' + . '
'; +} + + +// --- 5. Shortcode: [mm_video url="..."] --- +// Beispiele: +// [mm_video url="https://www.youtube.com/watch?v=dQw4w9WgXcQ"] +// [mm_video url="https://vimeo.com/123456789" title="Mein Video"] +function mm_video_shortcode( $atts ) { + $a = shortcode_atts( array( + 'url' => '', + 'title' => __('Video', 'minecraft-modern-theme'), + ), $atts ); + + if ( empty($a['url']) ) return ''; + return mm_video_render_embed( $a['url'], $a ); +} +add_shortcode( 'mm_video', 'mm_video_shortcode' ); + + +// --- 6. Template-Loader für Video-Archiv und Galerie-Seite --- +function mm_video_template_loader( $template ) { + // BUG-FIX: locate_template() berücksichtigt ein archive-video.php im Child-Theme, + // get_template_directory() hätte immer das Parent-Template erzwungen. + $is_video_page = false; + + // Archiv (domain.de/videos/) + if ( is_post_type_archive('mm_video') ) { + $is_video_page = true; + } elseif ( is_page() ) { + // Seite mit dem Slug "videos" + $obj = get_queried_object(); + $is_video_page = ( $obj && $obj->post_name === 'videos' ); + } + + if ( $is_video_page ) { + $t = locate_template( 'archive-video.php' ); + if ( $t ) return $t; + } + return $template; +} +add_filter( 'template_include', 'mm_video_template_loader' ); + + +// --- 7. "Videos"-Seite automatisch anlegen --- +function mm_video_create_page() { + if ( ! get_page_by_path('videos') ) { + wp_insert_post( array( + 'post_title' => __('Videos', 'minecraft-modern-theme'), + 'post_name' => 'videos', + 'post_status' => 'publish', + 'post_type' => 'page', + 'post_author' => 1, + ) ); + } +} +add_action( 'after_switch_theme', 'mm_video_create_page' ); +// Auch beim Speichern im Customizer anlegen +add_action( 'customize_save_after', 'mm_video_create_page' ); diff --git a/Minecraft-Modern-Theme/inc/widgets.php b/Minecraft-Modern-Theme/inc/widgets.php new file mode 100644 index 0000000..9667b0c --- /dev/null +++ b/Minecraft-Modern-Theme/inc/widgets.php @@ -0,0 +1,129 @@ + __( 'Footer Links', 'minecraft-modern-theme' ), + 'id' => 'footer-left', + 'description' => __( 'Widget-Bereich links im Footer.', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + for ( $i = 1; $i <= 3; $i++ ) { + register_sidebar( array( + 'name' => sprintf( __( 'Footer Spalte %d', 'minecraft-modern-theme' ), $i ), + 'id' => 'footer-' . $i, + 'description' => sprintf( __( 'Widget für die %d. Spalte im Footer.', 'minecraft-modern-theme' ), $i ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + } + register_sidebar( array( + 'name' => __( 'Footer Rechts', 'minecraft-modern-theme' ), + 'id' => 'footer-right', + 'description' => __( 'Widget-Bereich rechts im Footer.', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); +} +add_action( 'widgets_init', 'minecraft_modern_footer_widgets' ); + + +// === Homepage Sidebar registrieren === +function minecraft_modern_homepage_sidebar() { + register_sidebar( array( + 'name' => __( 'Startseiten Sidebar - Oben', 'minecraft-modern-theme' ), + 'id' => 'homepage-sidebar-top', + 'description' => __( 'Widget-Bereich oben in der Sidebar (z.B. für wichtige Infos).', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + register_sidebar( array( + 'name' => __( 'Startseiten Sidebar - Mitte 1', 'minecraft-modern-theme' ), + 'id' => 'homepage-sidebar-middle-1', + 'description' => __( 'Widget-Bereich in der Mitte der Sidebar.', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + register_sidebar( array( + 'name' => __( 'Startseiten Sidebar - Mitte 2', 'minecraft-modern-theme' ), + 'id' => 'homepage-sidebar-middle-2', + 'description' => __( 'Zweiter Widget-Bereich in der Mitte der Sidebar.', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + register_sidebar( array( + 'name' => __( 'Startseiten Sidebar - Unten', 'minecraft-modern-theme' ), + 'id' => 'homepage-sidebar-bottom', + 'description' => __( 'Widget-Bereich unten in der Sidebar.', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + register_sidebar( array( + 'name' => __( 'Startseiten Sidebar - Extra', 'minecraft-modern-theme' ), + 'id' => 'homepage-sidebar-extra', + 'description' => __( 'Zusätzlicher Widget-Bereich für spezielle Inhalte.', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); +} +add_action( 'widgets_init', 'minecraft_modern_homepage_sidebar' ); + + +/** + * Rendert alle Sidebar-Sections der Homepage. + * Ersetzt den doppelten Sidebar-Code in front-page.php. + */ +function minecraft_modern_render_sidebar_sections() { + $sections = array( + 'homepage-sidebar-top', + 'homepage-sidebar-middle-1', + 'homepage-sidebar-middle-2', + 'homepage-sidebar-bottom', + 'homepage-sidebar-extra', + ); + $classes = array( + 'homepage-sidebar-top' => 'sidebar-top', + 'homepage-sidebar-middle-1' => 'sidebar-middle-1', + 'homepage-sidebar-middle-2' => 'sidebar-middle-2', + 'homepage-sidebar-bottom' => 'sidebar-bottom', + 'homepage-sidebar-extra' => 'sidebar-extra', + ); + foreach ( $sections as $sidebar_id ) { + if ( is_active_sidebar( $sidebar_id ) ) { + $class = isset( $classes[ $sidebar_id ] ) ? ' ' . $classes[ $sidebar_id ] : ''; + echo ''; + } + } +} diff --git a/Minecraft-Modern-Theme/js/announcement.js b/Minecraft-Modern-Theme/js/announcement.js index 5836d1f..9b09ad3 100644 --- a/Minecraft-Modern-Theme/js/announcement.js +++ b/Minecraft-Modern-Theme/js/announcement.js @@ -1,76 +1,76 @@ -document.addEventListener("DOMContentLoaded", function () { - const bar = document.getElementById("mm-announcement"); - if (!bar) return; - - // --- 1. Positionierung --- - const position = bar.dataset.position || 'below-header'; - - if (position === "top") { - document.body.insertAdjacentElement('afterbegin', bar); - } else if (position === "below-slider") { - const anchor = document.getElementById("mm-announcement-anchor"); - if (anchor) { - anchor.replaceWith(bar); - } else { - const header = document.getElementById("masthead"); - if (header) header.insertAdjacentElement('afterend', bar); - } - } else { - // "below-header" und alle anderen Positionen - const header = document.getElementById("masthead"); - if (header) header.insertAdjacentElement('afterend', bar); - } - - // --- 2. Schließen-Button --- - const closeBtn = bar.querySelector(".mm-announcement-close"); - if (closeBtn) { - closeBtn.addEventListener("click", function () { - bar.style.transition = 'opacity 0.3s ease'; - bar.style.opacity = '0'; - setTimeout(function() { bar.style.display = "none"; }, 300); - }); - } - - // --- 3. Countdown Timer --- - const timerElement = document.querySelector('.mm-countdown-timer'); - - if (timerElement) { - const targetDateString = timerElement.getAttribute('data-date'); - const expiredMessage = timerElement.getAttribute('data-expired') || 'Abgelaufen'; - - if (!targetDateString) { - timerElement.style.display = 'none'; - return; - } - - const countDownDate = new Date(targetDateString).getTime(); - - // FIX: Tick-Funktion auslagern und SOFORT aufrufen – kein 1s-Flackern beim Laden - function tick() { - const now = new Date().getTime(); - const distance = countDownDate - now; - - if (distance < 0) { - clearInterval(timerInterval); - timerElement.innerHTML = expiredMessage; - timerElement.style.color = '#ff3333'; - return; - } - - const days = Math.floor(distance / (1000 * 60 * 60 * 24)); - const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); - const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); - const seconds = Math.floor((distance % (1000 * 60)) / 1000); - - const fDays = days > 0 ? days + 'd ' : ''; - const fHours = String(hours).padStart(2, '0'); - const fMinutes = String(minutes).padStart(2, '0'); - const fSeconds = String(seconds).padStart(2, '0'); - - timerElement.innerHTML = fDays + fHours + ':' + fMinutes + ':' + fSeconds; - } - - tick(); // Sofort ausführen - const timerInterval = setInterval(tick, 1000); - } +document.addEventListener("DOMContentLoaded", function () { + const bar = document.getElementById("mm-announcement"); + if (!bar) return; + + // --- 1. Positionierung --- + const position = bar.dataset.position || 'below-header'; + + if (position === "top") { + document.body.insertAdjacentElement('afterbegin', bar); + } else if (position === "below-slider") { + const anchor = document.getElementById("mm-announcement-anchor"); + if (anchor) { + anchor.replaceWith(bar); + } else { + const header = document.getElementById("masthead"); + if (header) header.insertAdjacentElement('afterend', bar); + } + } else { + // "below-header" und alle anderen Positionen + const header = document.getElementById("masthead"); + if (header) header.insertAdjacentElement('afterend', bar); + } + + // --- 2. Schließen-Button --- + const closeBtn = bar.querySelector(".mm-announcement-close"); + if (closeBtn) { + closeBtn.addEventListener("click", function () { + bar.style.transition = 'opacity 0.3s ease'; + bar.style.opacity = '0'; + setTimeout(function() { bar.style.display = "none"; }, 300); + }); + } + + // --- 3. Countdown Timer --- + const timerElement = document.querySelector('.mm-countdown-timer'); + + if (timerElement) { + const targetDateString = timerElement.getAttribute('data-date'); + const expiredMessage = timerElement.getAttribute('data-expired') || 'Abgelaufen'; + + if (!targetDateString) { + timerElement.style.display = 'none'; + return; + } + + const countDownDate = new Date(targetDateString).getTime(); + + // FIX: Tick-Funktion auslagern und SOFORT aufrufen – kein 1s-Flackern beim Laden + function tick() { + const now = new Date().getTime(); + const distance = countDownDate - now; + + if (distance < 0) { + clearInterval(timerInterval); + timerElement.innerHTML = expiredMessage; + timerElement.style.color = '#ff3333'; + return; + } + + const days = Math.floor(distance / (1000 * 60 * 60 * 24)); + const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); + const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); + const seconds = Math.floor((distance % (1000 * 60)) / 1000); + + const fDays = days > 0 ? days + 'd ' : ''; + const fHours = String(hours).padStart(2, '0'); + const fMinutes = String(minutes).padStart(2, '0'); + const fSeconds = String(seconds).padStart(2, '0'); + + timerElement.innerHTML = fDays + fHours + ':' + fMinutes + ':' + fSeconds; + } + + tick(); // Sofort ausführen + const timerInterval = setInterval(tick, 1000); + } }); \ No newline at end of file diff --git a/Minecraft-Modern-Theme/js/assistant-widget.js b/Minecraft-Modern-Theme/js/assistant-widget.js index 8b13789..d3f5a12 100644 --- a/Minecraft-Modern-Theme/js/assistant-widget.js +++ b/Minecraft-Modern-Theme/js/assistant-widget.js @@ -1 +1 @@ - + diff --git a/Minecraft-Modern-Theme/js/menu-links-admin.js b/Minecraft-Modern-Theme/js/menu-links-admin.js new file mode 100644 index 0000000..6b2dea4 --- /dev/null +++ b/Minecraft-Modern-Theme/js/menu-links-admin.js @@ -0,0 +1,116 @@ +/** + * Verwaltungsseite "Menü-Links": Zeilen hinzufügen, entfernen, + * Icon-Vorschau aktualisieren. + */ +( function () { + 'use strict'; + + /** Feldnamen durchnummerieren, damit PHP ein lückenloses Array erhält. */ + function neuNummerieren( liste ) { + var feld = liste.getAttribute( 'data-mm-liste' ); + if ( ! feld ) { + return; + } + var muster = new RegExp( feld.replace( /[.*+?^${}()|[\]\\]/g, '\\$&' ) + '\\[[^\\]]*\\]' ); + + liste.querySelectorAll( ':scope > .mm-liste-zeile' ).forEach( function ( zeile, i ) { + zeile.querySelectorAll( '[name^="' + feld + '["]' ).forEach( function ( eingabe ) { + eingabe.name = eingabe.name.replace( muster, feld + '[' + i + ']' ); + } ); + } ); + } + + /** Vorschausymbol links in der Zeile an das Icon-Feld angleichen. */ + function vorschauAktualisieren( zeile ) { + var feld = zeile.querySelector( '.mm-icon-feld' ); + var bild = zeile.querySelector( '.mm-vorschau' ); + if ( ! feld || ! bild ) { + return; + } + var klasse = feld.value.trim() || 'dashicons-admin-links'; + bild.className = 'mm-vorschau dashicons ' + klasse; + } + + // --- Zeile hinzufügen --- + document.addEventListener( 'click', function ( e ) { + var knopf = e.target.closest( '.mm-liste-hinzufuegen' ); + if ( ! knopf ) { + return; + } + e.preventDefault(); + + var feld = knopf.getAttribute( 'data-ziel' ); + var liste = document.querySelector( '.mm-liste[data-mm-liste="' + feld + '"]' ); + var vorlage = document.querySelector( '.mm-liste-vorlage[data-fuer="' + feld + '"]' ); + if ( ! liste || ! vorlage ) { + return; + } + + var huelle = document.createElement( 'div' ); + huelle.innerHTML = vorlage.innerHTML.replace( /__INDEX__/g, String( Date.now() ) ).trim(); + + var zeile = huelle.querySelector( '.mm-liste-zeile' ); + if ( ! zeile ) { + return; + } + + liste.appendChild( zeile ); + neuNummerieren( liste ); + + var hinweis = document.querySelector( '.mm-leer' ); + if ( hinweis ) { + hinweis.remove(); + } + + var erstes = zeile.querySelector( 'input' ); + if ( erstes ) { + erstes.focus(); + } + } ); + + // --- Zeile entfernen --- + document.addEventListener( 'click', function ( e ) { + var knopf = e.target.closest( '.mm-liste-entfernen' ); + if ( ! knopf ) { + return; + } + e.preventDefault(); + + var zeile = knopf.closest( '.mm-liste-zeile' ); + var liste = zeile ? zeile.closest( '.mm-liste' ) : null; + if ( ! zeile || ! liste ) { + return; + } + zeile.remove(); + neuNummerieren( liste ); + } ); + + // --- Icon-Vorschau --- + document.addEventListener( 'input', function ( e ) { + if ( e.target.classList.contains( 'mm-icon-feld' ) ) { + var zeile = e.target.closest( '.mm-liste-zeile' ); + if ( zeile ) { + vorschauAktualisieren( zeile ); + } + } + } ); + + // Klick auf ein Beispielsymbol trägt die Klasse in die letzte Zeile ein + document.addEventListener( 'click', function ( e ) { + var code = e.target.closest( '.mm-icon-liste code' ); + if ( ! code ) { + return; + } + var zeilen = document.querySelectorAll( '.mm-liste-zeile' ); + if ( ! zeilen.length ) { + return; + } + var letzte = zeilen[ zeilen.length - 1 ]; + var feld = letzte.querySelector( '.mm-icon-feld' ); + if ( feld ) { + feld.value = code.textContent.trim(); + vorschauAktualisieren( letzte ); + feld.focus(); + } + } ); +} )(); diff --git a/Minecraft-Modern-Theme/js/minecraft-avatar-skinview.js b/Minecraft-Modern-Theme/js/minecraft-avatar-skinview.js index 1d098c6..8a77460 100644 --- a/Minecraft-Modern-Theme/js/minecraft-avatar-skinview.js +++ b/Minecraft-Modern-Theme/js/minecraft-avatar-skinview.js @@ -1,63 +1,63 @@ -// Lädt skinview3d von CDN -(function(){ - if(document.getElementById('skinview3d-cdn')) return; - var s = document.createElement('script'); - s.id = 'skinview3d-cdn'; - s.src = 'https://unpkg.com/skinview3d@4.1.1/bundles/skinview3d.min.js'; - s.onload = function() { - window.skinview3dReady = true; - }; - document.head.appendChild(s); -})(); - -window.showMinecraftSkinModal = function(uuid) { - if(document.getElementById('minecraft-skin-modal')) return; - var modal = document.createElement('div'); - modal.id = 'minecraft-skin-modal'; - modal.innerHTML = ` -
-
- -
-
- `; - document.body.appendChild(modal); - document.querySelector('.sv3d-modal-close').onclick = function(){ modal.remove(); }; - document.querySelector('.sv3d-modal-bg').onclick = function(){ modal.remove(); }; - - function renderSkin() { - var skinUrl = `https://crafatar.com/skins/${uuid}`; - var canvas = document.createElement('canvas'); - canvas.width = 320; canvas.height = 320; - document.getElementById('sv3d-canvas-wrap').appendChild(canvas); - var viewer = new skinview3d.SkinViewer({ - canvas: canvas, - width: 320, - height: 320, - skin: skinUrl - }); - viewer.controls.enableZoom = false; - viewer.animation = new skinview3d.WalkingAnimation(); - viewer.animation.speed = 1.2; - viewer.animation.play(); - } - if(window.skinview3dReady) renderSkin(); - else { - var check = setInterval(function(){ - if(window.skinview3dReady) { clearInterval(check); renderSkin(); } - }, 100); - } -}; - -// Avatar-Widget-Click-Handler -window.addEventListener('DOMContentLoaded', function(){ - var widget = document.getElementById('minecraft-avatar-widget'); - if(widget) { - widget.style.cursor = 'pointer'; - widget.title = 'Klicke für 3D Skin-Ansicht'; - widget.onclick = function(){ - var uuid = widget.getAttribute('data-uuid'); - if(uuid) window.showMinecraftSkinModal(uuid); - }; - } -}); +// Lädt skinview3d von CDN +(function(){ + if(document.getElementById('skinview3d-cdn')) return; + var s = document.createElement('script'); + s.id = 'skinview3d-cdn'; + s.src = 'https://unpkg.com/skinview3d@4.1.1/bundles/skinview3d.min.js'; + s.onload = function() { + window.skinview3dReady = true; + }; + document.head.appendChild(s); +})(); + +window.showMinecraftSkinModal = function(uuid) { + if(document.getElementById('minecraft-skin-modal')) return; + var modal = document.createElement('div'); + modal.id = 'minecraft-skin-modal'; + modal.innerHTML = ` +
+
+ +
+
+ `; + document.body.appendChild(modal); + document.querySelector('.sv3d-modal-close').onclick = function(){ modal.remove(); }; + document.querySelector('.sv3d-modal-bg').onclick = function(){ modal.remove(); }; + + function renderSkin() { + var skinUrl = `https://crafatar.com/skins/${uuid}`; + var canvas = document.createElement('canvas'); + canvas.width = 320; canvas.height = 320; + document.getElementById('sv3d-canvas-wrap').appendChild(canvas); + var viewer = new skinview3d.SkinViewer({ + canvas: canvas, + width: 320, + height: 320, + skin: skinUrl + }); + viewer.controls.enableZoom = false; + viewer.animation = new skinview3d.WalkingAnimation(); + viewer.animation.speed = 1.2; + viewer.animation.play(); + } + if(window.skinview3dReady) renderSkin(); + else { + var check = setInterval(function(){ + if(window.skinview3dReady) { clearInterval(check); renderSkin(); } + }, 100); + } +}; + +// Avatar-Widget-Click-Handler +window.addEventListener('DOMContentLoaded', function(){ + var widget = document.getElementById('minecraft-avatar-widget'); + if(widget) { + widget.style.cursor = 'pointer'; + widget.title = 'Klicke für 3D Skin-Ansicht'; + widget.onclick = function(){ + var uuid = widget.getAttribute('data-uuid'); + if(uuid) window.showMinecraftSkinModal(uuid); + }; + } +});