185 lines
6.3 KiB
Python
185 lines
6.3 KiB
Python
from django.conf import settings
|
|
|
|
from ietf.idtracker.models import InternetDraft, DocumentComment, BallotInfo, IESGLogin
|
|
from ietf.idrfc.mails import *
|
|
|
|
def add_document_comment(request, doc, text, ballot=None):
|
|
if request:
|
|
login = IESGLogin.objects.get(login_name=request.user.username)
|
|
else:
|
|
login = None
|
|
|
|
c = DocumentComment()
|
|
c.document = doc.idinternal
|
|
c.public_flag = True
|
|
c.version = doc.revision_display()
|
|
c.comment_text = text
|
|
c.created_by = login
|
|
if ballot:
|
|
c.ballot = ballot
|
|
c.rfc_flag = doc.idinternal.rfc_flag
|
|
c.save()
|
|
|
|
def generate_ballot(request, doc):
|
|
ballot = BallotInfo()
|
|
ballot.ballot = doc.idinternal.ballot_id
|
|
ballot.active = False
|
|
ballot.last_call_text = generate_last_call_announcement(request, doc)
|
|
ballot.approval_text = generate_approval_mail(request, doc)
|
|
ballot.ballot_writeup = render_to_string("idrfc/ballot_writeup.txt")
|
|
ballot.save()
|
|
doc.idinternal.ballot = ballot
|
|
return ballot
|
|
|
|
def log_state_changed(request, doc, by, email_watch_list=True, note=''):
|
|
change = u"State changed to <b>%s</b> from %s." % (
|
|
doc.idinternal.docstate(),
|
|
format_document_state(doc.idinternal.prev_state,
|
|
doc.idinternal.prev_sub_state))
|
|
if note:
|
|
change += "<br>%s" % note
|
|
|
|
c = DocumentComment()
|
|
c.document = doc.idinternal
|
|
c.public_flag = True
|
|
c.version = doc.revision_display()
|
|
c.comment_text = change
|
|
|
|
if doc.idinternal.docstate()=="In Last Call":
|
|
c.comment_text += "\n\n<b>The following Last Call Announcement was sent out:</b>\n\n"
|
|
c.comment_text += doc.idinternal.ballot.last_call_text
|
|
|
|
|
|
if isinstance(by, IESGLogin):
|
|
c.created_by = by
|
|
c.result_state = doc.idinternal.cur_state
|
|
c.origin_state = doc.idinternal.prev_state
|
|
c.rfc_flag = doc.idinternal.rfc_flag
|
|
c.save()
|
|
|
|
if email_watch_list:
|
|
email_state_changed(request, doc, strip_tags(change))
|
|
|
|
return change
|
|
|
|
def log_state_changedREDESIGN(request, doc, by, prev_iesg_state, prev_iesg_tag):
|
|
from ietf.doc.models import DocEvent
|
|
|
|
state = doc.get_state("draft-iesg")
|
|
|
|
state_name = state.name
|
|
tags = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
|
if tags:
|
|
state_name += "::" + tags[0].name
|
|
|
|
prev_state_name = prev_iesg_state.name if prev_iesg_state else "I-D Exists"
|
|
if prev_iesg_tag:
|
|
prev_state_name += "::" + prev_iesg_tag.name
|
|
|
|
e = DocEvent(doc=doc, by=by)
|
|
e.type = "changed_document"
|
|
e.desc = u"State changed to <b>%s</b> from %s" % (state_name, prev_state_name)
|
|
|
|
if state.slug == "lc":
|
|
writeup = doc.latest_event(WriteupDocEvent, type="changed_last_call_text")
|
|
if writeup and writeup.text:
|
|
e.desc += "<br><br><b>The following Last Call Announcement was sent out:</b><br><br>"
|
|
e.desc += writeup.text.replace("\n", "<br><br>")
|
|
|
|
e.save()
|
|
return e
|
|
|
|
|
|
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|
log_state_changed = log_state_changedREDESIGN
|
|
|
|
|
|
def update_telechat(request, idinternal, new_telechat_date, new_returning_item=None):
|
|
on_agenda = bool(new_telechat_date)
|
|
|
|
if new_returning_item == None:
|
|
new_returning_item = idinternal.returning_item
|
|
|
|
returning_item_changed = False
|
|
if idinternal.returning_item != bool(new_returning_item):
|
|
idinternal.returning_item = bool(new_returning_item)
|
|
returning_item_changed = True
|
|
|
|
# auto-update returning item
|
|
if (not returning_item_changed and
|
|
on_agenda and idinternal.agenda
|
|
and new_telechat_date != idinternal.telechat_date):
|
|
idinternal.returning_item = True
|
|
|
|
# update agenda
|
|
doc = idinternal.document()
|
|
if bool(idinternal.agenda) != on_agenda:
|
|
if on_agenda:
|
|
add_document_comment(request, doc,
|
|
"Placed on agenda for telechat - %s" % new_telechat_date)
|
|
idinternal.telechat_date = new_telechat_date
|
|
else:
|
|
add_document_comment(request, doc,
|
|
"Removed from agenda for telechat")
|
|
idinternal.agenda = on_agenda
|
|
elif on_agenda and new_telechat_date != idinternal.telechat_date:
|
|
add_document_comment(request, doc,
|
|
"Telechat date has been changed to <b>%s</b> from <b>%s</b>" %
|
|
(new_telechat_date,
|
|
idinternal.telechat_date))
|
|
idinternal.telechat_date = new_telechat_date
|
|
|
|
def update_telechatREDESIGN(request, doc, by, new_telechat_date, new_returning_item=None):
|
|
from ietf.doc.models import TelechatDocEvent
|
|
|
|
on_agenda = bool(new_telechat_date)
|
|
|
|
prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
|
|
prev_returning = bool(prev and prev.returning_item)
|
|
prev_telechat = prev.telechat_date if prev else None
|
|
prev_agenda = bool(prev_telechat)
|
|
|
|
returning_item_changed = bool(new_returning_item != None and new_returning_item != prev_returning)
|
|
|
|
if new_returning_item == None:
|
|
returning = prev_returning
|
|
else:
|
|
returning = new_returning_item
|
|
|
|
if returning == prev_returning and new_telechat_date == prev_telechat:
|
|
# fully updated, nothing to do
|
|
return
|
|
|
|
# auto-update returning item
|
|
if (not returning_item_changed and on_agenda and prev_agenda
|
|
and new_telechat_date != prev_telechat):
|
|
returning = True
|
|
|
|
e = TelechatDocEvent()
|
|
e.type = "scheduled_for_telechat"
|
|
e.by = by
|
|
e.doc = doc
|
|
e.returning_item = returning
|
|
e.telechat_date = new_telechat_date
|
|
|
|
if on_agenda != prev_agenda:
|
|
if on_agenda:
|
|
e.desc = "Placed on agenda for telechat - %s" % (new_telechat_date)
|
|
else:
|
|
e.desc = "Removed from agenda for telechat"
|
|
elif on_agenda and new_telechat_date != prev_telechat:
|
|
e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % (
|
|
new_telechat_date, prev_telechat)
|
|
else:
|
|
# we didn't reschedule but flipped returning item bit - let's
|
|
# just explain that
|
|
if returning:
|
|
e.desc = "Added as returning item on telechat"
|
|
else:
|
|
e.desc = "Removed as returning item on telechat"
|
|
|
|
e.save()
|
|
|
|
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|
update_telechat = update_telechatREDESIGN
|