1818from ietf .doc .fields import SearchableDocumentsField
1919from ietf .group .models import GroupMilestone , MilestoneGroupEvent
2020from 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 )
2222from ietf .name .models import GroupMilestoneStateName
2323from ietf .group .mails import email_milestones_changed
2424from 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