Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 24 additions & 17 deletions lms/djangoapps/discussion/rest_api/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1685,6 +1685,7 @@ def get_comment_list(
"response_limit": page_size,
"reverse_order": reverse_order,
"merge_question_type_responses": merge_question_type_responses,
"show_deleted": show_deleted,
},
)
# Responses to discussion threads cannot be separated by endorsed, but
Expand Down Expand Up @@ -2317,17 +2318,11 @@ def get_response_comments(request, comment_id, page, page_size, requested_fields
response_comments = response["children"]
break

response_skip = page_size * (page - 1)
paged_response_comments = response_comments[
response_skip: (response_skip + page_size)
]
if not paged_response_comments and page != 1:
raise PageNotFoundError("Page not found (No results on this page).")

# Filter deleted content from the FULL list first
if not show_deleted:
paged_response_comments = [
response_comments = [
response
for response in paged_response_comments
for response in response_comments
if not response.get("is_deleted", False)
]
else:
Expand All @@ -2336,14 +2331,31 @@ def get_response_comments(request, comment_id, page, page_size, requested_fields
"`show_deleted` can only be set by users with moderation roles."
)

# Apply muting filter if not including muted content
# Filter muted content from the FULL list
include_muted = request.GET.get("include_muted", False)
include_muted = include_muted in ["true", "True", True]
if not include_muted:
paged_response_comments = filter_muted_content(
response_comments = filter_muted_content(
request.user,
context["course"].id,
paged_response_comments
response_comments
)

# NOW calculate pagination based on FILTERED total
total_comments_count = len(response_comments)
num_pages = (
(total_comments_count + page_size - 1) // page_size
if total_comments_count else 1
)

# Then paginate the filtered list
response_skip = page_size * (page - 1)
paged_response_comments = response_comments[
response_skip: (response_skip + page_size)
]
if not paged_response_comments and page != 1:
raise PageNotFoundError("Page not found (No results on this page).")
Comment thread
naincy128 marked this conversation as resolved.

results = _serialize_discussion_entities(
request,
context,
Expand All @@ -2352,11 +2364,6 @@ def get_response_comments(request, comment_id, page, page_size, requested_fields
DiscussionEntity.comment,
)

total_comments_count = len(response_comments)
num_pages = (
(total_comments_count + page_size - 1) // page_size
if total_comments_count else 1
)
paginator = DiscussionAPIPagination(
request, page, num_pages, total_comments_count
)
Expand Down
1 change: 1 addition & 0 deletions lms/djangoapps/discussion/rest_api/tests/test_api_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -4025,6 +4025,7 @@ def test_basic_query_params(self):
"with_responses": True,
"reverse_order": False,
"merge_question_type_responses": False,
"show_deleted": False,
},
"course_id": str(self.course.id),
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ def _retrieve(self, *args, **kwargs):
"merge_question_type_responses": kwargs.get(
"merge_question_type_responses", False
),
"show_deleted": kwargs.get("show_deleted"),
}
request_params = utils.clean_forum_params(request_params)
course_id = kwargs.get("course_id")
Expand Down
Loading