Skip to content

Commit 589ff69

Browse files
committed
Merge forward complete
- Legacy-Id: 5328
1 parent 31a02c0 commit 589ff69

35 files changed

+2803
-110
lines changed

ietf/doc/forms.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import datetime
2+
3+
from django import forms
4+
5+
from ietf.iesg.models import TelechatDate
6+
7+
class TelechatForm(forms.Form):
8+
telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False)
9+
returning_item = forms.BooleanField(required=False)
10+
11+
def __init__(self, *args, **kwargs):
12+
super(self.__class__, self).__init__(*args, **kwargs)
13+
14+
dates = [d.date for d in TelechatDate.objects.active().order_by('date')]
15+
init = kwargs['initial'].get("telechat_date")
16+
if init and init not in dates:
17+
dates.insert(0, init)
18+
19+
self.fields['telechat_date'].choices = [("", "(not on agenda)")] + [(d, d.strftime("%Y-%m-%d")) for d in dates]
20+
21+
from ietf.person.models import Person
22+
23+
class AdForm(forms.Form):
24+
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active").order_by('name'),
25+
label="Shepherding AD", empty_label="(None)", required=True)
26+
27+
def __init__(self, *args, **kwargs):
28+
super(self.__class__, self).__init__(*args, **kwargs)
29+
30+
# if previous AD is now ex-AD, append that person to the list
31+
ad_pk = self.initial.get('ad')
32+
choices = self.fields['ad'].choices
33+
if ad_pk and ad_pk not in [pk for pk, name in choices]:
34+
self.fields['ad'].choices = list(choices) + [("", "-------"), (ad_pk, Person.objects.get(pk=ad_pk).plain_name())]
35+
36+
class NotifyForm(forms.Form):
37+
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas", required=False)

ietf/doc/migrations/0005_add_statchg.py

Lines changed: 427 additions & 0 deletions
Large diffs are not rendered by default.

ietf/doc/models.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,7 @@ class RelatedDocument(models.Model):
150150
def action(self):
151151
return self.relationship.name
152152
def inverse_action():
153-
infinitive = self.relationship.name[:-1]
154-
return u"%sd by" % infinitive
153+
return self.relationship.revname
155154
def __unicode__(self):
156155
return u"%s %s %s" % (self.source.name, self.relationship.name.lower(), self.target.name)
157156

ietf/doc/tests.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11

22

33
from ietf.doc.tests_conflict_review import *
4+
from ietf.doc.tests_status_change import *

ietf/doc/tests_status_change.py

Lines changed: 392 additions & 0 deletions
Large diffs are not rendered by default.

ietf/doc/urls_status_change.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from django.conf.urls.defaults import patterns, url
2+
3+
urlpatterns = patterns('ietf.doc.views_status_change',
4+
url(r'^state/$', "change_state", name='status_change_change_state'),
5+
url(r'^submit/$', "submit", name='status_change_submit'),
6+
url(r'^notices/$', "edit_notices", name='status_change_notices'),
7+
url(r'^ad/$', "edit_ad", name='status_change_ad'),
8+
url(r'^approve/$', "approve", name='status_change_approve'),
9+
url(r'^telechat/$', "telechat_date", name='status_change_telechat_date'),
10+
url(r'^relations/$', "edit_relations", name='status_change_relations'),
11+
)
12+

ietf/doc/views_conflict_review.py

Lines changed: 24 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,15 @@
2525
from ietf.iesg.models import TelechatDate
2626
from ietf.group.models import Role, Group
2727

28+
from ietf.doc.forms import TelechatForm, AdForm, NotifyForm
29+
2830
class ChangeStateForm(forms.Form):
2931
review_state = forms.ModelChoiceField(State.objects.filter(type="conflrev", used=True), label="Conflict review state", empty_label=None, required=True)
3032
comment = forms.CharField(widget=forms.Textarea, help_text="Optional comment for the review history", required=False)
31-
def __init__(self, *args, **kwargs):
32-
self.hide = kwargs.pop('hide', None)
33-
super(ChangeStateForm, self).__init__(*args, **kwargs)
34-
# hide requested fields
35-
if self.hide:
36-
for f in self.hide:
37-
self.fields[f].widget = forms.HiddenInput
3833

