Skip to content

Commit c3241bd

Browse files
committed
Removed the "replaces" functionality from /secr/drafts. Addresses part of ietf-tools#2513. Commit ready for merge.
- Legacy-Id: 15111
1 parent 8436078 commit c3241bd

5 files changed

Lines changed: 3 additions & 132 deletions

File tree

ietf/secr/drafts/forms.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from django import forms
66

7-
from ietf.doc.models import Document, DocAlias, State
7+
from ietf.doc.models import Document, State
88
from ietf.name.models import IntendedStdLevelName
99
from ietf.group.models import Group
1010
from ietf.person.models import Person, Email
@@ -239,26 +239,6 @@ class ExtendForm(forms.Form):
239239
action = forms.CharField(max_length=255, widget=forms.HiddenInput(),initial='extend')
240240
expiration_date = forms.DateField()
241241

242-
class ReplaceForm(forms.Form):
243-
replaced = AliasModelChoiceField(DocAlias.objects.none(),empty_label=None,help_text='This document may have more than one alias. Be sure to select the correct alias to replace.')
244-
replaced_by = forms.CharField(max_length=100,help_text='Enter the filename of the Draft which replaces this one.')
245-
246-
def __init__(self, *args, **kwargs):
247-
self.draft = kwargs.pop('draft')
248-
super(ReplaceForm, self).__init__(*args, **kwargs)
249-
self.fields['replaced'].queryset = DocAlias.objects.filter(document=self.draft)
250-
251-
# field must contain filename of existing draft
252-
def clean_replaced_by(self):
253-
name = self.cleaned_data.get('replaced_by', '')
254-
try:
255-
doc = Document.objects.get(name=name)
256-
except Document.DoesNotExist:
257-
raise forms.ValidationError("ERROR: Draft does not exist: %s" % name)
258-
if name == self.draft.name:
259-
raise forms.ValidationError("ERROR: A draft can't replace itself")
260-
return doc
261-
262242
class BaseRevisionModelForm(forms.ModelForm):
263243
class Meta:
264244
model = Document

ietf/secr/drafts/tests_views.py

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -331,40 +331,6 @@ def test_withdraw(self):
331331
draft = Document.objects.get(name=draft.name)
332332
self.assertTrue(draft.get_state_slug('draft') == 'ietf-rm')
333333

334-
def test_replace(self):
335-
draft = make_test_data()
336-
other_draft = Document.objects.filter(type='draft').exclude(name=draft.name).first()
337-
url = urlreverse('ietf.secr.drafts.views.replace', kwargs={'id':draft.name})
338-
email_url = urlreverse('ietf.secr.drafts.views.email', kwargs={'id':draft.name})
339-
confirm_url = urlreverse('ietf.secr.drafts.views.confirm', kwargs={'id':draft.name})
340-
do_action_url = urlreverse('ietf.secr.drafts.views.do_action', kwargs={'id':draft.name})
341-
view_url = urlreverse('ietf.secr.drafts.views.view', kwargs={'id':draft.name})
342-
self.client.login(username="secretary", password="secretary+password")
343-
response = self.client.get(url)
344-
self.assertEqual(response.status_code, 200)
345-
get_data = {
346-
'action': 'replace',
347-
'replaced': draft.name,
348-
'replaced_by': other_draft.name,
349-
}
350-
post_data = {
351-
'action': 'replace',
352-
'replaced': draft.name,
353-
'replaced_by': other_draft.name,
354-
'to': 'john@example.com',
355-
'cc': 'joe@example.com',
356-
'subject': 'test',
357-
'body': 'draft resurrected',
358-
'submit': 'Save'
359-
}
360-
response = self.client.get(email_url + '?' + urlencode(get_data))
361-
self.assertEqual(response.status_code, 200)
362-
response = self.client.post(confirm_url, post_data)
363-
response = self.client.post(do_action_url, post_data)
364-
self.assertRedirects(response, view_url)
365-
draft = Document.objects.get(name=draft.name)
366-
self.assertTrue(draft.get_state_slug('draft') == 'repl')
367-
368334
def test_authors(self):
369335
draft = DocumentFactory()
370336
person = PersonFactory()

ietf/secr/drafts/urls.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/extend/$', views.extend),
2020
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/email/$', views.email),
2121
# url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/makerfc/$', views.makerfc), # Not used any more
22-
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/replace/$', views.replace),
2322
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/revision/$', views.revision),
2423
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/update/$', views.update),
2524
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/withdraw/$', views.withdraw),

ietf/secr/drafts/views.py

Lines changed: 2 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from django.urls import reverse
1212
from django.utils.http import urlencode
1313

