@@ -1051,7 +1051,6 @@ def edit_shepherd(request, name):
10511051 doc = get_object_or_404 (Document , type = "draft" , name = name )
10521052
10531053 can_edit_stream_info = is_authorized_in_doc_stream (request .user , doc )
1054-
10551054 if not can_edit_stream_info :
10561055 return HttpResponseForbidden ("You do not have the necessary permissions to view this page" )
10571056
@@ -1060,25 +1059,67 @@ def edit_shepherd(request, name):
10601059 if form .is_valid ():
10611060 save_document_in_history (doc )
10621061
1063- doc .shepherd = form .cleaned_data ['shepherd' ]
1064- doc .save ()
1062+ if form .cleaned_data ['shepherd' ] != doc .shepherd :
1063+ doc .shepherd = form .cleaned_data ['shepherd' ]
1064+ doc .save ()
10651065
1066- login = request .user .person
1067- c = DocEvent (type = "added_comment" , doc = doc , by = login )
1068- c .desc = "Document shepherd changed to " + (doc .shepherd .person .name if doc .shepherd else "(None)" )
1069- c .save ()
1066+ c = DocEvent (type = "added_comment" , doc = doc , by = request .user .person )
1067+ c .desc = "Document shepherd changed to " + (doc .shepherd .person .name if doc .shepherd else "(None)" )
1068+ c .save ()
10701069
10711070 return redirect ('doc_view' , name = doc .name )
10721071
10731072 else :
1074- init = { "shepherd" : doc .shepherd_id }
1075- form = ShepherdForm (initial = init )
1073+ form = ShepherdForm (initial = { "shepherd" : doc .shepherd_id })
10761074
10771075 return render (request , 'doc/change_shepherd.html' , {
10781076 'form' : form ,
10791077 'doc' : doc ,
10801078 })
10811079
1080+ class ChangeShepherdEmailForm (forms .Form ):
1081+ shepherd = forms .ModelChoiceField (queryset = Email .objects .all (), label = "Shepherd email" , empty_label = None )
1082+
1083+ def __init__ (self , * args , ** kwargs ):
1084+ super (ChangeShepherdEmailForm , self ).__init__ (* args , ** kwargs )
1085+ self .fields ["shepherd" ].queryset = self .fields ["shepherd" ].queryset .filter (person__email = self .initial ["shepherd" ]).distinct ()
1086+
1087+ def change_shepherd_email (request , name ):
1088+ """Change the shepherd email address for a Document"""
1089+ doc = get_object_or_404 (Document , name = name )
1090+
1091+ if not doc .shepherd :
1092+ raise Http404
1093+
1094+ can_edit_stream_info = is_authorized_in_doc_stream (request .user , doc )
1095+ is_shepherd = user_is_person (request .user , doc .shepherd and doc .shepherd .person )
1096+ if not can_edit_stream_info and not is_shepherd :
1097+ return HttpResponseForbidden ("You do not have the necessary permissions to view this page" )
1098+
1099+ initial = { "shepherd" : doc .shepherd_id }
1100+ if request .method == 'POST' :
1101+ form = ChangeShepherdEmailForm (request .POST , initial = initial )
1102+ if form .is_valid ():
1103+ if form .cleaned_data ['shepherd' ] != doc .shepherd :
1104+ save_document_in_history (doc )
1105+
1106+ doc .shepherd = form .cleaned_data ['shepherd' ]
1107+ doc .save ()
1108+
1109+ c = DocEvent (type = "added_comment" , doc = doc , by = request .user .person )
1110+ c .desc = "Document shepherd email changed"
1111+ c .save ()
1112+
1113+ return redirect ('doc_view' , name = doc .name )
1114+
1115+ else :
1116+ form = ChangeShepherdEmailForm (initial = initial )
1117+
1118+ return render (request , 'doc/change_shepherd_email.html' , {
1119+ 'form' : form ,
1120+ 'doc' : doc ,
1121+ })
1122+
10821123class AdForm (forms .Form ):
10831124 ad = forms .ModelChoiceField (Person .objects .filter (role__name = "ad" , role__group__state = "active" ).order_by ('name' ),
10841125 label = "Shepherding AD" , empty_label = "(None)" , required = True )
0 commit comments