Skip to content

Commit 8291f16

Browse files
committed
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
1 parent 3cdff01 commit 8291f16

1 file changed

Lines changed: 16 additions & 8 deletions

File tree

ietf/doc/views_search.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from django import forms
3636
from django.conf import settings
3737
from django.core.cache import cache
38-
from django.core.exceptions import ObjectDoesNotExist
38+
from django.core.exceptions import ObjectDoesNotExist, SuspiciousOperation
3939
from django.core.urlresolvers import reverse as urlreverse
4040
from django.db.models import Q
4141
from django.http import Http404, HttpResponseBadRequest, HttpResponse, HttpResponseRedirect
@@ -71,7 +71,15 @@ class SearchForm(forms.Form):
7171
state = forms.ModelChoiceField(State.objects.filter(type="draft-iesg"), empty_label="any state", required=False)
7272
substate = forms.ChoiceField(choices=(), required=False)
7373

74-
sort = forms.ChoiceField(choices=(("document", "Document"), ("title", "Title"), ("date", "Date"), ("status", "Status"), ("ipr", "Ipr"), ("ad", "AD")), required=False, widget=forms.HiddenInput)
74+
sort = forms.ChoiceField(
75+
choices= (
76+
("document", "Document"), ("-document", "Document (desc.)"),
77+
("title", "Title"), ("-title", "Title (desc.)"),
78+
("date", "Date"), ("-date", "Date (desc.)"),
79+
("status", "Status"), ("-status", "Status (desc.)"),
80+
("ipr", "Ipr"), ("ipr", "Ipr (desc.)"),
81+
("ad", "AD"), ("-ad", "AD (desc)"), ),
82+
required=False, widget=forms.HiddenInput)
7583

7684
doctypes = DocTypeName.objects.filter(used=True).exclude(slug='draft').order_by('name');
7785

@@ -296,18 +304,18 @@ def sort_key(d):
296304
res.append(d.get_state_slug());
297305
res.append("-");
298306

299-
if query["sort"] == "title":
307+
if query["sort"] in ["title", "-title"]:
300308
res.append(d.title)
301-
elif query["sort"] == "date":
309+
elif query["sort"] in ["date", "-date" ]:
302310
res.append(str(d.latest_revision_date))
303-
elif query["sort"] == "status":
311+
elif query["sort"] in ["status", "-status"]:
304312
if rfc_num != None:
305313
res.append(int(rfc_num))
306314
else:
307315
res.append(d.get_state().order if d.get_state() else None)
308-
elif query["sort"] == "ipr":
316+
elif query["sort"] in ["ipr", "-ipr"]:
309317
res.append(len(d.ipr()))
310-
elif query["sort"] == "ad":
318+
elif query["sort"] in ["ad", "-ad"]:
311319
if rfc_num != None:
312320
res.append(int(rfc_num))
313321
elif d.get_state_slug() == "active":
@@ -323,7 +331,7 @@ def sort_key(d):
323331

324332
return res
325333

326-
results.sort(key=sort_key)
334+
results.sort(key=sort_key, reverse=query["sort"].startswith("-"))
327335

328336
# fill in a meta dict with some information for rendering the result table
329337
if len(results) == MAX:

0 commit comments

Comments
 (0)