@@ -62,6 +62,8 @@ class SearchForm(forms.Form):
6262
6363 sort = forms .ChoiceField (choices = (("document" , "Document" ), ("title" , "Title" ), ("date" , "Date" ), ("status" , "Status" ), ("ipr" , "Ipr" ), ("ad" , "AD" )), required = False , widget = forms .HiddenInput )
6464
65+ doctypes = DocTypeName .objects .exclude (slug = 'draft' ).order_by ('name' );
66+
6567 def __init__ (self , * args , ** kwargs ):
6668 super (SearchForm , self ).__init__ (* args , ** kwargs )
6769 responsible = Document .objects .values_list ('ad' , flat = True ).distinct ()
@@ -155,12 +157,15 @@ def fill_in_search_attributes(docs):
155157 else :
156158 d .latest_revision_date = d .time
157159
158- if d .get_state_slug () == "rfc" :
159- d .search_heading = "RFC"
160- elif d .get_state_slug () == "active" :
161- d .search_heading = "Active Internet-Draft"
160+ if d .type_id == "draft" :
161+ if d .get_state_slug () == "rfc" :
162+ d .search_heading = "RFC"
163+ elif d .get_state_slug () in ("ietf-rm" , "auth-rm" ):
164+ d .search_heading = "Withdrawn Internet-Draft"
165+ else :
166+ d .search_heading = "%s Internet-Draft" % d .get_state ()
162167 else :
163- d .search_heading = "Old Internet-Draft"
168+ d .search_heading = "%s" % ( d . type ,);
164169
165170 d .expirable = expirable_draft (d )
166171
@@ -196,39 +201,55 @@ def fill_in_search_attributes(docs):
196201 l .sort ()
197202
198203
199- def retrieve_search_results (form , types = ['draft' ]):
204+ def retrieve_search_results (form , all_types = False ):
205+
200206 """Takes a validated SearchForm and return the results."""
201207 if not form .is_valid ():
202208 raise ValueError ("SearchForm doesn't validate: %s" % form .errors )
203209
204210 query = form .cleaned_data
205211
206- if not (query ['activedrafts' ] or query ['olddrafts' ] or query ['rfcs' ]):
212+ types = [];
213+ meta = {}
214+
215+ if (query ['activedrafts' ] or query ['olddrafts' ] or query ['rfcs' ]):
216+ types .append ('draft' )
217+
218+ # Advanced document types are data-driven, so we need to read them from the
219+ # raw form.data field (and track their checked/unchecked state ourselves)
220+ meta ['checked' ] = {}
221+ alltypes = DocTypeName .objects .exclude (slug = 'draft' ).order_by ('name' );
222+ for doctype in alltypes :
223+ if form .data .__contains__ ('include-' + doctype .slug ):
224+ types .append (doctype .slug )
225+ meta ['checked' ][doctype .slug ] = True
226+
227+ if len (types ) == 0 and not all_types :
207228 return ([], {})
208229
209230 MAX = 500
210231
211- if types and len (types ) > 0 :
212- docs = Document .objects .filter (type__in = types )
213- else :
232+ if all_types :
214233 docs = Document .objects .all ()
234+ else :
235+ docs = Document .objects .filter (type__in = types )
215236
216237 # name
217238 if query ["name" ]:
218239 docs = docs .filter (Q (docalias__name__icontains = query ["name" ]) |
219240 Q (title__icontains = query ["name" ])).distinct ()
220241
221242 # rfc/active/old check buttons
222- if types == ['draft' ]:
223- allowed_states = []
224- if query ["rfcs" ]:
225- allowed_states .append ("rfc" )
226- if query ["activedrafts" ]:
227- allowed_states .append ("active" )
228- if query ["olddrafts" ]:
229- allowed_states .extend (['repl' , 'expired' , 'auth-rm' , 'ietf-rm' ])
243+ allowed_draft_states = []
244+ if query ["rfcs" ]:
245+ allowed_draft_states .append ("rfc" )
246+ if query ["activedrafts" ]:
247+ allowed_draft_states .append ("active" )
248+ if query ["olddrafts" ]:
249+ allowed_draft_states .extend (['repl' , 'expired' , 'auth-rm' , 'ietf-rm' ])
230250
231- docs = docs .filter (states__type = "draft" , states__slug__in = allowed_states )
251+ docs = docs .filter (Q (states__slug__in = allowed_draft_states ) |
252+ ~ Q (type__slug = 'draft' )).distinct ()
232253
233254 # radio choices
234255 by = query ["by" ]
@@ -259,12 +280,14 @@ def sort_key(d):
259280
260281 rfc_num = d .rfc_number ()
261282
262- if rfc_num != None :
263- res .append (2 )
264- elif d .get_state_slug () == "active" :
265- res .append (1 )
283+
284+ if d .type_id == "draft" :
285+ res .append (["Active" , "Expired" , "Replaced" , "Withdrawn" , "RFC" ].index (d .search_heading .split ()[0 ] ))
266286 else :
267- res .append (3 )
287+ res .append (d .type_id );
288+ res .append ("-" );
289+ res .append (d .get_state_slug ());
290+ res .append ("-" );
268291
269292 if query ["sort" ] == "title" :
270293 res .append (d .title )
@@ -296,11 +319,10 @@ def sort_key(d):
296319 results .sort (key = sort_key )
297320
298321 # fill in a meta dict with some information for rendering the result table
299- meta = {}
300322 if len (results ) == MAX :
301323 meta ['max' ] = MAX
302324 meta ['by' ] = query ['by' ]
303- meta ['advanced' ] = bool (query ['by' ])
325+ meta ['advanced' ] = bool (query ['by' ] or len ( meta [ 'checked' ]) )
304326
305327 meta ['headers' ] = [{'title' : 'Document' , 'key' :'document' },
306328 {'title' : 'Title' , 'key' :'title' },
@@ -316,7 +338,6 @@ def sort_key(d):
316338 h ["sort_url" ] = "?" + d .urlencode ()
317339 if h ['key' ] == query .get ('sort' ):
318340 h ['sorted' ] = True
319-
320341 return (results , meta )
321342
322343
@@ -477,7 +498,7 @@ def docs_for_ad(request, name):
477498 form = SearchForm ({'by' :'ad' ,'ad' : ad .id ,
478499 'rfcs' :'on' , 'activedrafts' :'on' , 'olddrafts' :'on' ,
479500 'sort' : 'status' })
480- results , meta = retrieve_search_results (form , types = None )
501+ results , meta = retrieve_search_results (form , all_types = True )
481502 results .sort (key = ad_dashboard_sort_key )
482503 del meta ["headers" ][- 1 ]
483504 #
0 commit comments