Merged in [15114] from rjsparks@nostrum.com:
Restored a test that was unintentionally removed. Removed unused templates. Related to #2513. Merged in [15113] from rjsparks@nostrum.com: Removed the already disabled \'Make RFC\' functionality from /secr/drafts. Fixes #2513. Merged in [15112] from rjsparks@nostrum.com: Removed the \'announce\' functionality from /secr/drafts. Addresses part of #2513. - Legacy-Id: 15121 Note: SVN reference [15112] has been migrated to Git commit82681b28dd
Note: SVN reference [15113] has been migrated to Git commit7d2ac8306e
Note: SVN reference [15114] has been migrated to Git commitf64bf957f3
This commit is contained in:
commit
b768c59069
|
@ -1,7 +1,6 @@
|
||||||
import datetime
|
import datetime
|
||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
import time
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
@ -173,13 +172,11 @@ def get_fullcc_list(draft):
|
||||||
def get_email_initial(draft, action=None, input=None):
|
def get_email_initial(draft, action=None, input=None):
|
||||||
"""
|
"""
|
||||||
Takes a draft object, a string representing the email type:
|
Takes a draft object, a string representing the email type:
|
||||||
(extend,new,replace,resurrect,revision,update,withdraw) and
|
(extend,resurrect,revision,update,withdraw) and
|
||||||
a dictonary of the action form input data (for use with replace, update, extend).
|
a dictonary of the action form input data (for use with update, extend).
|
||||||
Returns a dictionary containing initial field values for a email notification.
|
Returns a dictionary containing initial field values for a email notification.
|
||||||
The dictionary consists of to, cc, subject, body.
|
The dictionary consists of to, cc, subject, body.
|
||||||
|
|
||||||
NOTE: for type=new we are listing all authors in the message body to match legacy app.
|
|
||||||
It appears datatracker abbreviates the list with "et al".
|
|
||||||
"""
|
"""
|
||||||
expiration_date = (datetime.date.today() + datetime.timedelta(185)).strftime('%B %d, %Y')
|
expiration_date = (datetime.date.today() + datetime.timedelta(185)).strftime('%B %d, %Y')
|
||||||
new_revision = str(int(draft.rev)+1).zfill(2)
|
new_revision = str(int(draft.rev)+1).zfill(2)
|
||||||
|
@ -196,33 +193,6 @@ def get_email_initial(draft, action=None, input=None):
|
||||||
data['body'] = render_to_string('drafts/message_extend.txt', context)
|
data['body'] = render_to_string('drafts/message_extend.txt', context)
|
||||||
data['expiration_date'] = input['expiration_date']
|
data['expiration_date'] = input['expiration_date']
|
||||||
|
|
||||||
elif action == 'new':
|
|
||||||
# if the ID belongs to a group other than "none" add line to message body
|
|
||||||
if draft.group.type.slug == 'wg':
|
|
||||||
wg_message = 'This draft is a work item of the %s Working Group of the IETF.' % draft.group.name
|
|
||||||
else:
|
|
||||||
wg_message = ''
|
|
||||||
context = {'wg_message':wg_message,
|
|
||||||
'draft':draft,
|
|
||||||
'authors':get_abbr_authors(draft),
|
|
||||||
'revision_date':draft.latest_event(type='new_revision').time.date(),
|
|
||||||
'timestamp':time.strftime("%Y-%m-%d%H%M%S", time.localtime())}
|
|
||||||
data['to'] = 'i-d-announce@ietf.org'
|
|
||||||
data['cc'] = draft.group.list_email
|
|
||||||
data['subject'] = 'I-D Action: %s' % (curr_filename)
|
|
||||||
data['body'] = render_to_string('drafts/message_new.txt', context)
|
|
||||||
|
|
||||||
elif action == 'replace':
|
|
||||||
'''
|
|
||||||
input['replaced'] is a DocAlias
|
|
||||||
input['replaced_by'] is a Document
|
|
||||||
'''
|
|
||||||
context = {'doc':input['replaced'],'replaced_by':input['replaced_by']}
|
|
||||||
data['subject'] = 'Replacement of %s with %s' % (input['replaced'],input['replaced_by'])
|
|
||||||
data['body'] = render_to_string('drafts/message_replace.txt', context)
|
|
||||||
data['replaced'] = input['replaced']
|
|
||||||
data['replaced_by'] = input['replaced_by']
|
|
||||||
|
|
||||||
elif action == 'resurrect':
|
elif action == 'resurrect':
|
||||||
last_revision = get_last_revision(draft.name)
|
last_revision = get_last_revision(draft.name)
|
||||||
last_filename = draft.name + '-' + last_revision + '.txt'
|
last_filename = draft.name + '-' + last_revision + '.txt'
|
||||||
|
|
|
@ -74,23 +74,16 @@ class SecrDraftsTestCase(TestCase):
|
||||||
response = self.client.post(url,post)
|
response = self.client.post(url,post)
|
||||||
self.assertEqual(response.status_code, 302)
|
self.assertEqual(response.status_code, 302)
|
||||||
|
|
||||||
def test_announce(self):
|
def test_approvals(self):
|
||||||
draft = make_test_data()
|
make_test_data()
|
||||||
url = urlreverse('ietf.secr.drafts.views.announce', kwargs={'id':draft.name})
|
Preapproval.objects.create(name='draft-dummy',
|
||||||
self.client.login(username="secretary", password="secretary+password")
|
by=Person.objects.get(name="(System)"))
|
||||||
response = self.client.get(url)
|
url = urlreverse('ietf.secr.drafts.views.approvals')
|
||||||
self.assertEqual(response.status_code, 302)
|
self.client.login(username="secretary", password="secretary+password")
|
||||||
|
response = self.client.get(url)
|
||||||
def test_approvals(self):
|
self.assertEqual(response.status_code, 200)
|
||||||
make_test_data()
|
self.assertTrue('draft-dummy' in response.content)
|
||||||
Preapproval.objects.create(name='draft-dummy',
|
|
||||||
by=Person.objects.get(name="(System)"))
|
|
||||||
url = urlreverse('ietf.secr.drafts.views.approvals')
|
|
||||||
self.client.login(username="secretary", password="secretary+password")
|
|
||||||
response = self.client.get(url)
|
|
||||||
self.assertEqual(response.status_code, 200)
|
|
||||||
self.assertTrue('draft-dummy' in response.content)
|
|
||||||
|
|
||||||
def test_edit(self):
|
def test_edit(self):
|
||||||
draft = make_test_data()
|
draft = make_test_data()
|
||||||
url = urlreverse('ietf.secr.drafts.views.edit', kwargs={'id':draft.name})
|
url = urlreverse('ietf.secr.drafts.views.edit', kwargs={'id':draft.name})
|
||||||
|
|
|
@ -10,7 +10,6 @@ urlpatterns = [
|
||||||
url(r'^nudge-report/$', views.nudge_report),
|
url(r'^nudge-report/$', views.nudge_report),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/$', views.view),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/$', views.view),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/abstract/$', views.abstract),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/abstract/$', views.abstract),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/announce/$', views.announce),
|
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/authors/$', views.authors),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/authors/$', views.authors),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/author_delete/(?P<oid>\d{1,6})$', views.author_delete),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/author_delete/(?P<oid>\d{1,6})$', views.author_delete),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/confirm/$', views.confirm),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/confirm/$', views.confirm),
|
||||||
|
@ -18,7 +17,6 @@ urlpatterns = [
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/edit/$', views.edit),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/edit/$', views.edit),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/extend/$', views.extend),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/extend/$', views.extend),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/email/$', views.email),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/email/$', views.email),
|
||||||
# url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/makerfc/$', views.makerfc), # Not used any more
|
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/revision/$', views.revision),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/revision/$', views.revision),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/update/$', views.update),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/update/$', views.update),
|
||||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/withdraw/$', views.withdraw),
|
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/withdraw/$', views.withdraw),
|
||||||
|
|
|
@ -480,31 +480,6 @@ def add(request):
|
||||||
'upload_form': upload_form},
|
'upload_form': upload_form},
|
||||||
)
|
)
|
||||||
|
|
||||||
@role_required('Secretariat')
|
|
||||||
def announce(request, id):
|
|
||||||
'''
|
|
||||||
Schedule announcement of new Internet-Draft to I-D Announce list
|
|
||||||
|
|
||||||
**Templates:**
|
|
||||||
|
|
||||||
* none
|
|
||||||
|
|
||||||
**Template Variables:**
|
|
||||||
|
|
||||||
* none
|
|
||||||
'''
|
|
||||||
draft = get_object_or_404(Document, name=id)
|
|
||||||
|
|
||||||
email_form = EmailForm(get_email_initial(draft,action='new'))
|
|
||||||
|
|
||||||
announcement_from_form(email_form.data,
|
|
||||||
by=request.user.person,
|
|
||||||
from_val='Internet-Drafts@ietf.org',
|
|
||||||
content_type='Multipart/Mixed; Boundary="NextPart"')
|
|
||||||
|
|
||||||
messages.success(request, 'Announcement scheduled successfully!')
|
|
||||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
|
||||||
|
|
||||||
@role_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
def approvals(request):
|
def approvals(request):
|
||||||
'''
|
'''
|
||||||
|
@ -771,85 +746,6 @@ def extend(request, id):
|
||||||
'draft': draft},
|
'draft': draft},
|
||||||
)
|
)
|
||||||
|
|
||||||
# @role_required('Secretariat')
|
|
||||||
# def makerfc(request, id):
|
|
||||||
# '''
|
|
||||||
# Make RFC out of Internet Draft
|
|
||||||
#
|
|
||||||
# **Templates:**
|
|
||||||
#
|
|
||||||
# * ``drafts/makerfc.html``
|
|
||||||
#
|
|
||||||
# **Template Variables:**
|
|
||||||
#
|
|
||||||
# * draft
|
|
||||||
# '''
|
|
||||||
# from ietf.utils import log
|
|
||||||
# log.unreachable("2017-07-08")
|
|
||||||
#
|
|
||||||
# draft = get_object_or_404(Document, name=id)
|
|
||||||
#
|
|
||||||
# # raise error if draft intended standard is empty
|
|
||||||
# if not draft.intended_std_level:
|
|
||||||
# messages.error(request, 'ERROR: intended RFC status is not set')
|
|
||||||
# return redirect('ietf.secr.drafts.views.view', id=id)
|
|
||||||
#
|
|
||||||
# ObsFormset = formset_factory(RfcObsoletesForm, extra=15, max_num=15)
|
|
||||||
# if request.method == 'POST':
|
|
||||||
# button_text = request.POST.get('submit', '')
|
|
||||||
# if button_text == 'Cancel':
|
|
||||||
# return redirect('ietf.secr.drafts.views.view', id=id)
|
|
||||||
#
|
|
||||||
# form = RfcModelForm(request.POST, instance=draft)
|
|
||||||
# obs_formset = ObsFormset(request.POST, prefix='obs')
|
|
||||||
# if form.is_valid() and obs_formset.is_valid():
|
|
||||||
#
|
|
||||||
# # TODO
|
|
||||||
# archive_draft_files(draft.name + '-' + draft.rev)
|
|
||||||
#
|
|
||||||
# rfc = form.save(commit=False)
|
|
||||||
#
|
|
||||||
# # create DocEvent
|
|
||||||
# e = DocEvent.objects.create(type='published_rfc',
|
|
||||||
# by=request.user.person,
|
|
||||||
# doc=rfc,
|
|
||||||
# rev=draft.rev,
|
|
||||||
# desc="Published RFC")
|
|
||||||
#
|
|
||||||
# # change state
|
|
||||||
# draft.set_state(State.objects.get(type="draft", slug="rfc"))
|
|
||||||
#
|
|
||||||
# # handle rfc_obsoletes formset
|
|
||||||
# # NOTE: because we are just adding RFCs in this form we don't need to worry
|
|
||||||
# # about the previous state of the obs forms
|
|
||||||
# for obs_form in obs_formset.forms:
|
|
||||||
# if obs_form.has_changed():
|
|
||||||
# rfc_acted_on = obs_form.cleaned_data.get('rfc','')
|
|
||||||
# target = DocAlias.objects.get(name="rfc%s" % rfc_acted_on)
|
|
||||||
# relation = obs_form.cleaned_data.get('relation','')
|
|
||||||
# if rfc and relation:
|
|
||||||
# # form validation ensures the rfc_acted_on exists, can safely use get
|
|
||||||
# RelatedDocument.objects.create(source=draft,
|
|
||||||
# target=target,
|
|
||||||
# relationship=DocRelationshipName.objects.get(slug=relation))
|
|
||||||
#
|
|
||||||
# rfc.save_with_history([e])
|
|
||||||
#
|
|
||||||
# messages.success(request, 'RFC created successfully!')
|
|
||||||
# return redirect('ietf.secr.drafts.views.view', id=id)
|
|
||||||
# else:
|
|
||||||
# # assert False, (form.errors, obs_formset.errors)
|
|
||||||
# pass
|
|
||||||
# else:
|
|
||||||
# form = RfcModelForm(instance=draft)
|
|
||||||
# obs_formset = ObsFormset(prefix='obs')
|
|
||||||
#
|
|
||||||
# return render(request, 'drafts/makerfc.html', {
|
|
||||||
# 'form': form,
|
|
||||||
# 'obs_formset': obs_formset,
|
|
||||||
# 'draft': draft},
|
|
||||||
# )
|
|
||||||
|
|
||||||
@role_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
def nudge_report(request):
|
def nudge_report(request):
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
--NextPart
|
|
||||||
|
|
||||||
A new Internet-Draft is available from the on-line Internet-Drafts directories.
|
|
||||||
{{ wg_message }}
|
|
||||||
|
|
||||||
Title : {{ draft.title }}
|
|
||||||
Author(s) : {{ authors }}
|
|
||||||
Filename : {{ draft.name }}
|
|
||||||
Pages : {{ draft.pages }}
|
|
||||||
Date : {{ revision_date }}
|
|
||||||
|
|
||||||
{% autoescape off %}
|
|
||||||
{{ draft.abstract }}
|
|
||||||
{% endautoescape %}
|
|
||||||
|
|
||||||
A URL for this Internet-Draft is:
|
|
||||||
https://www.ietf.org/internet-drafts/{{ draft.filename_with_rev }}
|
|
||||||
|
|
||||||
Internet-Drafts are also available by anonymous FTP at:
|
|
||||||
ftp://ftp.ietf.org/internet-drafts/
|
|
||||||
|
|
||||||
Below is the data which will enable a MIME compliant mail reader
|
|
||||||
implementation to automatically retrieve the ASCII version of the
|
|
||||||
Internet-Draft.
|
|
||||||
|
|
||||||
--NextPart
|
|
||||||
Content-Type: Message/External-body;
|
|
||||||
name="{{ draft.name }}";
|
|
||||||
site="ftp.ietf.org";
|
|
||||||
access-type="anon-ftp";
|
|
||||||
directory="internet-drafts"
|
|
||||||
|
|
||||||
Content-Type: text/plain
|
|
||||||
Content-ID: <{{ timestamp }}.I-D@ietf.org>
|
|
||||||
|
|
||||||
--NextPart--
|
|
|
@ -1,4 +0,0 @@
|
||||||
As you requested, {{ doc }} has been marked as replaced by
|
|
||||||
{{ replaced_by }} in the IETF Internet-Drafts database.
|
|
||||||
|
|
||||||
IETF Secretariat.
|
|
|
@ -85,8 +85,6 @@
|
||||||
<li><button {% if is_expired or is_withdrawn %}{% else %}disabled="disabled"{% endif %}onclick="window.location='{% url "ietf.secr.drafts.views.email" id=draft.name %}?action=resurrect'">Resurrect</button></li>
|
<li><button {% if is_expired or is_withdrawn %}{% else %}disabled="disabled"{% endif %}onclick="window.location='{% url "ietf.secr.drafts.views.email" id=draft.name %}?action=resurrect'">Resurrect</button></li>
|
||||||
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='extend/'">Extend Expiry</button></li>
|
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='extend/'">Extend Expiry</button></li>
|
||||||
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='withdraw/'">Withdraw</button></li>
|
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='withdraw/'">Withdraw</button></li>
|
||||||
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='announce/'">Announcement</button></li>
|
|
||||||
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='makerfc/'">Make RFC</button></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div> <!-- inline-related -->
|
</div> <!-- inline-related -->
|
||||||
</div> <!-- draft-view-col2 -->
|
</div> <!-- draft-view-col2 -->
|
||||||
|
|
Binary file not shown.
Loading…
Reference in a new issue