From: hernani Date: Tue, 6 Jul 2010 21:45:34 +0000 (+0000) Subject: Fixes the answer count on the question page, makes searched sort by relevance by... X-Git-Tag: live~642 X-Git-Url: https://git.openstreetmap.org./osqa.git/commitdiff_plain/a9e8818024cfebdcfaac3f22e0712e612a9b022d Fixes the answer count on the question page, makes searched sort by relevance by default, makes question work with the better pagination stuff. git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@492 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- diff --git a/forum/skins/default/templates/question.html b/forum/skins/default/templates/question.html index 20fdf1c..00bbd51 100644 --- a/forum/skins/default/templates/question.html +++ b/forum/skins/default/templates/question.html @@ -111,24 +111,17 @@
- {% blocktrans count answers|length as counter %} + {% blocktrans count answers.count as counter %} One Answer: {% plural %} {{counter}} Answers: {% endblocktrans %}
- + {{ answers.sort_tabs }}
- {% cnprog_paginator context %} + {{ answers.page_numbers }} - {% for answer in answers %} + {% for answer in answers.page %}
@@ -159,7 +152,7 @@ {% endfor %}
- {% cnprog_paginator context %} + {{ answers.page_numbers }}
{% endif %} diff --git a/forum/utils/pagination.py b/forum/utils/pagination.py index 684992c..393fac0 100644 --- a/forum/utils/pagination.py +++ b/forum/utils/pagination.py @@ -49,6 +49,9 @@ class PaginatorContext(object): else: self.has_pagesize = False + self.force_sort = None + self.sticky_sort = False + class labels(object): @@ -83,10 +86,6 @@ def paginated(request, list_name, context, tpl_context): else: pagesize = 30 - - - - try: page = int(request.GET.get(labels.PAGE, 1)) except ValueError: @@ -99,10 +98,10 @@ def paginated(request, list_name, context, tpl_context): if context.has_sort: if request.GET.get(labels.SORT, None): sort = request.GET[labels.SORT] - if session_prefs.get('sticky_sort', False): + if context.sticky_sort or session_prefs.get('sticky_sort', False): session_prefs[labels.SORT] = sort else: - sort = session_prefs.get(labels.SORT, context.default_sort) + sort = context.force_sort or session_prefs.get(labels.SORT, context.default_sort) if not sort in context.sort_methods: sort = context.default_sort diff --git a/forum/views/readers.py b/forum/views/readers.py index ea555df..eed8fd5 100644 --- a/forum/views/readers.py +++ b/forum/views/readers.py @@ -52,6 +52,17 @@ class QuestionListPaginatorContext(pagination.PaginatorContext): (_('mostvoted'), pagination.SimpleSort(_('most voted'), '-score', _("most voted questions"))), ), pagesizes=(15, 30, 50)) +class AnswerPaginatorContext(pagination.PaginatorContext): + def __init__(self): + super (AnswerPaginatorContext, self).__init__('ANSWER_LIST', sort_methods=( + (_('oldest'), pagination.SimpleSort(_('oldest answers'), 'added_at', _("oldest answers will be shown first"))), + (_('latest'), pagination.SimpleSort(_('newest answers'), '-added_at', _("newest answers will be shown first"))), + (_('votes'), pagination.SimpleSort(_('popular answers'), '-score', _("most voted answers will be shown first"))), + ), default_sort=_('votes'), pagesizes=(5, 10, 20)) + + self.sticky_sort = True + + def feed(request): return RssQuestionFeed( Question.objects.filter_state(deleted=False).order_by('-last_activity_at'), @@ -189,7 +200,8 @@ def question_search(request, keywords): if can_rank: paginator_context = QuestionListPaginatorContext() - paginator_context.sort_methods[_('ranking')] = pagination.SimpleSort(_('ranking'), '-ranking', _("most relevant questions")) + paginator_context.sort_methods[_('ranking')] = pagination.SimpleSort(_('relevance'), '-ranking', _("most relevant questions")) + paginator_context.force_sort = _('ranking') else: paginator_context = None @@ -243,19 +255,6 @@ def tags(request): } } -def get_answer_sort_order(request): - view_dic = {"latest":"-added_at", "oldest":"added_at", "votes":"-score" } - - view_id = request.GET.get('sort', request.session.get('answer_sort_order', None)) - - if view_id is None or not view_id in view_dic: - view_id = "votes" - - if view_id != request.session.get('answer_sort_order', None): - request.session['answer_sort_order'] = view_id - - return (view_id, view_dic[view_id]) - def update_question_view_times(request, question): if not 'last_seen_in_question' in request.session: request.session['last_seen_in_question'] = {} @@ -278,6 +277,7 @@ def match_question_slug(slug): return None +@decorators.render("question.html", 'questions', tabbed=False) def question(request, id, slug): try: question = Question.objects.get(id=id) @@ -289,9 +289,6 @@ def question(request, id, slug): raise Http404() - page = int(request.GET.get('page', 1)) - view_id, order_by = get_answer_sort_order(request) - if question.nis.deleted and not request.user.can_view_deleted_post(question): raise Http404 @@ -300,14 +297,7 @@ def question(request, id, slug): else: answer_form = AnswerForm(question) - answers = request.user.get_visible_answers(question) - - if answers is not None: - answers = [a for a in answers.order_by("-marked", order_by) - if not a.nis.deleted or a.author == request.user] - - objects_list = Paginator(answers, ANSWERS_PAGE_SIZE) - page_objects = objects_list.page(page) + answers = request.user.get_visible_answers(question).order_by("-marked") update_question_view_times(request, question) @@ -319,25 +309,13 @@ def question(request, id, slug): else: subscription = False - return render_to_response('question.html', { + return pagination.paginated(request, 'answers', AnswerPaginatorContext(), { "question" : question, "answer" : answer_form, - "answers" : page_objects.object_list, - "tab_id" : view_id, + "answers" : answers, "similar_questions" : question.get_related_questions(), "subscription": subscription, - "context" : { - 'is_paginated' : True, - 'pages': objects_list.num_pages, - 'page': page, - 'has_previous': page_objects.has_previous(), - 'has_next': page_objects.has_next(), - 'previous': page_objects.previous_page_number(), - 'next': page_objects.next_page_number(), - 'base_url' : request.path + '?sort=%s&' % view_id, - 'extend_url' : "#sort-top" - } - }, context_instance=RequestContext(request)) + }) REVISION_TEMPLATE = template.loader.get_template('node/revision.html')