3934
@role_required("Area Director", "Secretariat")
4035
def change_state(request, name, option=None):
41-
"""Change state of and IESG review for IETF conflicts in other stream's documents, notifying parties as necessary
36+
"""Change state of an IESG review for IETF conflicts in other stream's documents, notifying parties as necessary
4237
and logging the change as a comment."""
4338
review = get_object_or_404(Document, type="conflrev", name=name)
4439

@@ -86,22 +81,22 @@ def change_state(request, name, option=None):
8681

8782
return redirect('doc_view', name=review.name)
8883
else:
89-
hide = []
9084
s = review.get_state()
9185
init = dict(review_state=s.pk if s else None)
92-
form = ChangeStateForm(hide=hide, initial=init)
86+
form = ChangeStateForm(initial=init)
9387

94-
return render_to_response('doc/conflict_review/change_state.html',
88+
return render_to_response('doc/change_state.html',
9589
dict(form=form,
9690
doc=review,
9791
login=login,
92+
help_url=reverse('help_conflict_review_states'),
9893
),
9994
context_instance=RequestContext(request))
10095

10196
def send_conflict_eval_email(request,review):
102-
msg = render_to_string("doc/conflict_review/eval_email.txt",
103-
dict(review=review,
104-
review_url = settings.IDTRACKER_BASE_URL+review.get_absolute_url(),
97+
msg = render_to_string("doc/eval_email.txt",
98+
dict(doc=review,
99+
doc_url = settings.IDTRACKER_BASE_URL+review.get_absolute_url(),
105100
)
106101
)
107102
send_mail_preformatted(request,msg)
@@ -202,9 +197,6 @@ def submit(request, name):
202197
},
203198
context_instance=RequestContext(request))
204199

205-
class NotifyForm(forms.Form):
206-
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas", required=False)
207-
208200

209201
@role_required("Area Director", "Secretariat")
210202
def edit_notices(request, name):
@@ -231,28 +223,15 @@ def edit_notices(request, name):
231223
init = { "notify" : review.notify }
232224
form = NotifyForm(initial=init)
233225

234-
return render_to_response('doc/conflict_review/notify.html',
235-
{'form': form,
236-
'review': review,
237-
'conflictdoc' : review.relateddocument_set.get(relationship__slug='conflrev').target.document,
226+
conflictdoc = review.relateddocument_set.get(relationship__slug='conflrev').target.document
227+
titletext = 'the conflict review of %s-%s' % (conflictdoc.canonical_name(),conflictdoc.rev)
228+
return render_to_response('doc/notify.html',
229+
{'form': form,
230+
'doc': review,
231+
'titletext' : titletext
238232
},
239233
context_instance = RequestContext(request))
240234

241-
class AdForm(forms.Form):
242-
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active").order_by('name'),
243-
label="Shepherding AD", empty_label="(None)", required=True)
244-
245-
def __init__(self, *args, **kwargs):
246-
super(self.__class__, self).__init__(*args, **kwargs)
247-
248-
# if previous AD is now ex-AD, append that person to the list
249-
ad_pk = self.initial.get('ad')
250-
choices = self.fields['ad'].choices
251-
if ad_pk and ad_pk not in [pk for pk, name in choices]:
252-
self.fields['ad'].choices = list(choices) + [("", "-------"), (ad_pk, Person.objects.get(pk=ad_pk).plain_name())]
253-
254-
255-
256235
@role_required("Area Director", "Secretariat")
257236
def edit_ad(request, name):
258237
"""Change the shepherding Area Director for this review."""
@@ -277,10 +256,13 @@ def edit_ad(request, name):
277256
init = { "ad" : review.ad_id }
278257
form = AdForm(initial=init)
279258

280-
return render_to_response('doc/conflict_review/change_ad.html',
281-
{'form': form,
282-
'review': review,
283-
'conflictdoc' : review.relateddocument_set.get(relationship__slug='conflrev').target.document,
259+
260+
conflictdoc = review.relateddocument_set.get(relationship__slug='conflrev').target.document
261+
titletext = 'the conflict review of %s-%s' % (conflictdoc.canonical_name(),conflictdoc.rev)
262+
return render_to_response('doc/change_ad.html',
263+
{'form': form,
264+
'doc': review,
265+
'titletext': titletext
284266
},
285267
context_instance = RequestContext(request))
286268

@@ -318,7 +300,7 @@ def approve(request, name):
318300
review = get_object_or_404(Document, type="conflrev", name=name)
319301

320302
if review.get_state('conflrev').slug not in ('appr-reqnopub-pend','appr-noprob-pend'):
321-
return Http404()
303+
raise Http404
322304

323305
login = request.user.get_profile()
324306

@@ -465,22 +447,6 @@ def start_review(request, name):
465447
context_instance = RequestContext(request))
466448

467449

468-
# There should really only be one of these living in Doc instead of it being spread between idrfc,charter, and here
469-
class TelechatForm(forms.Form):
470-
telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False)
471-
returning_item = forms.BooleanField(required=False)
472-
473-
def __init__(self, *args, **kwargs):
474-
super(self.__class__, self).__init__(*args, **kwargs)
475-
476-
dates = [d.date for d in TelechatDate.objects.active().order_by('date')]
477-
init = kwargs['initial'].get("telechat_date")
478-
if init and init not in dates:
479-
dates.insert(0, init)
480-
481-
self.fields['telechat_date'].choices = [("", "(not on agenda)")] + [(d, d.strftime("%Y-%m-%d")) for d in dates]
482-
483-
484450
@role_required("Area Director", "Secretariat")
485451
def telechat_date(request, name):
486452
doc = get_object_or_404(Document, type="conflrev", name=name)
@@ -501,7 +467,7 @@ def telechat_date(request, name):
501467
else:
502468
form = TelechatForm(initial=initial)
503469

504-
return render_to_response('doc/conflict_review/edit_telechat_date.html',
470+
return render_to_response('doc/edit_telechat_date.html',
505471
dict(doc=doc,
506472
form=form,
507473
user=request.user,

0 commit comments

Comments
 (0)