From 8291f169aeb745a43380a5f08a373e2a7f996888 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Sun, 6 Mar 2016 16:52:19 +0000 Subject: [PATCH] Added reverse sort capability to the document search views. The templates needs to be updated accordingly in order for this to be available other than through URL hacking. - Legacy-Id: 10909 --- ietf/doc/views_search.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/ietf/doc/views_search.py b/ietf/doc/views_search.py index 0fac38e44..343717594 100644 --- a/ietf/doc/views_search.py +++ b/ietf/doc/views_search.py @@ -35,7 +35,7 @@ import datetime, re from django import forms from django.conf import settings from django.core.cache import cache -from django.core.exceptions import ObjectDoesNotExist +from django.core.exceptions import ObjectDoesNotExist, SuspiciousOperation from django.core.urlresolvers import reverse as urlreverse from django.db.models import Q from django.http import Http404, HttpResponseBadRequest, HttpResponse, HttpResponseRedirect @@ -71,7 +71,15 @@ class SearchForm(forms.Form): state = forms.ModelChoiceField(State.objects.filter(type="draft-iesg"), empty_label="any state", required=False) substate = forms.ChoiceField(choices=(), required=False) - sort = forms.ChoiceField(choices=(("document", "Document"), ("title", "Title"), ("date", "Date"), ("status", "Status"), ("ipr", "Ipr"), ("ad", "AD")), required=False, widget=forms.HiddenInput) + sort = forms.ChoiceField( + choices= ( + ("document", "Document"), ("-document", "Document (desc.)"), + ("title", "Title"), ("-title", "Title (desc.)"), + ("date", "Date"), ("-date", "Date (desc.)"), + ("status", "Status"), ("-status", "Status (desc.)"), + ("ipr", "Ipr"), ("ipr", "Ipr (desc.)"), + ("ad", "AD"), ("-ad", "AD (desc)"), ), + required=False, widget=forms.HiddenInput) doctypes = DocTypeName.objects.filter(used=True).exclude(slug='draft').order_by('name'); @@ -296,18 +304,18 @@ def retrieve_search_results(form, all_types=False): res.append(d.get_state_slug()); res.append("-"); - if query["sort"] == "title": + if query["sort"] in ["title", "-title"]: res.append(d.title) - elif query["sort"] == "date": + elif query["sort"] in ["date", "-date" ]: res.append(str(d.latest_revision_date)) - elif query["sort"] == "status": + elif query["sort"] in ["status", "-status"]: if rfc_num != None: res.append(int(rfc_num)) else: res.append(d.get_state().order if d.get_state() else None) - elif query["sort"] == "ipr": + elif query["sort"] in ["ipr", "-ipr"]: res.append(len(d.ipr())) - elif query["sort"] == "ad": + elif query["sort"] in ["ad", "-ad"]: if rfc_num != None: res.append(int(rfc_num)) elif d.get_state_slug() == "active": @@ -323,7 +331,7 @@ def retrieve_search_results(form, all_types=False): return res - results.sort(key=sort_key) + results.sort(key=sort_key, reverse=query["sort"].startswith("-")) # fill in a meta dict with some information for rendering the result table if len(results) == MAX: