1- from forms import NonWgStep1 , ListReqStep1 , PickApprover , DeletionPickApprover , UrlMultiWidget , Preview , ListReqAuthorized , ListReqClose , MultiEmailField , AdminRequestor , ApprovalComment
2- from models import NonWgMailingList , MailingList
3- from ietf .idtracker .models import Area , PersonOrOrgInfo
1+ from forms import NonWgStep1 , ListReqStep1 , PickApprover , DeletionPickApprover , UrlMultiWidget , Preview , ListReqAuthorized , ListReqClose , MultiEmailField , AdminRequestor , ApprovalComment , ListApprover
2+ from models import NonWgMailingList , MailingList , Domain
3+ from ietf .idtracker .models import Area , PersonOrOrgInfo , AreaDirector , WGChair
44from django import newforms as forms
55from django .shortcuts import get_object_or_404 , render_to_response
66from django .template import RequestContext
@@ -145,7 +145,6 @@ def non_wg_wizard(request):
145145 'add_comment' : None ,
146146 'mail_type' : None ,
147147 'mail_cat' : None ,
148- 'domain_name' : None ,
149148 'admins' : MultiEmailField (label = 'List Administrator(s)' , widget = AdminRequestor (attrs = {'cols' : 41 , 'rows' : 4 })),
150149 'initial' : MultiEmailField (label = 'Initial list member(s)' , widget = forms .Textarea (attrs = {'cols' : 41 , 'rows' : 4 }), required = False ),
151150}
@@ -160,6 +159,7 @@ def non_wg_wizard(request):
160159 'post_who' : forms .Select (choices = (('1' , 'List members only' ), ('0' , 'Open' ))),
161160 'post_admin' : forms .Select (choices = (('0' , 'No' ), ('1' , 'Yes' ))),
162161 'archive_private' : forms .Select (choices = (('0' , 'No' ), ('1' , 'Yes' ))),
162+ 'domain_name' : forms .HiddenInput (),
163163}
164164
165165list_attrs = {
@@ -177,7 +177,18 @@ def non_wg_wizard(request):
177177
178178list_callback = form_decorator (fields = list_fields , widgets = list_widgets , attrs = list_attrs )
179179
180+ def gen_list_approval (approvers , requestor , parent ):
181+ class ListApproval (parent ):
182+ _approvers = approvers
183+ _requestor = requestor
184+ def __init__ (self , * args , ** kwargs ):
185+ super (ListApproval , self ).__init__ (self ._approvers , self ._requestor , * args , ** kwargs )
186+ return ListApproval
187+
180188class ListReqWizard (wizard .Wizard ):
189+ clean_forms = []
190+ main_step = 1
191+ requestor_is_approver = False
181192 def get_template (self ):
182193 templates = []
183194 #if self.step > 0:
@@ -190,22 +201,73 @@ def get_template(self):
190201 templates .append ("mailinglists/list_wizard.html" )
191202 print templates
192203 return templates
204+ def render_template (self , * args , ** kwargs ):
205+ #self.extra_context['clean_forms'] = self.clean_forms
206+ if self .step > self .main_step :
207+ self .extra_context ['main_form' ] = self .clean_forms [self .main_step ]
208+ self .extra_context ['requestor_is_approver' ] = self .requestor_is_approver
209+ return super (ListReqWizard , self ).render_template (* args , ** kwargs )
193210 # want to implement parse_params to get domain for list
194211 def process_step (self , request , form , step ):
195212 form .full_clean ()
196213 if step == 0 :
197214 self .clean_forms = [ form ]
198215 else :
199216 self .clean_forms .append (form )
217+ form0 = self .clean_forms [0 ]
218+ needs_auth = form0 .clean_data ['mail_type' ].endswith ('non' ) and form0 .clean_data ['domain_name' ] != 'ietf.org'
200219 if step == 0 :
201- if form .clean_data ['mail_type' ].endswith ('non' ) and form .clean_data ['domain_name' ] != 'ietf.org' :
220+ self .main_step = 1
221+ if needs_auth :
202222 self .form_list .append (ListReqAuthorized )
223+ self .main_step = 2
203224 if form .clean_data ['mail_type' ].startswith ('close' ):
204225 self .form_list .append (ListReqClose )
226+ if form .clean_data ['mail_type' ] == 'closewg' :
227+ self .initial [self .main_step ] = {'mlist_name' : form .clean_data ['group' ]}
228+ else :
229+ self .initial [self .main_step ] = {'mlist_name' : form .clean_data ['list_to_close' ]}
205230 else :
206231 self .form_list .append (forms .form_for_model (MailingList , formfield_callback = list_callback ))
207- #XXX not quite
232+ if form .clean_data ['mail_type' ].endswith ('wg' ):
233+ self .initial [self .main_step ] = {'mlist_name' : form .clean_data ['group' ]}
234+ else :
235+ self .initial [self .main_step ] = {}
236+ if form .clean_data ['mail_type' ].endswith ('wg' ):
237+ self .initial [self .main_step ].update ({'domain_name' : 'ietf.org' })
238+ else :
239+ self .initial [self .main_step ].update ({'domain_name' : form .clean_data ['domain_name' ]})
240+ if step == self .main_step :
241+ approvers = mlist_approvers (form0 .clean_data ['mail_type' ], form0 .clean_data ['domain_name' ], form0 .clean_data ['group' ])
242+ main_form = self .clean_forms [self .main_step ]
243+ requestor_email = main_form .clean_data ['requestor_email' ]
244+ requestor_person = None
245+ for a in approvers :
246+ if requestor_email == a .person .email ()[1 ]:
247+ requestor_person = a
248+ self .requestor_is_approver = True
249+ self .form_list .append (gen_list_approval (approvers , requestor_person , ListApprover ))
208250 super (ListReqWizard , self ).process_step (request , form , step )
251+ def done (self , request , form_list ):
252+ list = MailingList (** self .clean_forms [self .main_step ].clean_data )
253+ list .mailing_list_id = None # make sure that we create a new row
254+ list .auth_person_id = int (self .clean_forms [self .main_step + 1 ].clean_data ['approver' ])
255+ list .mail_type = MailingList .MAILTYPE_MAP [self .clean_forms [0 ].clean_data ['mail_type' ]]
256+ list .approved = 0
257+ list .save ()
258+ approver_email = list .auth_person .email ()
259+ send_mail_subj (request , [ approver_email ], None , 'mailinglists/list_wizard_subject.txt' , 'mailinglists/list_wizard_done_email.txt' , {'list' : list , 'forms' : self .clean_forms , 'requestor_is_approver' : self .requestor_is_approver })
260+ return render_to_response ('mailinglists/list_wizard_done.html' , {'list' : list , 'forms' : self .clean_forms , 'requestor_is_approver' : self .requestor_is_approver }, context_instance = RequestContext (request ) )
261+
262+ def mlist_approvers (mail_type , domain_name , group ):
263+ approvers = []
264+ if domain_name == 'ietf.org' :
265+ approvers += AreaDirector .objects .filter (area__status = Area .ACTIVE )
266+ if mail_type .endswith ('wg' ):
267+ approvers += WGChair .objects .filter (group_acronym = group )
268+ domain = Domain .objects .get (domain = domain_name )
269+ approvers += domain .approvers .all ()
270+ return approvers
209271
210272def list_req_wizard (request ):
211273 wiz = ListReqWizard ([ ListReqStep1 ])
0 commit comments