14-
from ietf.doc.models import Document, DocumentAuthor, DocAlias, DocRelationshipName, RelatedDocument, State
14+
from ietf.doc.models import Document, DocumentAuthor, DocAlias, State
1515
from ietf.doc.models import DocEvent, NewRevisionDocEvent
1616
from ietf.doc.utils import add_state_change_event
1717
from ietf.ietfauth.utils import role_required
@@ -20,7 +20,7 @@
2020
from ietf.person.models import Person
2121
from ietf.secr.drafts.email import announcement_from_form, get_email_initial
2222
from ietf.secr.drafts.forms import ( AddModelForm, AuthorForm, BaseRevisionModelForm, EditModelForm,
23-
EmailForm, ExtendForm, ReplaceForm, RevisionModelForm,
23+
EmailForm, ExtendForm, RevisionModelForm,
2424
SearchForm, UploadForm, WithdrawForm )
2525
from ietf.secr.utils.ams_utils import get_base
2626
from ietf.secr.utils.document import get_rfc_num, get_start_date
@@ -193,41 +193,6 @@ def do_extend(draft, request):
193193

194194
return
195195

196-
def do_replace(draft, request):
197-
'Perform document replace'
198-
199-
replaced = DocAlias.objects.get(name=request.POST.get('replaced')) # a DocAlias
200-
replaced_by = Document.objects.get(name=request.POST.get('replaced_by')) # a Document
201-
202-
# create relationship
203-
RelatedDocument.objects.create(source=replaced_by,
204-
target=replaced,
205-
relationship=DocRelationshipName.objects.get(slug='replaces'))
206-
207-
208-
209-
draft.set_state(State.objects.get(type="draft", slug="repl"))
210-
211-
e = DocEvent.objects.create(
212-
type='changed_document',
213-
by=request.user.person,
214-
doc=replaced_by,
215-
rev=replaced_by.rev,
216-
time=draft.time,
217-
desc='This document now replaces <b>%s</b>' % replaced,
218-
)
219-
220-
draft.save_with_history([e])
221-
222-
# move replaced document to archive
223-
archive_draft_files(replaced.document.name + '-' + replaced.document.rev)
224-
225-
# send announcement
226-
form = EmailForm(request.POST)
227-
announcement_from_form(form.data,by=request.user.person)
228-
229-
return
230-
231196
def do_resurrect(draft, request):
232197
'''
233198
Actions
@@ -667,8 +632,6 @@ def do_action(request, id):
667632
func = do_revision
668633
elif action == 'resurrect':
669634
func = do_resurrect
670-
elif action == 'replace':
671-
func = do_replace
672635
elif action == 'update':
673636
func = do_update_announce
674637
elif action == 'extend':
@@ -900,42 +863,6 @@ def nudge_report(request):
900863
'docs': docs},
901864
)
902865

903-
@role_required('Secretariat')
904-
def replace(request, id):
905-
'''
906-
This view handles replacing one Internet-Draft with another
907-
Prerequisites: draft must be active
908-
Input: replacement draft filename
909-
910-
# TODO: support two different replaced messages in email
911-
'''
912-
913-
draft = get_object_or_404(Document, name=id)
914-
915-
if request.method == 'POST':
916-
button_text = request.POST.get('submit', '')
917-
if button_text == 'Cancel':
918-
return redirect('ietf.secr.drafts.views.view', id=id)
919-
920-
form = ReplaceForm(request.POST, draft=draft)
921-
if form.is_valid():
922-
#params = form.cleaned_data
923-
params = {}
924-
params['replaced'] = form.data['replaced']
925-
params['replaced_by'] = form.data['replaced_by']
926-
params['action'] = 'replace'
927-
url = reverse('ietf.secr.drafts.views.email', kwargs={'id':id})
928-
url = url + '?' + urlencode(params)
929-
return redirect(url)
930-
931-
else:
932-
form = ReplaceForm(draft=draft)
933-
934-
return render(request, 'drafts/replace.html', {
935-
'form': form,
936-
'draft': draft},
937-
)
938-
939866
@role_required('Secretariat')
940867
def revision(request, id):
941868
'''

ietf/secr/templates/drafts/view.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ <h2>Actions</h2>
8383
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='revision/'">New Revision</button></li>
8484
<li><button {% if is_expired %}{% else %}disabled="disabled"{% endif %}onclick="window.location='update/'">Update Expired</button></li>
8585
<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>
86-
<li><button {% if is_active or is_expired %}{% else %}disabled="disabled"{% endif %}onclick="window.location='replace/'">Replace</button></li>
8786
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='extend/'">Extend Expiry</button></li>
8887
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='withdraw/'">Withdraw</button></li>
8988
<li><button {% if is_active %}{% else %}disabled="disabled"{% endif %}onclick="window.location='announce/'">Announcement</button></li>

0 commit comments

Comments
 (0)