diff --git a/api/comment_threads.rb b/api/comment_threads.rb index ac9feaeddf..690bb7fefb 100644 --- a/api/comment_threads.rb +++ b/api/comment_threads.rb @@ -35,6 +35,8 @@ error 404, [t(:requested_object_not_found)].to_json end + merge_question_type_responses = value_to_boolean(params["merge_question_type_responses"]) + # user is required to return user-specific fields, such as "read" (even if bool_mark_as_read is False) if params["user_id"] user = User.only([:id, :username, :read_states]).find_by(external_id: params["user_id"]) @@ -63,7 +65,8 @@ error 400, [t(:param_exceeds_limit, :param => resp_limit, :limit => size_limit)].to_json end presenter.to_hash( - bool_with_responses, resp_skip, resp_limit, bool_recursive, bool_flagged_comments, bool_reverse_order + bool_with_responses, resp_skip, resp_limit, bool_recursive, bool_flagged_comments, bool_reverse_order, + merge_question_type_responses ).to_json end diff --git a/presenters/thread.rb b/presenters/thread.rb index 538e4cf5ef..37f8f7c9f9 100644 --- a/presenters/thread.rb +++ b/presenters/thread.rb @@ -35,7 +35,8 @@ def to_hash( resp_limit=nil, recursive=true, flagged_comments=false, - reverse_order=false + reverse_order=false, + merge_question_type_responses=false ) raise ArgumentError unless resp_skip >= 0 raise ArgumentError unless resp_limit.nil? or resp_limit >= 1 @@ -48,7 +49,8 @@ def to_hash( end sorting_key_order = reverse_order ? -1 : 1 if with_responses - if @thread.thread_type.discussion? && resp_skip == 0 && resp_limit.nil? + if (@thread.thread_type.discussion? || (@thread.thread_type.question? && merge_question_type_responses)) && + resp_skip == 0 && resp_limit.nil? if recursive content = Comment.where(comment_thread_id: @thread._id).order_by({"sk" => sorting_key_order}) else @@ -66,28 +68,41 @@ def to_hash( end case @thread.thread_type when "question" - endorsed_responses = responses.where(endorsed: true) - non_endorsed_responses = responses.where(endorsed: false) - endorsed_response_info = get_paged_merged_responses( + if merge_question_type_responses + response_info = get_paged_merged_responses( @thread._id, - endorsed_responses, - 0, - nil, - recursive, - sorting_key_order - ) - non_endorsed_response_info = get_paged_merged_responses( - @thread._id, - non_endorsed_responses, + responses, resp_skip, resp_limit, recursive, sorting_key_order - ) - h["endorsed_responses"] = endorsed_response_info["responses"] - h["non_endorsed_responses"] = non_endorsed_response_info["responses"] - h["non_endorsed_resp_total"] = non_endorsed_response_info["response_count"] - h["resp_total"] = non_endorsed_response_info["response_count"] + endorsed_response_info["response_count"] + ) + h["children"] = response_info["responses"] + h["resp_total"] = response_info["response_count"] + else + endorsed_responses = responses.where(endorsed: true) + non_endorsed_responses = responses.where(endorsed: false) + endorsed_response_info = get_paged_merged_responses( + @thread._id, + endorsed_responses, + 0, + nil, + recursive, + sorting_key_order + ) + non_endorsed_response_info = get_paged_merged_responses( + @thread._id, + non_endorsed_responses, + resp_skip, + resp_limit, + recursive, + sorting_key_order + ) + h["endorsed_responses"] = endorsed_response_info["responses"] + h["non_endorsed_responses"] = non_endorsed_response_info["responses"] + h["non_endorsed_resp_total"] = non_endorsed_response_info["response_count"] + h["resp_total"] = non_endorsed_response_info["response_count"] + endorsed_response_info["response_count"] + end when "discussion" response_info = get_paged_merged_responses( @thread._id,