X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/914442cbeb4f84cb0a54c2b99ee2562c51ec6b2e..7cdc19bcfed965828015c882bed2cd82a7f442d7:/forum/views/readers.py diff --git a/forum/views/readers.py b/forum/views/readers.py index da881d7..6a49087 100644 --- a/forum/views/readers.py +++ b/forum/views/readers.py @@ -28,7 +28,7 @@ from forum.models import * from forum.forms import get_next_url from forum.actions import QuestionViewAction from forum.http_responses import HttpResponseUnauthorized -from forum.feed import RssQuestionFeed +from forum.feed import RssQuestionFeed, RssAnswerFeed import decorators class QuestionListPaginatorContext(pagination.PaginatorContext): @@ -40,20 +40,13 @@ class QuestionListPaginatorContext(pagination.PaginatorContext): (_('mostvoted'), pagination.SimpleSort(_('most voted'), '-score', _("most voted questions"))), ), pagesizes=(15, 30, 50), default_pagesize=default_pagesize, prefix=prefix) -class AnswerSort(pagination.SimpleSort): - def apply(self, objects): - if self.label == _('votes'): - return objects.order_by('-marked', self.order_by, 'added_at') - else: - return objects.order_by('-marked', self.order_by) - class AnswerPaginatorContext(pagination.PaginatorContext): def __init__(self, id='ANSWER_LIST', prefix='', default_pagesize=10): super (AnswerPaginatorContext, self).__init__(id, sort_methods=( - (_('oldest'), AnswerSort(_('oldest answers'), 'added_at', _("oldest answers will be shown first"))), - (_('newest'), AnswerSort(_('newest answers'), '-added_at', _("newest answers will be shown first"))), - (_('votes'), AnswerSort(_('popular answers'), '-score', _("most voted answers will be shown first"))), - ), default_sort=_('votes'), sticky_sort = True, pagesizes=(5, 10, 20), default_pagesize=default_pagesize, prefix=prefix) + (_('oldest'), pagination.SimpleSort(_('oldest answers'), ('-marked', 'added_at'), _("oldest answers will be shown first"))), + (_('newest'), pagination.SimpleSort(_('newest answers'), ('-marked', '-added_at'), _("newest answers will be shown first"))), + (_('votes'), pagination.SimpleSort(_('popular answers'), ('-marked', '-score', 'added_at'), _("most voted answers will be shown first"))), + ), default_sort=_('votes'), pagesizes=(5, 10, 20), default_pagesize=default_pagesize, prefix=prefix) class TagPaginatorContext(pagination.PaginatorContext): def __init__(self): @@ -65,19 +58,22 @@ class TagPaginatorContext(pagination.PaginatorContext): def feed(request): return RssQuestionFeed( + request, Question.objects.filter_state(deleted=False).order_by('-last_activity_at'), settings.APP_TITLE + _(' - ')+ _('latest questions'), - settings.APP_DESCRIPTION, - request)(request) + settings.APP_DESCRIPTION)(request) @decorators.render('index.html') def index(request): + paginator_context = QuestionListPaginatorContext() + paginator_context.base_path = reverse('questions') return question_list(request, Question.objects.all(), sort=request.utils.set_sort_method('active'), base_path=reverse('questions'), - feed_url=reverse('latest_questions_feed')) + feed_url=reverse('latest_questions_feed'), + paginator_context=paginator_context) @decorators.render('questions.html', 'unanswered', _('unanswered'), weight=400) def unanswered(request): @@ -148,7 +144,8 @@ def question_list(request, initial, page_title = _("Questions") if request.GET.get('type', None) == 'rss': - return RssQuestionFeed(questions, page_title, list_description, request)(request) + questions = questions.order_by('-added_at') + return RssQuestionFeed(request, questions, page_title, list_description)(request) keywords = "" if request.GET.get("q"): @@ -280,7 +277,7 @@ def answer_redirect(request, answer): answer.question.get_absolute_url(), _('page'), page, answer.id)) @decorators.render("question.html", 'questions') -def question(request, id, slug=None, answer=None): +def question(request, id, slug='', answer=None): try: question = Question.objects.get(id=id) except: @@ -294,6 +291,9 @@ def question(request, id, slug=None, answer=None): if question.nis.deleted and not request.user.can_view_deleted_post(question): raise Http404 + if request.GET.get('type', None) == 'rss': + return RssAnswerFeed(request, question, include_comments=request.GET.get('comments', None) == 'yes')(request) + if answer: answer = get_object_or_404(Answer, id=answer) @@ -305,7 +305,7 @@ def question(request, id, slug=None, answer=None): return answer_redirect(request, answer) - if (not slug) or (slug != urlquote(slugify(question.title))): + if settings.FORCE_SINGLE_URL and (slug != slugify(question.title)): return HttpResponsePermanentRedirect(question.get_absolute_url()) if request.POST: