@@ -1100,3 +1100,99 @@ def request_publication(request, name):
11001100 ),
11011101 context_instance = RequestContext (request ))
11021102
1103+ class AdoptDraftForm (forms .Form ):
1104+ group = forms .ModelChoiceField (queryset = Group .objects .filter (type__in = ["wg" , "rg" ], state = "active" ).order_by ("-type" , "acronym" ), required = True , empty_label = None )
1105+ comment = forms .CharField (widget = forms .Textarea , required = False , label = "Comment" , help_text = "Optional comment explaining the reasons for the adoption" )
1106+ weeks = forms .IntegerField (required = False , label = "Expected weeks in adoption state" )
1107+
1108+ def __init__ (self , * args , ** kwargs ):
1109+ user = kwargs .pop ("user" )
1110+
1111+ super (AdoptDraftForm , self ).__init__ (* args , ** kwargs )
1112+
1113+ if has_role (user , "Secretariat" ):
1114+ pass # all groups
1115+ else :
1116+ self .fields ["group" ].queryset = self .fields ["group" ].queryset .filter (role__person__user = user , role__name__in = ("chair" , "delegate" , "secr" )).distinct ()
1117+
1118+ self .fields ['group' ].choices = [(g .pk , '%s - %s' % (g .acronym , g .name )) for g in self .fields ["group" ].queryset ]
1119+
1120+
1121+ @login_required
1122+ def adopt_draft (request , name ):
1123+ doc = get_object_or_404 (Document , type = "draft" , name = name )
1124+
1125+ if not can_adopt_draft (request .user , doc ):
1126+ return HttpResponseForbidden ("You don't have permission to access this view" )
1127+
1128+ if request .method == 'POST' :
1129+ form = AdoptDraftForm (request .POST , user = request .user )
1130+
1131+ if form .is_valid ():
1132+ # adopt
1133+ by = request .user .get_profile ()
1134+
1135+ save_document_in_history (doc )
1136+
1137+ doc .time = datetime .datetime .now ()
1138+
1139+ group = form .cleaned_data ["group" ]
1140+ comment = form .cleaned_data ["comment" ].strip ()
1141+
1142+ if group .type .slug == "rg" :
1143+ new_stream = StreamName .objects .get (slug = "irtf" )
1144+ adopt_state_slug = "active"
1145+ else :
1146+ new_stream = StreamName .objects .get (slug = "ietf" )
1147+ adopt_state_slug = "c-adopt"
1148+
1149+ if doc .stream != new_stream :
1150+ e = DocEvent (type = "changed_stream" , time = doc .time , by = by , doc = doc )
1151+ e .desc = u"Changed stream to <b>%s</b>" % new_stream .name
1152+ if doc .stream :
1153+ e .desc += u" from %s" % doc .stream .name
1154+ e .save ()
1155+ doc .stream = new_stream
1156+
1157+ if group != doc .group :
1158+ e = DocEvent (type = "changed_group" , time = doc .time , by = by , doc = doc )
1159+ e .desc = u"Changed group to <b>%s (%s)</b>" % (group .name , group .acronym .upper ())
1160+ if doc .group .type_id != "individ" :
1161+ e .desc += " from %s (%s)" % (doc .group .name , doc .group .acronym .upper ())
1162+ e .save ()
1163+ doc .group = group
1164+
1165+ doc .save ()
1166+
1167+ prev_state = doc .get_state ("draft-stream-%s" % doc .stream_id )
1168+ new_state = State .objects .get (slug = adopt_state_slug , type = "draft-stream-%s" % doc .stream_id , used = True )
1169+
1170+ if new_state != prev_state :
1171+ doc .set_state (new_state )
1172+ e = add_state_change_event (doc , by , prev_state , new_state , doc .time )
1173+
1174+ due_date = None
1175+ if form .cleaned_data ["weeks" ] != None :
1176+ due_date = datetime .date .today () + datetime .timedelta (weeks = form .cleaned_data ["weeks" ])
1177+
1178+ update_reminder (doc , "stream-s" , e , due_date )
1179+
1180+ email_stream_state_changed (request , doc , prev_state , new_state , by , comment )
1181+
1182+ if comment :
1183+ e = DocEvent (type = "added_comment" , time = doc .time , by = by , doc = doc )
1184+ e .desc = comment
1185+ e .save ()
1186+
1187+ return HttpResponseRedirect (doc .get_absolute_url ())
1188+ else :
1189+ form = AdoptDraftForm (user = request .user )
1190+
1191+ return render_to_response ('doc/draft/adopt_draft.html' ,
1192+ {'doc' : doc ,
1193+ 'form' : form ,
1194+ },
1195+ context_instance = RequestContext (request ))
1196+
1197+ def change_stream_state (request ):
1198+ pass
0 commit comments