Skip to content

Commit 65c7080

Browse files
committed
Interim change to prevent chairs from editing milestone description. Fixes ietf-tools#3036. Commit ready for merge.
- Legacy-Id: 18272
1 parent 249090f commit 65c7080

1 file changed

Lines changed: 12 additions & 7 deletions

File tree

ietf/group/milestones.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from ietf.doc.fields import SearchableDocumentsField
1919
from ietf.group.models import GroupMilestone, MilestoneGroupEvent
2020
from ietf.group.utils import (save_milestone_in_history, can_manage_group_type, can_manage_group,
21-
milestone_reviewer_for_group_type, get_group_or_404)
21+
milestone_reviewer_for_group_type, get_group_or_404, has_role)
2222
from ietf.name.models import GroupMilestoneStateName
2323
from ietf.group.mails import email_milestones_changed
2424
from ietf.utils.fields import DatepickerDateField
@@ -39,7 +39,7 @@ class MilestoneForm(forms.Form):
3939
choices=(("accept", "Accept"), ("reject", "Reject and delete"), ("noaction", "No action")),
4040
required=False, initial="noaction", widget=forms.RadioSelect)
4141

42-
def __init__(self, needs_review, reviewer, *args, **kwargs):
42+
def __init__(self, needs_review, reviewer, desc_editable, *args, **kwargs):
4343
m = self.milestone = kwargs.pop("instance", None)
4444

4545
uses_dates = kwargs.pop("uses_dates", True)
@@ -83,6 +83,9 @@ def __init__(self, needs_review, reviewer, *args, **kwargs):
8383

8484
self.needs_review = needs_review
8585

86+
if not desc_editable:
87+
self.fields["desc"].widget.attrs["readonly"] = True
88+
8689
def clean_resolved(self):
8790
r = self.cleaned_data["resolved"].strip()
8891

@@ -117,6 +120,8 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
117120
else:
118121
return HttpResponseForbidden("You are not authorized to edit the milestones of this group.")
119122

123+
desc_editable = has_role(request.user,["Secretariat","Area Director","IRTF Chair"])
124+
120125
if milestone_set == "current":
121126
title = "Edit milestones for %s %s" % (group.acronym, group.type.name)
122127
milestones = group.groupmilestone_set.filter(state__in=("active", "review"))
@@ -211,7 +216,7 @@ def save_milestone_form(f):
211216
changes.append("set state to deleted from review, rejecting new milestone")
212217

213218

214-
if c["desc"] != m.desc and not needs_review:
219+
if c["desc"] != m.desc and not needs_review and desc_editable:
215220
if not history:
216221
history = save_milestone_in_history(m)
217222
m.desc = c["desc"]
@@ -313,7 +318,7 @@ def save_milestone_form(f):
313318
group.uses_milestone_dates=True
314319
group.save()
315320
for m in milestones:
316-
forms.append(MilestoneForm(needs_review, reviewer, instance=m, uses_dates=group.uses_milestone_dates))
321+
forms.append(MilestoneForm(needs_review, reviewer, desc_editable, instance=m, uses_dates=group.uses_milestone_dates))
317322
else:
318323
raise PermissionDenied
319324
else:
@@ -324,7 +329,7 @@ def save_milestone_form(f):
324329

325330
# new milestones have non-existing ids so instance end up as None
326331
instance = milestones_dict.get(request.POST.get(prefix + "-id", ""), None)
327-
f = MilestoneForm(needs_review, reviewer, request.POST, prefix=prefix, instance=instance, uses_dates=group.uses_milestone_dates)
332+
f = MilestoneForm(needs_review, reviewer, True, request.POST, prefix=prefix, instance=instance, uses_dates=group.uses_milestone_dates)
328333
forms.append(f)
329334

330335
form_errors = form_errors or not f.is_valid()
@@ -369,11 +374,11 @@ def save_milestone_form(f):
369374
return HttpResponseRedirect(group.about_url())
370375
else:
371376
for m in milestones:
372-
forms.append(MilestoneForm(needs_review, reviewer, instance=m, uses_dates=group.uses_milestone_dates))
377+
forms.append(MilestoneForm(needs_review, reviewer, desc_editable, instance=m, uses_dates=group.uses_milestone_dates))
373378

374379
can_reset = milestone_set == "charter" and get_chartering_type(group.charter) == "rechartering"
375380

376-
empty_form = MilestoneForm(needs_review, reviewer, uses_dates=group.uses_milestone_dates)
381+
empty_form = MilestoneForm(needs_review, reviewer, True, uses_dates=group.uses_milestone_dates)
377382

378383
if group.uses_milestone_dates:
379384
forms.sort(key=lambda f: f.milestone.due if f.milestone else datetime.date.max)

0 commit comments

Comments
 (0)