diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/course/forum/categories.php | 2 | ||||
| -rw-r--r-- | app/controllers/course/forum/discussions.php | 2 | ||||
| -rw-r--r-- | app/controllers/course/forum/search.php | 32 |
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); |
