Skip to content

Commit 68174ba

Browse files
committed
Merged in [17234] from rjsparks@nostrum.com:
Restrict the ability to change whether a group uses milestone dates to the ADs and the secretariat. Fixes ietf-tools#2869. - Legacy-Id: 17236 Note: SVN reference [17234] has been migrated to Git commit b4ac9f8
2 parents f2cb2aa + b4ac9f8 commit 68174ba

4 files changed

Lines changed: 53 additions & 24 deletions

File tree

ietf/group/milestones.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from django import forms
88
from django.contrib import messages
9+
from django.core.exceptions import PermissionDenied
910
from django.http import HttpResponseForbidden, HttpResponseBadRequest, HttpResponseRedirect, Http404
1011
from django.shortcuts import render, redirect
1112
from django.contrib.auth.decorators import login_required
@@ -107,8 +108,10 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
107108

108109
needs_review = False
109110
if can_manage_group(request.user, group):
111+
can_change_uses_milestone_dates = True
110112
if not can_manage_group_type(request.user, group):
111113
# The user is chair or similar, not AD:
114+
can_change_uses_milestone_dates = False
112115
if milestone_set == "current":
113116
needs_review = True
114117
else:
@@ -299,17 +302,20 @@ def save_milestone_form(f):
299302
action = request.POST.get("action", "review")
300303

301304
if action == "switch":
302-
if group.uses_milestone_dates:
303-
group.uses_milestone_dates=False
304-
group.save()
305-
for order, milestone in enumerate(group.groupmilestone_set.filter(state_id='active').order_by('due','id')):
306-
milestone.order = order
307-
milestone.save()
305+
if can_change_uses_milestone_dates:
306+
if group.uses_milestone_dates:
307+
group.uses_milestone_dates=False
308+
group.save()
309+
for order, milestone in enumerate(group.groupmilestone_set.filter(state_id='active').order_by('due','id')):
310+
milestone.order = order
311+
milestone.save()
312+
else:
313+
group.uses_milestone_dates=True
314+
group.save()
315+
for m in milestones:
316+
forms.append(MilestoneForm(needs_review, reviewer, instance=m, uses_dates=group.uses_milestone_dates))
308317
else:
309-
group.uses_milestone_dates=True
310-
group.save()
311-
for m in milestones:
312-
forms.append(MilestoneForm(needs_review, reviewer, instance=m, uses_dates=group.uses_milestone_dates))
318+
raise PermissionDenied
313319
else:
314320
# parse out individual milestone forms
315321
for prefix in request.POST.getlist("prefix"):
@@ -383,7 +389,8 @@ def save_milestone_form(f):
383389
milestone_set=milestone_set,
384390
needs_review=needs_review,
385391
reviewer=reviewer,
386-
can_reset=can_reset))
392+
can_reset=can_reset,
393+
can_change_uses_milestone_dates=can_change_uses_milestone_dates))
387394

388395
@login_required
389396
def reset_charter_milestones(request, group_type, acronym):

ietf/group/tests_info.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,7 +1063,9 @@ def test_reset_charter_milestones(self):
10631063

10641064
class DatelessMilestoneTests(TestCase):
10651065
def test_switch_to_dateless(self):
1066-
ms = DatedGroupMilestoneFactory()
1066+
ad_role = RoleFactory(group__type_id='area',name_id='ad')
1067+
ms = DatedGroupMilestoneFactory(group__parent=ad_role.group)
1068+
ad = ad_role.person
10671069
chair = RoleFactory(group=ms.group,name_id='chair').person
10681070

