5858from ietf .person .models import Email
5959from ietf .utils .history import find_history_active_at
6060from ietf .doc .forms import TelechatForm , NotifyForm
61- from ietf .doc .mails import email_comment
61+ from ietf .doc .mails import email_comment
6262from ietf .mailtrigger .utils import gather_relevant_expansions
6363
6464def render_document_top (request , doc , tab , name ):
@@ -101,7 +101,7 @@ def document_main(request, name, rev=None):
101101
102102 if doc .type_id == 'conflrev' :
103103 conflictdoc = doc .related_that_doc ('conflrev' )[0 ].document
104-
104+
105105 revisions = []
106106 for h in doc .history_set .order_by ("time" , "id" ):
107107 if h .rev and not h .rev in revisions :
@@ -233,6 +233,9 @@ def document_main(request, name, rev=None):
233233 # latest revision
234234 latest_revision = doc .latest_event (NewRevisionDocEvent , type = "new_revision" )
235235
236+ # bibtex
237+ file_urls .append (("bibtex" , "bibtex" ))
238+
236239 # ballot
237240 ballot_summary = None
238241 if iesg_state and iesg_state .slug in IESG_BALLOT_ACTIVE_STATES :
@@ -281,7 +284,7 @@ def document_main(request, name, rev=None):
281284 if doc .stream_id == "ietf" and iesg_state :
282285 show_in_states = set (IESG_BALLOT_ACTIVE_STATES )
283286 show_in_states .update (('approved' ,'ann' ,'rfcqueue' ,'pub' ))
284- if iesg_state .slug in show_in_states :
287+ if iesg_state .slug in show_in_states :
285288 can_edit_consensus = can_edit
286289 e = doc .latest_event (ConsensusDocEvent , type = "changed_consensus" )
287290 consensus = nice_consensus (e and e .consensus )
@@ -463,7 +466,7 @@ def document_main(request, name, rev=None):
463466 if doc .rev == "00" and not os .path .isfile (pathname ):
464467 # This could move to a template
465468 content = "A conflict review response has not yet been proposed."
466- else :
469+ else :
467470 content = get_document_content (filename , pathname , split = False , markup = True )
468471
469472 ballot_summary = None
@@ -491,13 +494,13 @@ def document_main(request, name, rev=None):
491494 if doc .rev == "00" and not os .path .isfile (pathname ):
492495 # This could move to a template
493496 content = "Status change text has not yet been proposed."
494- else :
497+ else :
495498 content = get_document_content (filename , pathname , split = False )
496499
497500 ballot_summary = None
498501 if doc .get_state_slug () in ("iesgeval" ):
499502 ballot_summary = needed_ballot_positions (doc , doc .active_ballot ().active_ad_positions ().values ())
500-
503+
501504 if isinstance (doc ,Document ):
502505 sorted_relations = doc .relateddocument_set .all ().order_by ('relationship__name' )
503506 elif isinstance (doc ,DocHistory ):
@@ -590,7 +593,7 @@ def document_email(request,name):
590593 aliases = get_doc_email_aliases (name ) if doc .type_id == 'draft' else None
591594
592595 expansions = gather_relevant_expansions (doc = doc )
593-
596+
594597 return render (request , "doc/document_email.html" ,
595598 dict (doc = doc ,
596599 top = top ,
@@ -665,6 +668,32 @@ def document_history(request, name):
665668 ),
666669 context_instance = RequestContext (request ))
667670
671+
672+ def document_bibtex (request , name , rev = None ):
673+ doc = get_object_or_404 (Document , docalias__name = name )
674+
675+ latest_revision = doc .latest_event (NewRevisionDocEvent , type = "new_revision" )
676+ replaced_by = [d .name for d in doc .related_that ("replaces" )]
677+ published = doc .latest_event (type = "published_rfc" )
678+ rfc = latest_revision .doc if latest_revision .doc .get_state_slug () == "rfc" else None
679+
680+ if rev != None and rev != doc .rev :
681+ # find the entry in the history
682+ for h in doc .history_set .order_by ("-time" ):
683+ if rev == h .rev :
684+ doc = h
685+ break
686+
687+ return render_to_response ("doc/document_bibtex.bib" ,
688+ dict (doc = doc ,
689+ replaced_by = replaced_by ,
690+ published = published ,
691+ rfc = rfc ,
692+ latest_revision = latest_revision ),
693+ content_type = "text/plain; charset=utf-8" ,
694+ context_instance = RequestContext (request ))
695+
696+
668697def document_writeup (request , name ):
669698 doc = get_object_or_404 (Document , docalias__name = name )
670699 top = render_document_top (request , doc , "writeup" , name )
@@ -921,7 +950,7 @@ def add_comment(request, name):
921950 form = AddCommentForm (request .POST )
922951 if form .is_valid ():
923952 c = form .cleaned_data ['comment' ]
924-
953+
925954 e = DocEvent (doc = doc , by = login )
926955 e .type = "added_comment"
927956 e .desc = c
@@ -932,7 +961,7 @@ def add_comment(request, name):
932961 return redirect ("doc_history" , name = doc .name )
933962 else :
934963 form = AddCommentForm ()
935-
964+
936965 return render_to_response ('doc/add_comment.html' ,
937966 dict (doc = doc ,
938967 form = form ),
@@ -1035,7 +1064,7 @@ def email_aliases(request,name=''):
10351064 doc = get_object_or_404 (Document , name = name ) if name else None
10361065 if not name :
10371066 # require login for the overview page, but not for the
1038- # document-specific pages
1067+ # document-specific pages
10391068 if not request .user .is_authenticated ():
10401069 return redirect ('%s?next=%s' % (settings .LOGIN_URL , request .path ))
10411070 aliases = get_doc_email_aliases (name )
0 commit comments