aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorMurtaza Sultani <sultani@data-quest.de>2025-07-10 14:59:43 +0200
committerMurtaza Sultani <sultani@data-quest.de>2025-07-10 14:59:43 +0200
commita83b19699faac0b537c03493e4ce1f84a944c206 (patch)
tree50333ea471665a5166066a737a01e0940e88e5c1 /app
parent3496fc0bd4cab0e7f097acae17ad2a7f6553c1e9 (diff)
Resolve "Forum 3: Letzte Aktivität wird falsch gezählt"
Closes #5707 and #5708 Merge request studip/studip!4339
Diffstat (limited to 'app')
-rw-r--r--app/controllers/course/forum/categories.php2
-rw-r--r--app/controllers/course/forum/discussions.php2
-rw-r--r--app/controllers/course/forum/search.php32
3 files changed, 17 insertions, 19 deletions
diff --git a/app/controllers/course/forum/categories.php b/app/controllers/course/forum/categories.php
index 2ff5dc6..3b5cfd4 100644
--- a/app/controllers/course/forum/categories.php
+++ b/app/controllers/course/forum/categories.php
@@ -40,7 +40,7 @@ class Course_Forum_CategoriesController extends Forum\ForumBaseController
'metadata' => [
'postings_count' => (int) $category->metadata['postings_count'],
'users_count' => (int) $category->metadata['users_count'],
- 'recent_activity' => date('c', $category->metadata['recent_activity'])
+ 'recent_activity' => $category->metadata['recent_activity'] ? date('c', $category->metadata['recent_activity']) : null
]
])
);
diff --git a/app/controllers/course/forum/discussions.php b/app/controllers/course/forum/discussions.php
index 213f567..decff73 100644
--- a/app/controllers/course/forum/discussions.php
+++ b/app/controllers/course/forum/discussions.php
@@ -43,7 +43,7 @@ class Course_Forum_DiscussionsController extends Forum\ForumBaseController
'metadata' => [
'postings_count' => (int) $metadata['postings_count'],
'users_count' => (int) $metadata['users_count'],
- 'recent_activity' => $metadata['recent_activity'] ? date('c', $metadata['recent_activity']) : ''
+ 'recent_activity' => $metadata['recent_activity'] ? date('c', $metadata['recent_activity']) : null
]
])
);
diff --git a/app/controllers/course/forum/search.php b/app/controllers/course/forum/search.php
index 84172fb..9e811e3 100644
--- a/app/controllers/course/forum/search.php
+++ b/app/controllers/course/forum/search.php
@@ -64,14 +64,14 @@ class Course_Forum_SearchController extends Forum\ForumBaseController
$query = [
"SELECT
- discussions.discussion_id,
- COUNT(DISTINCT postings.posting_id) AS 'postings_count'
- FROM `forum_discussions` AS `discussions`
- LEFT JOIN `forum_postings` AS `postings` USING(`discussion_id`)
- LEFT JOIN `tags_relations` ON (`tags_relations`.`range_id` = `discussions`.`discussion_id` AND `range_type` = 'forum')
- WHERE `postings`.`range_id` = :course_id ",
+ discussions.*,
+ MAX(postings.mkdate) AS latest_post_date
+ FROM forum_discussions AS discussions
+ LEFT JOIN forum_postings AS postings USING(discussion_id)
+ LEFT JOIN tags_relations ON (tags_relations.range_id = discussions.discussion_id AND range_type = 'forum')
+ WHERE postings.range_id = :range_id ",
[
- 'course_id' => $this->course_id
+ 'range_id' => $this->course_id
]
];
@@ -117,18 +117,16 @@ class Course_Forum_SearchController extends Forum\ForumBaseController
default => ""
};
- $result = DBManager::get()->fetchAll(
- $query[0]." GROUP BY discussions.discussion_id",
- $query[1]
+ $discussions = DBManager::get()->fetchAll(
+ $query[0]." GROUP BY discussions.discussion_id ORDER BY latest_post_date DESC",
+ $query[1],
+ ForumDiscussion::buildExisting(...)
);
- $discussions = ForumDiscussion::findBySQL("discussion_id IN (:discussion_ids)", ['discussion_ids' => array_column($result, 'discussion_id')]);
-
-
- return array_map(function (ForumDiscussion $discussion) use ($result) {
- $postings_count = array_find($result, fn($item) => $item['discussion_id'] === $discussion->discussion_id)['postings_count'];
+ return array_map(function (ForumDiscussion $discussion) {
$members = array_map(fn(ForumMember $member) => $member->toRawArray(), $discussion->members);
$tags = array_map(fn(ForumTag $tag) => $tag->toRawArray(), $discussion->tags);
+ $metadata = $discussion->getMetaData();
return [
'id' => $discussion->discussion_id,
@@ -150,8 +148,8 @@ class Course_Forum_SearchController extends Forum\ForumBaseController
'members' => $members,
'tags' => $tags,
'meta' => [
- 'postings_count' => (int) $postings_count,
- 'recent_activity' => $discussion->metadata['recent_activity'] ? date('c', $discussion->metadata['recent_activity']) : null,
+ 'postings_count' => (int) $metadata['postings_count'],
+ 'recent_activity' => $metadata['recent_activity'] ? date('c', $metadata['recent_activity']) : null,
]
];
}, $discussions);