10691071
url = urlreverse('ietf.group.milestones.edit_milestones;current', kwargs=dict(acronym=ms.group.acronym))
@@ -1072,6 +1074,18 @@ def test_switch_to_dateless(self):
10721074
r = self.client.get(url)
10731075
self.assertEqual(r.status_code, 200)
10741076
q = PyQuery(r.content)
1077+
self.assertEqual(len(q('#switch-date-use-form')),0)
1078+
1079+
r = self.client.post(url, dict(action="switch"))
1080+
self.assertEqual(r.status_code, 403)
1081+
1082+
self.client.logout()
1083+
self.client.login(username=ad.user.username, password='%s+password' % ad.user.username)
1084+
1085+
r = self.client.get(url)
1086+
self.assertEqual(r.status_code, 200)
1087+
q = PyQuery(r.content)
1088+
self.assertEqual(len(q('#switch-date-use-form')),1)
10751089
self.assertEqual(len(q('#uses_milestone_dates')),1)
10761090

10771091
r = self.client.post(url, dict(action="switch"))
@@ -1085,11 +1099,12 @@ def test_switch_to_dateless(self):
10851099
self.assertEqual(len(q('#uses_milestone_dates')),0)
10861100

10871101
def test_switch_to_dated(self):
1088-
ms = DatelessGroupMilestoneFactory()
1089-
chair = RoleFactory(group=ms.group,name_id='chair').person
1102+
ad_role = RoleFactory(group__type_id='area',name_id='ad')
1103+
ms = DatelessGroupMilestoneFactory(group__parent=ad_role.group)
1104+
ad = ad_role.person
10901105

10911106
url = urlreverse('ietf.group.milestones.edit_milestones;current', kwargs=dict(acronym=ms.group.acronym))
1092-
login_testing_unauthorized(self, chair.user.username, url)
1107+
login_testing_unauthorized(self, ad.user.username, url)
10931108

10941109
r = self.client.get(url)
10951110
self.assertEqual(r.status_code, 200)

ietf/static/ietf/js/edit-milestones.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ $(document).ready(function () {
33
var milestonesForm = $('#milestones-form');
44
var group_uses_milestone_dates = ( $('#uses_milestone_dates').length > 0 );
55
var milestone_order_has_changed = false;
6+
var switch_date_use_form = $("#switch-date-use-form")
67

78
// make sure we got the lowest number for idCounter
89
milestonesForm.find('.edit-milestone input[name$="-id"]').each(function () {
@@ -14,7 +15,9 @@ $(document).ready(function () {
1415
function setChanged() {
1516
$(this).closest(".edit-milestone").addClass("changed");
1617
setSubmitButtonState();
17-
$("#switch-date-use-form").hide();
18+
if (switch_date_use_form) {
19+
switch_date_use_form.hide();
20+
}
1821
}
1922

2023
milestonesForm.on("change", '.edit-milestone select,.edit-milestone input,.edit-milestone textarea', setChanged);
@@ -166,7 +169,9 @@ $(document).ready(function () {
166169
milestone_order_has_changed = true;
167170
setSubmitButtonState();
168171
setOrderControlValue();
169-
$("#switch-date-use-form").hide();
172+
if (switch_date_use_form) {
173+
switch_date_use_form.hide();
174+
}
170175

171176
}
172177

ietf/templates/group/edit_milestones.html

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ <h1>{{ title }}</h1>
2626
</p>
2727

2828
<div class="container-fluid">
29-
<div class="col-sm-12">
30-
<form method="post" id="switch-date-use-form">{% csrf_token %}
31-
<button class="btn btn-default" type="submit" name="action" value="switch"{% if milestone_set == 'charter' %} style="display:none;"{% endif %}>
32-
{% if group.uses_milestone_dates %}Stop{% else %}Start{% endif %} using milestone dates
33-
</button>
34-
</form>
35-
</div>
29+
{% if can_change_uses_milestone_dates %}
30+
<div class="col-sm-12">
31+
<form method="post" id="switch-date-use-form">{% csrf_token %}
32+
<button class="btn btn-default" type="submit" name="action" value="switch"{% if milestone_set == 'charter' %} style="display:none;"{% endif %}>
33+
{% if group.uses_milestone_dates %}Stop{% else %}Start{% endif %} using milestone dates
34+
</button>
35+
</form>
36+
</div>
37+
{% endif %}
3638

3739

3840
<div class="col-sm-12">

0 commit comments

Comments
 (0)