From ef8ca23deeae70041af36c16eb8bc85fb9bb89cb Mon Sep 17 00:00:00 2001 From: Ibrahim Awwal Date: Tue, 18 Sep 2012 04:35:32 -0700 Subject: [PATCH] Fix pagination and sorting for followed threads. Also fixed sorting so that it always retrieves a new set of threads from the server for the initial set. --- .../django_comment_client/forum/views.py | 12 +++++++++--- .../coffee/src/discussion/discussion.coffee | 1 + .../views/discussion_thread_list_view.coffee | 16 ++++++++++------ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index 9fe812ec3a..48bf97b8c7 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -249,15 +249,19 @@ def user_profile(request, course_id, user_id): threads, page, num_pages = profiled_user.active_threads(query_params) query_params['page'] = page query_params['num_pages'] = num_pages + user_info = cc.User.from_django_user(request.user).to_dict() + + annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info) if request.is_ajax(): return utils.JsonResponse({ 'discussion_data': map(utils.safe_content, threads), + 'page': query_params['page'], + 'num_pages': query_params['num_pages'], + 'annotated_content_info': saxutils.escape(json.dumps(annotated_content_info),escapedict), }) else: - user_info = cc.User.from_django_user(request.user).to_dict() - annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info) context = { 'course': course, @@ -286,7 +290,7 @@ def following_threads(request, course_id, user_id): 'sort_key': 'date',#TODO: Allow custom sorting? 'sort_order': 'desc', } - print user_id + threads, page, num_pages = profiled_user.subscribed_threads(query_params) query_params['page'] = page query_params['num_pages'] = num_pages @@ -297,6 +301,8 @@ def following_threads(request, course_id, user_id): return utils.JsonResponse({ 'annotated_content_info': annotated_content_info, 'discussion_data': map(utils.safe_content, threads), + 'page': query_params['page'], + 'num_pages': query_params['num_pages'], }) else: diff --git a/lms/static/coffee/src/discussion/discussion.coffee b/lms/static/coffee/src/discussion/discussion.coffee index 52e8d466e2..fd3cd6a0b6 100644 --- a/lms/static/coffee/src/discussion/discussion.coffee +++ b/lms/static/coffee/src/discussion/discussion.coffee @@ -52,6 +52,7 @@ if Backbone? new_collection = _.union(models, new_threads) Content.loadContentInfos(response.annotated_content_info) @reset new_collection + @pages = response.num_pages sortByDate: (thread) -> thread.get("created_at") diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee index 98579b7a74..03ed3a595c 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee @@ -307,12 +307,13 @@ if Backbone? @$(".sort-bar a").removeClass("active") $(event.target).addClass("active") @sortBy = $(event.target).data("sort") - if @sortBy == "date" - @displayedCollection.comparator = @displayedCollection.sortByDateRecentFirst - else if @sortBy == "votes" - @displayedCollection.comparator = @displayedCollection.sortByVotes - else if @sortBy == "comments" - @displayedCollection.comparator = @displayedCollection.sortByComments + @collection.reset() + @collection.current_page = 0 + @loadMorePages(event) + @displayedCollection.comparator = switch @sortBy + when 'date' then @displayedCollection.sortByDateRecentFirst + when 'votes' then @displayedCollection.sortByVotes + when 'comments' then @displayedCollection.sortByComments @displayedCollection.sort() performSearch: (event) -> @@ -330,6 +331,9 @@ if Backbone? @mode = 'search' @current_search = text url = DiscussionUtil.urlFor("search") + #TODO: This might be better done by setting discussion.current_page=0 and calling discussion.loadMorePages + # Mainly because this currently does not reset any pagination variables which could cause problems. + # This doesn't use pagination either. DiscussionUtil.safeAjax $elem: @$(".post-search-field") data: { text: text }