3333import datetime , re
3434
3535from django import forms
36- from django .core .exceptions import ObjectDoesNotExist
3736from django .core .urlresolvers import reverse as urlreverse
3837from django .shortcuts import render
3938from django .db .models import Q
4039from django .http import Http404 , HttpResponseBadRequest , HttpResponse , HttpResponseRedirect
4140
4241import debug # pyflakes:ignore
4342
44- from ietf .community .models import CommunityList
4543from ietf .doc .models import ( Document , DocHistory , DocAlias , State , RelatedDocument ,
4644 DocEvent , LastCallDocEvent , TelechatDocEvent , IESG_SUBSTATE_TAGS )
4745from ietf .doc .expire import expirable_draft
5149from ietf .name .models import DocTagName , DocTypeName , StreamName
5250from ietf .person .models import Person
5351from ietf .utils .draft_search import normalize_draftname
52+ from ietf .community .utils import augment_docs_with_tracking_info
5453
5554
5655class SearchForm (forms .Form ):
@@ -201,9 +200,9 @@ def fill_in_search_attributes(docs):
201200 l .sort ()
202201
203202
204- def retrieve_search_results (form , all_types = False ):
205-
203+ def retrieve_search_results (form , request , all_types = False ):
206204 """Takes a validated SearchForm and return the results."""
205+
207206 if not form .is_valid ():
208207 raise ValueError ("SearchForm doesn't validate: %s" % form .errors )
209208
@@ -322,6 +321,8 @@ def sort_key(d):
322321
323322 results .sort (key = sort_key )
324323
324+ augment_docs_with_tracking_info (results , request .user )
325+
325326 # fill in a meta dict with some information for rendering the result table
326327 if len (results ) == MAX :
327328 meta ['max' ] = MAX
@@ -345,21 +346,6 @@ def sort_key(d):
345346 return (results , meta )
346347
347348
348- def get_doc_is_tracked (request , results ):
349- # Determine whether each document is being tracked or not, and remember
350- # that so we can display the proper track/untrack option.
351- doc_is_tracked = { }
352- if request .user .is_authenticated ():
353- try :
354- clist = CommunityList .objects .get (user = request .user )
355- clist .update ()
356- except ObjectDoesNotExist :
357- return doc_is_tracked
358- for doc in results :
359- if clist .get_documents ().filter (name = doc .name ).count () > 0 :
360- doc_is_tracked [doc .name ] = True
361- return doc_is_tracked
362-
363349def search (request ):
364350 if request .GET :
365351 # backwards compatibility
@@ -375,17 +361,15 @@ def search(request):
375361 if not form .is_valid ():
376362 return HttpResponseBadRequest ("form not valid: %s" % form .errors )
377363
378- results , meta = retrieve_search_results (form )
364+ results , meta = retrieve_search_results (form , request )
379365 meta ['searching' ] = True
380366 else :
381367 form = SearchForm ()
382368 results = []
383369 meta = { 'by' : None , 'advanced' : False , 'searching' : False }
384370
385- doc_is_tracked = get_doc_is_tracked (request , results )
386-
387371 return render (request , 'doc/search/search.html' , {
388- 'form' :form , 'docs' :results , 'doc_is_tracked' : doc_is_tracked , ' meta' :meta , },
372+ 'form' :form , 'docs' :results , 'meta' :meta , },
389373 )
390374
391375def frontpage (request ):
@@ -550,7 +534,7 @@ def docs_for_ad(request, name):
550534 form = SearchForm ({'by' :'ad' ,'ad' : ad .id ,
551535 'rfcs' :'on' , 'activedrafts' :'on' , 'olddrafts' :'on' ,
552536 'sort' : 'status' })
553- results , meta = retrieve_search_results (form , all_types = True )
537+ results , meta = retrieve_search_results (form , request , all_types = True )
554538 results .sort (key = ad_dashboard_sort_key )
555539 del meta ["headers" ][- 1 ]
556540 #
@@ -564,7 +548,7 @@ def docs_for_ad(request, name):
564548def drafts_in_last_call (request ):
565549 lc_state = State .objects .get (type = "draft-iesg" , slug = "lc" ).pk
566550 form = SearchForm ({'by' :'state' ,'state' : lc_state , 'rfcs' :'on' , 'activedrafts' :'on' })
567- results , meta = retrieve_search_results (form )
551+ results , meta = retrieve_search_results (form , request )
568552
569553 return render (request , 'doc/drafts_in_last_call.html' , {
570554 'form' :form , 'docs' :results , 'meta' :meta
0 commit comments