From 048c922bc465cedba00f1b231ab9b4b37e4e26d1 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Wed, 13 Nov 2024 15:26:50 +0000
Subject: [PATCH] fix and improve forum category detection, fixes #4850

Closes #4850

Merge request studip/studip!3635
---
 lib/classes/JsonApi/Models/ForumEntry.php | 25 +++++++++++++----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/lib/classes/JsonApi/Models/ForumEntry.php b/lib/classes/JsonApi/Models/ForumEntry.php
index 3355244d7b5..e52cc3e6b0f 100644
--- a/lib/classes/JsonApi/Models/ForumEntry.php
+++ b/lib/classes/JsonApi/Models/ForumEntry.php
@@ -2,11 +2,11 @@
 
 namespace JsonApi\Models;
 
-/*
- * @property string category_id string primary key
- * @property string seminar_id string foreign key
- * @property string entry_name string database_column
- * @property string pos int
+/**
+ * @property string $category_id primary key
+ * @property string $seminar_id foreign key
+ * @property string $entry_name database_column
+ * @property string $pos
  */
 
 class ForumEntry extends \SimpleORMap
@@ -18,15 +18,18 @@ class ForumEntry extends \SimpleORMap
             'forum_entries.lft <= ? AND forum_entries.rgt >= ? AND forum_entries.seminar_id = ? AND forum_entries.depth = 1 ORDER BY forum_entries.lft ASC',
             [(int) $targetEntry['lft'], (int) $targetEntry['rgt'], $targetEntry['seminar_id']]
         );
-        $category = ForumCat::findBySQL(
-            'LEFT JOIN forum_categories_entries AS fce USING (category_id)
+
+        if (count($parentEntries) > 0) {
+            $category = ForumCat::findOneBySQL(
+                'LEFT JOIN forum_categories_entries AS fce USING (category_id)
             WHERE fce.topic_id = ?',
-            [$parentEntries[0]->id]
-        );
+                [$parentEntries[0]->id]
+            );
+        }
 
         if (empty($category)) {
-            $category = ForumCat::findBySql(
-                "seminar_id = ? AND entry_name = 'Allgemein'",
+            $category = ForumCat::findOneBySql(
+                "seminar_id = ? AND category_id = seminar_id",
                 [$targetEntry->seminar_id]
             );
         }
-- 
GitLab