Merged in [18272] from fenton@bluepopcorn.net:
Interim change to prevent chairs from editing milestone description. Fixes #3036.
- Legacy-Id: 18304
Note: SVN reference [18272] has been migrated to Git commit 65c7080b1f
This commit is contained in:
commit
7af17420ae
|
@ -18,7 +18,7 @@ from ietf.doc.utils import get_chartering_type
|
||||||
from ietf.doc.fields import SearchableDocumentsField
|
from ietf.doc.fields import SearchableDocumentsField
|
||||||
from ietf.group.models import GroupMilestone, MilestoneGroupEvent
|
from ietf.group.models import GroupMilestone, MilestoneGroupEvent
|
||||||
from ietf.group.utils import (save_milestone_in_history, can_manage_group_type, can_manage_group,
|
from ietf.group.utils import (save_milestone_in_history, can_manage_group_type, can_manage_group,
|
||||||
milestone_reviewer_for_group_type, get_group_or_404)
|
milestone_reviewer_for_group_type, get_group_or_404, has_role)
|
||||||
from ietf.name.models import GroupMilestoneStateName
|
from ietf.name.models import GroupMilestoneStateName
|
||||||
from ietf.group.mails import email_milestones_changed
|
from ietf.group.mails import email_milestones_changed
|
||||||
from ietf.utils.fields import DatepickerDateField
|
from ietf.utils.fields import DatepickerDateField
|
||||||
|
@ -39,7 +39,7 @@ class MilestoneForm(forms.Form):
|
||||||
choices=(("accept", "Accept"), ("reject", "Reject and delete"), ("noaction", "No action")),
|
choices=(("accept", "Accept"), ("reject", "Reject and delete"), ("noaction", "No action")),
|
||||||
required=False, initial="noaction", widget=forms.RadioSelect)
|
required=False, initial="noaction", widget=forms.RadioSelect)
|
||||||
|
|
||||||
def __init__(self, needs_review, reviewer, *args, **kwargs):
|
def __init__(self, needs_review, reviewer, desc_editable, *args, **kwargs):
|
||||||
m = self.milestone = kwargs.pop("instance", None)
|
m = self.milestone = kwargs.pop("instance", None)
|
||||||
|
|
||||||
uses_dates = kwargs.pop("uses_dates", True)
|
uses_dates = kwargs.pop("uses_dates", True)
|
||||||
|
@ -83,6 +83,9 @@ class MilestoneForm(forms.Form):
|
||||||
|
|
||||||
self.needs_review = needs_review
|
self.needs_review = needs_review
|
||||||
|
|
||||||
|
if not desc_editable:
|
||||||
|
self.fields["desc"].widget.attrs["readonly"] = True
|
||||||
|
|
||||||
def clean_resolved(self):
|
def clean_resolved(self):
|
||||||
r = self.cleaned_data["resolved"].strip()
|
r = self.cleaned_data["resolved"].strip()
|
||||||
|
|
||||||
|
@ -117,6 +120,8 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
|
||||||
else:
|
else:
|
||||||
return HttpResponseForbidden("You are not authorized to edit the milestones of this group.")
|
return HttpResponseForbidden("You are not authorized to edit the milestones of this group.")
|
||||||
|
|
||||||
|
desc_editable = has_role(request.user,["Secretariat","Area Director","IRTF Chair"])
|
||||||
|
|
||||||
if milestone_set == "current":
|
if milestone_set == "current":
|
||||||
title = "Edit milestones for %s %s" % (group.acronym, group.type.name)
|
title = "Edit milestones for %s %s" % (group.acronym, group.type.name)
|
||||||
milestones = group.groupmilestone_set.filter(state__in=("active", "review"))
|
milestones = group.groupmilestone_set.filter(state__in=("active", "review"))
|
||||||
|
@ -211,7 +216,7 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
|
||||||
changes.append("set state to deleted from review, rejecting new milestone")
|
changes.append("set state to deleted from review, rejecting new milestone")
|
||||||
|
|
||||||
|
|
||||||
if c["desc"] != m.desc and not needs_review:
|
if c["desc"] != m.desc and not needs_review and desc_editable:
|
||||||
if not history:
|
if not history:
|
||||||
history = save_milestone_in_history(m)
|
history = save_milestone_in_history(m)
|
||||||
m.desc = c["desc"]
|
m.desc = c["desc"]
|
||||||
|
@ -313,7 +318,7 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
|
||||||
group.uses_milestone_dates=True
|
group.uses_milestone_dates=True
|
||||||
group.save()
|
group.save()
|
||||||
for m in milestones:
|
for m in milestones:
|
||||||
forms.append(MilestoneForm(needs_review, reviewer, instance=m, uses_dates=group.uses_milestone_dates))
|
forms.append(MilestoneForm(needs_review, reviewer, desc_editable, instance=m, uses_dates=group.uses_milestone_dates))
|
||||||
else:
|
else:
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
else:
|
else:
|
||||||
|
@ -324,7 +329,7 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
|
||||||
|
|
||||||
# new milestones have non-existing ids so instance end up as None
|
# new milestones have non-existing ids so instance end up as None
|
||||||
instance = milestones_dict.get(request.POST.get(prefix + "-id", ""), None)
|
instance = milestones_dict.get(request.POST.get(prefix + "-id", ""), None)
|
||||||
f = MilestoneForm(needs_review, reviewer, request.POST, prefix=prefix, instance=instance, uses_dates=group.uses_milestone_dates)
|
f = MilestoneForm(needs_review, reviewer, True, request.POST, prefix=prefix, instance=instance, uses_dates=group.uses_milestone_dates)
|
||||||
forms.append(f)
|
forms.append(f)
|
||||||
|
|
||||||
form_errors = form_errors or not f.is_valid()
|
form_errors = form_errors or not f.is_valid()
|
||||||
|
@ -369,11 +374,11 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
|
||||||
return HttpResponseRedirect(group.about_url())
|
return HttpResponseRedirect(group.about_url())
|
||||||
else:
|
else:
|
||||||
for m in milestones:
|
for m in milestones:
|
||||||
forms.append(MilestoneForm(needs_review, reviewer, instance=m, uses_dates=group.uses_milestone_dates))
|
forms.append(MilestoneForm(needs_review, reviewer, desc_editable, instance=m, uses_dates=group.uses_milestone_dates))
|
||||||
|
|
||||||
can_reset = milestone_set == "charter" and get_chartering_type(group.charter) == "rechartering"
|
can_reset = milestone_set == "charter" and get_chartering_type(group.charter) == "rechartering"
|
||||||
|
|
||||||
empty_form = MilestoneForm(needs_review, reviewer, uses_dates=group.uses_milestone_dates)
|
empty_form = MilestoneForm(needs_review, reviewer, True, uses_dates=group.uses_milestone_dates)
|
||||||
|
|
||||||
if group.uses_milestone_dates:
|
if group.uses_milestone_dates:
|
||||||
forms.sort(key=lambda f: f.milestone.due if f.milestone else datetime.date.max)
|
forms.sort(key=lambda f: f.milestone.due if f.milestone else datetime.date.max)
|
||||||
|
|
Loading…
Reference in a new issue