Add change shepherd email page so that a document shepherd can change
the email address used for shepherding a document - Legacy-Id: 8297
This commit is contained in:
parent
1aafd73ec1
commit
5b7258ae12
|
@ -791,6 +791,9 @@ class IndividualInfoFormsTests(TestCase):
|
|||
self.assertTrue(self.doc.latest_event(DocEvent,type="added_comment").desc.startswith('Shepherding AD changed'))
|
||||
|
||||
def test_doc_change_shepherd(self):
|
||||
self.doc.shepherd = None
|
||||
self.doc.save()
|
||||
|
||||
url = urlreverse('doc_edit_shepherd',kwargs=dict(name=self.docname))
|
||||
|
||||
login_testing_unauthorized(self, "plain", url)
|
||||
|
@ -822,6 +825,34 @@ class IndividualInfoFormsTests(TestCase):
|
|||
q = PyQuery(r.content)
|
||||
self.assertTrue(len(q('form ul.errorlist')) > 0)
|
||||
|
||||
def test_doc_change_shepherd_email(self):
|
||||
self.doc.shepherd = None
|
||||
self.doc.save()
|
||||
|
||||
url = urlreverse('doc_change_shepherd_email',kwargs=dict(name=self.docname))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 404)
|
||||
|
||||
self.doc.shepherd = Email.objects.get(person__user__username="ad1")
|
||||
self.doc.save()
|
||||
|
||||
login_testing_unauthorized(self, "plain", url)
|
||||
|
||||
self.doc.shepherd = Email.objects.get(person__user__username="plain")
|
||||
self.doc.save()
|
||||
|
||||
new_email = Email.objects.create(address="anotheremail@example.com", person=self.doc.shepherd.person)
|
||||
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
# change the shepherd email
|
||||
r = self.client.post(url, dict(shepherd=new_email))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.doc = Document.objects.get(name=self.docname)
|
||||
self.assertEqual(self.doc.shepherd, new_email)
|
||||
self.assertTrue(self.doc.latest_event(DocEvent, type="added_comment").desc.startswith('Document shepherd email changed'))
|
||||
|
||||
def test_doc_view_shepherd_writeup(self):
|
||||
url = urlreverse('doc_shepherd_writeup',kwargs=dict(name=self.docname))
|
||||
|
||||
|
|
|
@ -81,6 +81,7 @@ urlpatterns = patterns('',
|
|||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/ad/$', views_draft.edit_ad, name='doc_change_ad'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/consensus/$', views_draft.edit_consensus, name='doc_edit_consensus'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/shepherd/$', views_draft.edit_shepherd, name='doc_edit_shepherd'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/shepherdemail/$', views_draft.change_shepherd_email, name='doc_change_shepherd_email'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/shepherdwriteup/$', views_draft.edit_shepherd_writeup, name='doc_edit_shepherd_writeup'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/requestpublication/$', views_draft.request_publication, name='doc_request_publication'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/adopt/$', views_draft.adopt_draft, name='doc_adopt_draft'),
|
||||
|
|
|
@ -350,6 +350,7 @@ def document_main(request, name, rev=None):
|
|||
can_edit=can_edit,
|
||||
can_change_stream=can_change_stream,
|
||||
can_edit_stream_info=can_edit_stream_info,
|
||||
is_shepherd = user_is_person(request.user, doc.shepherd and doc.shepherd.person),
|
||||
can_edit_shepherd_writeup=can_edit_shepherd_writeup,
|
||||
can_edit_iana_state=can_edit_iana_state,
|
||||
can_edit_consensus=can_edit_consensus,
|
||||
|
|
|
@ -1051,7 +1051,6 @@ def edit_shepherd(request, name):
|
|||
doc = get_object_or_404(Document, type="draft", name=name)
|
||||
|
||||
can_edit_stream_info = is_authorized_in_doc_stream(request.user, doc)
|
||||
|
||||
if not can_edit_stream_info:
|
||||
return HttpResponseForbidden("You do not have the necessary permissions to view this page")
|
||||
|
||||
|
@ -1060,25 +1059,67 @@ def edit_shepherd(request, name):
|
|||
if form.is_valid():
|
||||
save_document_in_history(doc)
|
||||
|
||||
doc.shepherd = form.cleaned_data['shepherd']
|
||||
doc.save()
|
||||
if form.cleaned_data['shepherd'] != doc.shepherd:
|
||||
doc.shepherd = form.cleaned_data['shepherd']
|
||||
doc.save()
|
||||
|
||||
login = request.user.person
|
||||
c = DocEvent(type="added_comment", doc=doc, by=login)
|
||||
c.desc = "Document shepherd changed to "+ (doc.shepherd.person.name if doc.shepherd else "(None)")
|
||||
c.save()
|
||||
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
|
||||
c.desc = "Document shepherd changed to "+ (doc.shepherd.person.name if doc.shepherd else "(None)")
|
||||
c.save()
|
||||
|
||||
return redirect('doc_view', name=doc.name)
|
||||
|
||||
else:
|
||||
init = { "shepherd": doc.shepherd_id }
|
||||
form = ShepherdForm(initial=init)
|
||||
form = ShepherdForm(initial={ "shepherd": doc.shepherd_id })
|
||||
|
||||
return render(request, 'doc/change_shepherd.html', {
|
||||
'form': form,
|
||||
'doc': doc,
|
||||
})
|
||||
|
||||
class ChangeShepherdEmailForm(forms.Form):
|
||||
shepherd = forms.ModelChoiceField(queryset=Email.objects.all(), label="Shepherd email", empty_label=None)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ChangeShepherdEmailForm, self).__init__(*args, **kwargs)
|
||||
self.fields["shepherd"].queryset = self.fields["shepherd"].queryset.filter(person__email=self.initial["shepherd"]).distinct()
|
||||
|
||||
def change_shepherd_email(request, name):
|
||||
"""Change the shepherd email address for a Document"""
|
||||
doc = get_object_or_404(Document, name=name)
|
||||
|
||||
if not doc.shepherd:
|
||||
raise Http404
|
||||
|
||||
can_edit_stream_info = is_authorized_in_doc_stream(request.user, doc)
|
||||
is_shepherd = user_is_person(request.user, doc.shepherd and doc.shepherd.person)
|
||||
if not can_edit_stream_info and not is_shepherd:
|
||||
return HttpResponseForbidden("You do not have the necessary permissions to view this page")
|
||||
|
||||
initial = { "shepherd": doc.shepherd_id }
|
||||
if request.method == 'POST':
|
||||
form = ChangeShepherdEmailForm(request.POST, initial=initial)
|
||||
if form.is_valid():
|
||||
if form.cleaned_data['shepherd'] != doc.shepherd:
|
||||
save_document_in_history(doc)
|
||||
|
||||
doc.shepherd = form.cleaned_data['shepherd']
|
||||
doc.save()
|
||||
|
||||
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
|
||||
c.desc = "Document shepherd email changed"
|
||||
c.save()
|
||||
|
||||
return redirect('doc_view', name=doc.name)
|
||||
|
||||
else:
|
||||
form = ChangeShepherdEmailForm(initial=initial)
|
||||
|
||||
return render(request, 'doc/change_shepherd_email.html', {
|
||||
'form': form,
|
||||
'doc': doc,
|
||||
})
|
||||
|
||||
class AdForm(forms.Form):
|
||||
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active").order_by('name'),
|
||||
label="Shepherding AD", empty_label="(None)", required=True)
|
||||
|
|
26
ietf/templates/doc/change_shepherd_email.html
Normal file
26
ietf/templates/doc/change_shepherd_email.html
Normal file
|
@ -0,0 +1,26 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}
|
||||
Change the document shepherd email for {{ doc.name }}-{{ doc.rev }}
|
||||
{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/token-input.css"></link>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change the document shepherd email for {{ doc.name }}-{{ doc.rev }}</h1>
|
||||
|
||||
<form class="edit-info" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a class="button" href="{% url "doc_view" name=doc.name %}">Cancel</a>
|
||||
<input class="button" type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -131,8 +131,8 @@
|
|||
<tr>
|
||||
<td>Document shepherd:</td>
|
||||
<td>
|
||||
<a {% if can_edit_stream_info %}class="editlink" href="{% url "doc_edit_shepherd" name=doc.name %}"{% endif %}>
|
||||
{% if doc.shepherd %}{{ doc.shepherd.person }}{% else %}No shepherd assigned{% endif %}
|
||||
<a {% if can_edit_stream_info or is_shepherd %}class="editlink" href="{% if can_edit_stream_info %}{% url "doc_edit_shepherd" name=doc.name %}{% elif is_shepherd %}{% url "doc_change_shepherd_email" name=doc.name %}{% endif %}"{% endif %}>
|
||||
{% if doc.shepherd %}{{ doc.shepherd.person }}{% else %}No shepherd assigned{% endif %}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
Loading…
Reference in a new issue