From 33482a029114dcfe8a8a628217ffef4817bcadc7 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Mon, 29 Dec 2025 02:10:04 +0100 Subject: [PATCH] sub --- partials/structure/nav.php | 2 + public/page/community.php | 129 +++++++++++++++++++++++++++++++ public/page/community_thread.php | 95 +++++++++++++++++++++++ public/page/search.php | 4 +- 4 files changed, 228 insertions(+), 2 deletions(-) create mode 100644 public/page/community.php create mode 100644 public/page/community_thread.php diff --git a/partials/structure/nav.php b/partials/structure/nav.php index 7702d57..50f10a3 100644 --- a/partials/structure/nav.php +++ b/partials/structure/nav.php @@ -16,6 +16,7 @@ $isDebug = defined('APP_DEBUG') && APP_DEBUG === true; Start Events Suche + Community Profil FAQ @@ -37,6 +38,7 @@ $isDebug = defined('APP_DEBUG') && APP_DEBUG === true; Start Events Suche + Community Profil FAQ diff --git a/public/page/community.php b/public/page/community.php new file mode 100644 index 0000000..e51433c --- /dev/null +++ b/public/page/community.php @@ -0,0 +1,129 @@ +pdo(); +$userId = $_SESSION['user_id'] ?? null; +$error = ''; + +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'thread_create') { + if (!$userId) { + $error = 'Bitte einloggen, um Fragen zu stellen.'; + } elseif ($pdo) { + $title = trim((string)($_POST['title'] ?? '')); + $body = trim((string)($_POST['body'] ?? '')); + if ($title === '' || $body === '') { + $error = 'Titel und Text sind erforderlich.'; + } else { + $pdo->prepare('CREATE TABLE IF NOT EXISTS forum_threads ( + id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + user_id BIGINT UNSIGNED NOT NULL, + title VARCHAR(200) NOT NULL, + body TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci')->execute(); + $pdo->prepare('INSERT INTO forum_threads (user_id, title, body) VALUES (:uid, :title, :body)') + ->execute(['uid' => $userId, 'title' => $title, 'body' => $body]); + header('Location: /community'); + exit; + } + } +} + +$threads = []; +if ($pdo) { + $pdo->prepare('CREATE TABLE IF NOT EXISTS forum_posts ( + id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + thread_id BIGINT UNSIGNED NOT NULL, + user_id BIGINT UNSIGNED NOT NULL, + body TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + INDEX idx_thread (thread_id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci')->execute(); + + $sql = 'SELECT ft.id, ft.title, ft.body, ft.created_at, + u.id as uid, u.created_at as user_created, + p.display_name, + (SELECT COUNT(*) FROM forum_posts fp WHERE fp.thread_id = ft.id) AS answers, + (SELECT COUNT(*) FROM forum_posts fp2 WHERE fp2.user_id = u.id) + + (SELECT COUNT(*) FROM forum_threads ft2 WHERE ft2.user_id = u.id) AS user_posts + FROM forum_threads ft + JOIN users u ON u.id = ft.user_id + LEFT JOIN user_profiles p ON p.user_id = u.id + ORDER BY ft.created_at DESC + LIMIT 50'; + $threads = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC) ?: []; +} + +function compute_points(array $row, \PDO $pdo): float { + $uid = (int)$row['uid']; + $threads = (int)($row['user_posts'] ?? 0); + $answers = (int)($row['answers'] ?? 0); + $eventCreated = (int)$pdo->query("SELECT COUNT(*) FROM events WHERE created_by = {$uid}")->fetchColumn(); + $eventParticipants = (float)$pdo->query("SELECT COUNT(*) FROM event_participants WHERE user_id = {$uid}")->fetchColumn(); + $invites = 0; + return $threads * 0.5 + $answers * 1 + $eventCreated * 1 + $eventParticipants * 0.1 + $invites * 0.5; +} + +function membership_level(float $points): string { + if ($points >= 1000) return 'Daddy of Daddies'; + if ($points >= 300) return 'Master Daddy'; + if ($points >= 150) return 'Good Daddy'; + if ($points >= 50) return 'Mini Daddy'; + if ($points >= 5) return 'Baby Daddy'; + return 'New Daddy'; +} +?> +
+
+

Community

+

Forum

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

Bitte einloggen, um Fragen zu stellen oder zu antworten.

+ + +
+ + +
+
+
+ + + ( Punkte) + Beiträge: +
+

+

240 ? '…' : '' ?>

+

Antworten:

+
+
+ + +

Noch keine Fragen gestellt.

+ +
+
+
diff --git a/public/page/community_thread.php b/public/page/community_thread.php new file mode 100644 index 0000000..cc245cf --- /dev/null +++ b/public/page/community_thread.php @@ -0,0 +1,95 @@ +pdo(); +$userId = $_SESSION['user_id'] ?? null; +$id = (int)($_GET['id'] ?? 0); +$error = ''; + +if (!$id) { + http_response_code(404); + exit('

Thread nicht gefunden.

'); +} + +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'reply') { + if (!$userId) { + $error = 'Bitte einloggen, um zu antworten.'; + } elseif ($pdo) { + $body = trim((string)($_POST['body'] ?? '')); + if ($body === '') { + $error = 'Antwort darf nicht leer sein.'; + } else { + $pdo->prepare('INSERT INTO forum_posts (thread_id, user_id, body) VALUES (:tid, :uid, :body)') + ->execute(['tid' => $id, 'uid' => $userId, 'body' => $body]); + header('Location: /community_thread?id=' . $id); + exit; + } + } +} + +$thread = null; +$posts = []; +if ($pdo) { + $stmt = $pdo->prepare('SELECT ft.*, p.display_name FROM forum_threads ft LEFT JOIN user_profiles p ON p.user_id = ft.user_id WHERE ft.id = :id'); + $stmt->execute(['id' => $id]); + $thread = $stmt->fetch(PDO::FETCH_ASSOC); + if ($thread) { + $stmt = $pdo->prepare('SELECT fp.*, p.display_name FROM forum_posts fp LEFT JOIN user_profiles p ON p.user_id = fp.user_id WHERE fp.thread_id = :id ORDER BY fp.created_at ASC'); + $stmt->execute(['id' => $id]); + $posts = $stmt->fetchAll(PDO::FETCH_ASSOC) ?: []; + } +} + +if (!$thread) { + http_response_code(404); + exit('

Thread nicht gefunden.

'); +} +?> +
+
+

Community

+

+

Von ·

+
+
+

+
+
+ +

Antworten ()

+
+ +
+
+
+ + +
+

+
+
+ + +

Noch keine Antworten.

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

Bitte einloggen, um zu antworten.

+ +
+
diff --git a/public/page/search.php b/public/page/search.php index 99e36a5..0451b2e 100644 --- a/public/page/search.php +++ b/public/page/search.php @@ -54,12 +54,12 @@ if ($q !== '' && $pdo) { 📍 +

-

Kinder:

-

Ort:

+

Ort:

Details anzeigen