Merged [2412], [2413] and [2480] from rjsparks@nostrum.com, from log:sprint/78/rjs@2480. Splits the ballot writeups page into three pages, for a more understandable user interface.
- Legacy-Id: 2517 Note: SVN reference [2412] has been migrated to Git commit f87a9376b985814435b1e9b8bb5d73a45fd7292d Note: SVN reference [2413] has been migrated to Git commit 6835826cb3d5ad1e1558b828bd9d349d5feffa98 Note: SVN reference [2480] has been migrated to Git commit ec80763835dbaad0c68c3bdaee41fdeb92876897
This commit is contained in:
parent
02b8e54fa4
commit
28e0f982c5
|
@ -526,7 +526,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
|
||||
def test_edit_last_call_text(self):
|
||||
draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6")
|
||||
url = urlreverse('doc_ballot_writeups', kwargs=dict(name=draft.filename))
|
||||
url = urlreverse('doc_ballot_lastcall', kwargs=dict(name=draft.filename))
|
||||
login_testing_unauthorized(self, "klm", url)
|
||||
|
||||
# normal get
|
||||
|
@ -563,7 +563,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
|
||||
def test_request_last_call(self):
|
||||
draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6")
|
||||
url = urlreverse('doc_ballot_writeups', kwargs=dict(name=draft.filename))
|
||||
url = urlreverse('doc_ballot_lastcall', kwargs=dict(name=draft.filename))
|
||||
login_testing_unauthorized(self, "klm", url)
|
||||
|
||||
mailbox_before = len(mail_outbox)
|
||||
|
@ -580,7 +580,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
|
||||
def test_edit_ballot_writeup(self):
|
||||
draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6")
|
||||
url = urlreverse('doc_ballot_writeups', kwargs=dict(name=draft.filename))
|
||||
url = urlreverse('doc_ballot_writeupnotes', kwargs=dict(name=draft.filename))
|
||||
login_testing_unauthorized(self, "klm", url)
|
||||
|
||||
# normal get
|
||||
|
@ -600,7 +600,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
|
||||
def test_issue_ballot(self):
|
||||
draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6")
|
||||
url = urlreverse('doc_ballot_writeups', kwargs=dict(name=draft.filename))
|
||||
url = urlreverse('doc_ballot_writeupnotes', kwargs=dict(name=draft.filename))
|
||||
login_testing_unauthorized(self, "rhousley", url)
|
||||
|
||||
draft.idinternal.ballot.ballot_issued = False
|
||||
|
@ -635,7 +635,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
|
||||
def test_edit_approval_text(self):
|
||||
draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6")
|
||||
url = urlreverse('doc_ballot_writeups', kwargs=dict(name=draft.filename))
|
||||
url = urlreverse('doc_ballot_approvaltext', kwargs=dict(name=draft.filename))
|
||||
login_testing_unauthorized(self, "klm", url)
|
||||
|
||||
# normal get
|
||||
|
|
|
@ -55,7 +55,9 @@ urlpatterns = patterns('',
|
|||
url(r'^(?P<name>[^/]+)/edit/deferballot/$', views_ballot.defer_ballot, name='doc_defer_ballot'),
|
||||
url(r'^(?P<name>[^/]+)/edit/undeferballot/$', views_ballot.undefer_ballot, name='doc_undefer_ballot'),
|
||||
url(r'^(?P<name>[^/]+)/edit/sendballotcomment/$', views_ballot.send_ballot_comment, name='doc_send_ballot_comment'),
|
||||
url(r'^(?P<name>[^/]+)/edit/ballotwriteups/$', views_ballot.ballot_writeups, name='doc_ballot_writeups'),
|
||||
url(r'^(?P<name>[^/]+)/edit/lastcalltext/$', views_ballot.lastcalltext, name='doc_ballot_lastcall'),
|
||||
url(r'^(?P<name>[^/]+)/edit/ballotwriteupnotes/$', views_ballot.ballot_writeupnotes, name='doc_ballot_writeupnotes'),
|
||||
url(r'^(?P<name>[^/]+)/edit/approvaltext/$', views_ballot.ballot_approvaltext, name='doc_ballot_approvaltext'),
|
||||
url(r'^(?P<name>[^/]+)/edit/approveballot/$', views_ballot.approve_ballot, name='doc_approve_ballot'),
|
||||
url(r'^(?P<name>[^/]+)/edit/makelastcall/$', views_ballot.make_last_call, name='doc_make_last_call'),
|
||||
)
|
||||
|
|
|
@ -311,8 +311,8 @@ class ApprovalTextForm(forms.ModelForm):
|
|||
return self.cleaned_data["approval_text"].replace("\r", "")
|
||||
|
||||
@group_required('Area_Director','Secretariat')
|
||||
def ballot_writeups(request, name):
|
||||
"""Editing of ballot write-ups, sending last calls, ..."""
|
||||
def lastcalltext(request, name):
|
||||
"""Editing of the last call text"""
|
||||
doc = get_object_or_404(InternetDraft, filename=name)
|
||||
if not doc.idinternal:
|
||||
raise Http404()
|
||||
|
@ -325,8 +325,6 @@ def ballot_writeups(request, name):
|
|||
ballot = generate_ballot(request, doc)
|
||||
|
||||
last_call_form = LastCallTextForm(instance=ballot)
|
||||
ballot_writeup_form = BallotWriteupForm(instance=ballot)
|
||||
approval_text_form = ApprovalTextForm(instance=ballot)
|
||||
|
||||
if request.method == 'POST':
|
||||
if "save_last_call_text" in request.POST or "send_last_call_request" in request.POST:
|
||||
|
@ -356,6 +354,43 @@ def ballot_writeups(request, name):
|
|||
# make sure form has the updated text
|
||||
last_call_form = LastCallTextForm(instance=ballot)
|
||||
|
||||
doc.idinternal.event_date = date.today()
|
||||
doc.idinternal.save()
|
||||
|
||||
can_request_last_call = doc.idinternal.cur_state_id < 27
|
||||
can_make_last_call = doc.idinternal.cur_state_id < 20
|
||||
can_announce = doc.idinternal.cur_state_id > 19
|
||||
docs_with_invalid_status = [d.document().file_tag() for d in doc.idinternal.ballot_set() if "None" in d.document().intended_status.intended_status or "Request" in d.document().intended_status.intended_status]
|
||||
need_intended_status = ", ".join(docs_with_invalid_status)
|
||||
|
||||
return render_to_response('idrfc/ballot_lastcalltext.html',
|
||||
dict(doc=doc,
|
||||
ballot=ballot,
|
||||
last_call_form=last_call_form,
|
||||
can_request_last_call=can_request_last_call,
|
||||
can_make_last_call=can_make_last_call,
|
||||
need_intended_status=need_intended_status,
|
||||
),
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
@group_required('Area_Director','Secretariat')
|
||||
def ballot_writeupnotes(request, name):
|
||||
"""Editing of ballot write-up and notes"""
|
||||
doc = get_object_or_404(InternetDraft, filename=name)
|
||||
if not doc.idinternal:
|
||||
raise Http404()
|
||||
|
||||
login = IESGLogin.objects.get(login_name=request.user.username)
|
||||
|
||||
try:
|
||||
ballot = doc.idinternal.ballot
|
||||
except BallotInfo.DoesNotExist:
|
||||
ballot = generate_ballot(request, doc)
|
||||
|
||||
ballot_writeup_form = BallotWriteupForm(instance=ballot)
|
||||
|
||||
if request.method == 'POST':
|
||||
|
||||
if "save_ballot_writeup" in request.POST:
|
||||
ballot_writeup_form = BallotWriteupForm(request.POST, instance=ballot)
|
||||
if ballot_writeup_form.is_valid():
|
||||
|
@ -398,6 +433,38 @@ def ballot_writeups(request, name):
|
|||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
doc.idinternal.event_date = date.today()
|
||||
doc.idinternal.save()
|
||||
|
||||
docs_with_invalid_status = [d.document().file_tag() for d in doc.idinternal.ballot_set() if "None" in d.document().intended_status.intended_status or "Request" in d.document().intended_status.intended_status]
|
||||
need_intended_status = ", ".join(docs_with_invalid_status)
|
||||
|
||||
return render_to_response('idrfc/ballot_writeupnotes.html',
|
||||
dict(doc=doc,
|
||||
ballot=ballot,
|
||||
ballot_writeup_form=ballot_writeup_form,
|
||||
need_intended_status=need_intended_status,
|
||||
),
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
@group_required('Area_Director','Secretariat')
|
||||
def ballot_approvaltext(request, name):
|
||||
"""Editing of approval text"""
|
||||
doc = get_object_or_404(InternetDraft, filename=name)
|
||||
if not doc.idinternal:
|
||||
raise Http404()
|
||||
|
||||
login = IESGLogin.objects.get(login_name=request.user.username)
|
||||
|
||||
try:
|
||||
ballot = doc.idinternal.ballot
|
||||
except BallotInfo.DoesNotExist:
|
||||
ballot = generate_ballot(request, doc)
|
||||
|
||||
approval_text_form = ApprovalTextForm(instance=ballot)
|
||||
|
||||
if request.method == 'POST':
|
||||
|
||||
if "save_approval_text" in request.POST:
|
||||
approval_text_form = ApprovalTextForm(request.POST, instance=ballot)
|
||||
if approval_text_form.is_valid():
|
||||
|
@ -414,20 +481,14 @@ def ballot_writeups(request, name):
|
|||
doc.idinternal.event_date = date.today()
|
||||
doc.idinternal.save()
|
||||
|
||||
can_request_last_call = doc.idinternal.cur_state_id < 27
|
||||
can_make_last_call = doc.idinternal.cur_state_id < 20
|
||||
can_announce = doc.idinternal.cur_state_id > 19
|
||||
docs_with_invalid_status = [d.document().file_tag() for d in doc.idinternal.ballot_set() if "None" in d.document().intended_status.intended_status or "Request" in d.document().intended_status.intended_status]
|
||||
need_intended_status = ", ".join(docs_with_invalid_status)
|
||||
|
||||
return render_to_response('idrfc/ballot_writeups.html',
|
||||
return render_to_response('idrfc/ballot_approvaltext.html',
|
||||
dict(doc=doc,
|
||||
ballot=ballot,
|
||||
last_call_form=last_call_form,
|
||||
ballot_writeup_form=ballot_writeup_form,
|
||||
approval_text_form=approval_text_form,
|
||||
can_request_last_call=can_request_last_call,
|
||||
can_make_last_call=can_make_last_call,
|
||||
can_announce=can_announce,
|
||||
need_intended_status=need_intended_status,
|
||||
),
|
||||
|
|
36
ietf/templates/idrfc/ballot_approvaltext.html
Normal file
36
ietf/templates/idrfc/ballot_approvaltext.html
Normal file
|
@ -0,0 +1,36 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Approval announcement writeup for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_approval_text {
|
||||
width: 700px;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Approval announcement writeup for {{ doc }}</h1>
|
||||
|
||||
<form action="" method="POST">
|
||||
|
||||
<p>Sent after approval.</p>
|
||||
|
||||
{{ approval_text_form.approval_text }}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ doc.idinternal.get_absolute_url }}">Back</a>
|
||||
<input type="submit" name="save_approval_text" value="Save Approval Announcement Text" />
|
||||
<input type="submit" name="regenerate_approval_text" value="Regenerate Approval Announcement Text" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% load ietf_filters %}
|
||||
{% if user|in_group:"Secretariat" %}
|
||||
<p>
|
||||
{% if can_announce %}
|
||||
<a href="{% url doc_approve_ballot name=doc.filename %}">Approve ballot</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endblock%}
|
46
ietf/templates/idrfc/ballot_lastcalltext.html
Normal file
46
ietf/templates/idrfc/ballot_lastcalltext.html
Normal file
|
@ -0,0 +1,46 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Last Call text for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_last_call_text {
|
||||
width: 700px;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Last Call text for {{ doc }}</h1>
|
||||
|
||||
<form action="" method="POST">
|
||||
|
||||
<p>{{ last_call_form.last_call_text.errors }}</p>
|
||||
|
||||
{{ last_call_form.last_call_text }}
|
||||
|
||||
<p>{{ last_call_form.last_call_text.errors }}</p>
|
||||
|
||||
{% if can_request_last_call and need_intended_status %}
|
||||
<p>You need to select intended status of {{ need_intended_status }} and regenerate last call text to request last call.</p>
|
||||
{% endif %}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ doc.idinternal.get_absolute_url }}">Back</a>
|
||||
<input type="submit" name="save_last_call_text" value="Save Last Call Text" />
|
||||
<input type="submit" name="regenerate_last_call_text" value="Regenerate Last Call Text" />
|
||||
{% if can_request_last_call and not need_intended_status %}
|
||||
<input style="margin-left: 8px" type="submit" name="send_last_call_request" value="Save and Request Last Call" />
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% load ietf_filters %}
|
||||
{% if user|in_group:"Secretariat" %}
|
||||
<p>
|
||||
{% if can_make_last_call %}
|
||||
<a href="{% url doc_make_last_call name=doc.filename %}">Make Last Call</a>
|
||||
{% endif %}
|
||||
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endblock%}
|
34
ietf/templates/idrfc/ballot_writeupnotes.html
Normal file
34
ietf/templates/idrfc/ballot_writeupnotes.html
Normal file
|
@ -0,0 +1,34 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Ballot writeup and notes for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_ballot_writeup {
|
||||
width: 700px;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Ballot writeup and notes for {{ doc }}</h1>
|
||||
|
||||
|
||||
<form action="" method="POST">
|
||||
|
||||
<p>(Technical Summary, Working Group Summary, Document Quality,
|
||||
Personnel, RFC Editor Note, IRTF Note, IESG Note, IANA Note)</p>
|
||||
|
||||
<p>This text will be appended to all announcements and messages to
|
||||
the IRTF or RFC Editor.</p>
|
||||
|
||||
{{ ballot_writeup_form.ballot_writeup }}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ doc.idinternal.get_absolute_url }}">Back</a>
|
||||
<input type="submit" name="save_ballot_writeup" value="Save Ballot Writeup" />
|
||||
<input style="margin-left: 8px" type="submit" name="issue_ballot" value="Save and {% if ballot.ballot_issued %}Re-{% endif %}Issue Ballot" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
{% endblock%}
|
|
@ -95,9 +95,6 @@ div.diffTool { padding: 8px 4px; margin: 8px 0;}
|
|||
<span id="doc_edit_state_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_change_state name=doc.draft_name %}">Change state</a></span></span>
|
||||
|
||||
<span id="doc_edit_info_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_edit_info name=doc.draft_name %}">Edit</a></span></span>
|
||||
{% if not doc.ietf_process_has_iesg_ballot %}
|
||||
<span id="doc_edit_info_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_ballot_writeups name=doc.draft_name %}">Ballot Writeups</a></span></span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<span id="doc_add_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_edit_info name=doc.draft_name %}">Add</a></span></span>
|
||||
{% endif %}
|
||||
|
@ -133,20 +130,39 @@ div.diffTool { padding: 8px 4px; margin: 8px 0;}
|
|||
|
||||
<div id="writeup">
|
||||
<div id="writeup_content">
|
||||
---- following is a DRAFT of message to be sent AFTER approval ---
|
||||
{% if doc.in_ietf_process and doc.ietf_process.has_iesg_ballot %}
|
||||
{% if user|in_group:"Area_Director,Secretariat" %}
|
||||
<div style="margin-bottom:8px;">
|
||||
<span id="doc_writeup_edit_button" class="yui-button yui-link-button"><span class="first-child">
|
||||
<a href="{% url doc_ballot_writeups name=doc.draft_name %}">Ballot write-ups</a>
|
||||
</span></span></div>
|
||||
{% endif %}{# user in_group #}
|
||||
---- following is a DRAFT of message to be sent AFTER approval ---
|
||||
<div style="background:#E0E0FF">
|
||||
<p align=right>
|
||||
<span id="doc_edit_announce_button" class="yui-button yui-link-button"><span class="first-child">
|
||||
<a href="{% url doc_ballot_approvaltext name=doc.draft_name %}">Edit Announcement Text</a>
|
||||
</span></span>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<pre>
|
||||
{{ doc.ietf_process.iesg_ballot.approval_text|escape|urlize }}
|
||||
</pre>
|
||||
{% if doc.in_ietf_process and doc.ietf_process.has_iesg_ballot %}
|
||||
{% if user|in_group:"Area_Director,Secretariat" %}
|
||||
</div>
|
||||
|
||||
<div style="background:#E0E0FF">
|
||||
<p align=right>
|
||||
<span id="doc_ballot_edit_button" class="yui-button yui-link-button"><span class="first-child">
|
||||
<a href="{% url doc_ballot_writeupnotes name=doc.draft_name %}">Edit Ballot Text</a>
|
||||
</span></span>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<pre>
|
||||
{{ doc.ietf_process.iesg_ballot.ballot_writeup|escape|urlize }}
|
||||
</pre>
|
||||
{% if doc.in_ietf_process and doc.ietf_process.has_iesg_ballot %}
|
||||
{% if user|in_group:"Area_Director,Secretariat" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -76,11 +76,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
{% endblock doc_metatable %}
|
||||
|
||||
{% block doc_metalinks %}
|
||||
<a href="mailto:{{doc.draft_name}}@tools.ietf.org?subject=Mail%20regarding%20{{doc.draft_name}}" rel="nofollow">Email Authors</a>
|
||||
<div>
|
||||
<a href="mailto:{{doc.draft_name}}@tools.ietf.org?subject=Mail%20regarding%20{{doc.draft_name}}" rel="nofollow">Email Authors</a>
|
||||
| <a href="/ipr/search/?option=document_search&id_document_tag={{doc.tracker_id}}" rel="nofollow">IPR Disclosures</a>
|
||||
| <a href="http://www.fenron.net/~fenner/ietf/deps/index.cgi?dep={{doc.draft_name}}" rel="nofollow">Dependencies to this draft</a>
|
||||
| <a href="http://tools.ietf.org/idnits?url=http://tools.ietf.org/id/{{doc.draft_name_and_revision}}.txt" rel="nofollow" target="_blank">Check nits</a>
|
||||
{% if doc.in_ietf_process %}| <a href="/feed/comments/{% if info.is_rfc %}rfc{{doc.rfc_number}}{% else %}{{doc.draft_name}}{% endif %}/">Comments feed</a>{% endif %}
|
||||
</div>
|
||||
{% if user|in_group:"Area_Director,Secretariat" %}
|
||||
<div>
|
||||
<a href="{% url doc_ballot_lastcall name=doc.draft_name %}">Last Call Text</a>
|
||||
| <a href="{% url doc_ballot_writeupnotes name=doc.draft_name %}">Ballot Text</a>
|
||||
| <a href="{% url doc_ballot_approvaltext name=doc.draft_name %}">Announcement Text</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block doc_text1 %}
|
||||
|
|
Loading…
Reference in a new issue