3535from django import forms
3636from django .conf import settings
3737from django .core .cache import cache
38- from django .core .exceptions import ObjectDoesNotExist
38+ from django .core .exceptions import ObjectDoesNotExist , SuspiciousOperation
3939from django .core .urlresolvers import reverse as urlreverse
4040from django .db .models import Q
4141from 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