11# Copyright The IETF Trust 2007, All Rights Reserved
22
3- from forms import NonWgStep1 , ListReqStep1 , PickApprover , DeletionPickApprover , UrlMultiWidget , Preview , ListReqAuthorized , ListReqClose , MultiEmailField , AdminRequestor , ApprovalComment , ListApprover , SelectWidgetArea
3+ from forms import NonWgStep1 , ListReqStep1 , PickApprover , DeletionPickApprover , UrlMultiWidget , Preview , ListReqAuthorized , ListReqClose , MultiEmailField , AdminRequestor , ApprovalComment , ListApprover , LooseModelChoiceField
44from models import NonWgMailingList , MailingList , Domain
55from ietf .idtracker .models import Area , PersonOrOrgInfo , AreaDirector , WGChair , Role
6- from ietf .mailinglists import CODE_AREA
76from django import newforms as forms
87from django .shortcuts import get_object_or_404 , render_to_response
98from django .template import RequestContext
1312from ietf .utils .mail import send_mail_subj
1413from datetime import datetime
1514
15+ def get_approvers_from_area (area_id ) :
16+ if area_id == "none" :
17+ return [ad .person_id for ad in Role .objects .filter (role_name__in = ("IETF" , "IAB" , ))]
18+ else :
19+ return [ad .person_id for ad in Area .objects .get (area_acronym = area_id ).areadirector_set .all ()]
20+
1621def formchoice (form , field ):
1722 if not (form .is_valid ()):
1823 return None
19-
20- if field == "area" and str (form .clean_data [field ]) in CODE_AREA .values () :
21- for k , v in CODE_AREA .iteritems () :
22- if v == str (form .clean_data [field ]) :
23- return k
24-
2524 d = str (form .clean_data [field ])
2625 for k , v in form .fields [field ].choices :
2726 if str (k ) == d :
@@ -56,14 +55,12 @@ def formchoice(form, field):
5655 'purpose' : forms .Textarea (attrs = {'rows' : 4 , 'cols' : 70 }),
5756 'subscribe_url' : UrlMultiWidget (choices = (('n/a' , 'Not Applicable' ), ('http://' , 'http://' ), ('https://' , 'https://' )), attrs = {'size' : 50 }),
5857 'subscribe_other' : forms .Textarea (attrs = {'rows' : 3 , 'cols' : 50 }),
59- 'area' : SelectWidgetArea (),
6058}
6159
6260nonwg_querysets = {
63- 'area' : Area .objects .filter (status = 1 )
61+ # 'area': Area.objects.filter(status=1)
6462}
6563
66- nonwg_callback = form_decorator (fields = nonwg_fields , widgets = nonwg_widgets , attrs = nonwg_attrs , querysets = nonwg_querysets )
6764
6865def gen_approval (approvers , parent ):
6966 class BoundApproval (parent ):
@@ -102,37 +99,33 @@ def render_template(self, *args, **kwargs):
10299# def failed_hash(self, request, step):
103100# raise NotImplementedError("step %d hash failed" % step)
104101 def process_step (self , request , form , step ):
102+
105103 form .full_clean ()
104+
106105 if step == 0 :
107106 self .clean_forms = [ form ]
108107 if form .clean_data ['add_edit' ] == 'add' :
108+ nonwg_fields ["area" ] = LooseModelChoiceField (Area .objects .filter (status = 1 ))
109+ nonwg_callback = form_decorator (fields = nonwg_fields , widgets = nonwg_widgets , attrs = nonwg_attrs , querysets = nonwg_querysets )
110+
109111 self .form_list .append (forms .form_for_model (NonWgMailingList , formfield_callback = nonwg_callback ))
110112 elif form .clean_data ['add_edit' ] == 'edit' :
111- self .form_list .append (forms .form_for_instance (NonWgMailingList .objects .get (pk = form .clean_data ['list_id' ]), formfield_callback = nonwg_callback ))
113+ list = NonWgMailingList .objects .get (pk = form .clean_data ['list_id' ])
114+ nonwg_fields ["area" ] = LooseModelChoiceField (Area .objects .filter (status = 1 ), initial = list .area_id is None and "none" or list .area_id )
115+ nonwg_callback = form_decorator (fields = nonwg_fields , widgets = nonwg_widgets , attrs = nonwg_attrs , querysets = nonwg_querysets )
116+
117+ self .form_list .append (forms .form_for_instance (list , formfield_callback = nonwg_callback ))
112118 elif form .clean_data ['add_edit' ] == 'delete' :
113119 list = NonWgMailingList .objects .get (pk = form .clean_data ['list_id_delete' ])
114- if str (list .area_id ) in CODE_AREA .values () :
115- __list_persons = [r .person .person_or_org_tag for r in Role .objects .filter (role_name__in = ("IETF" , "IAB" ))]
116- else :
117- __list_persons = [ad .person_id for ad in list .area .areadirector_set .all ()]
118-
119- self .form_list .append (gen_approval (__list_persons , DeletionPickApprover ))
120-
120+ self .form_list .append (gen_approval (get_approvers_from_area (list .area is None and "none" or list .area_id ), DeletionPickApprover ))
121121 self .form_list .append (Preview )
122122 else :
123123 self .clean_forms .append (form )
124124 if step == 1 :
125125 form0 = self .clean_forms [0 ]
126126 add_edit = form0 .clean_data ['add_edit' ]
127127 if add_edit == 'add' or add_edit == 'edit' :
128- # if area value is in CODE_AREA, approval person must be in 'IETF' and 'IAB'.
129- if str (form .clean_data ["area" ]) in CODE_AREA .values () :
130- __list_persons = [r .person .person_or_org_tag for r in Role .objects .filter (role_name__in = ("IETF" , "IAB" ))]
131- else :
132- __list_persons = [ad .person_id for ad in Area .objects .get (area_acronym = form .clean_data ['area' ]).areadirector_set .all ()]
133-
134- self .form_list .append (gen_approval (__list_persons , PickApprover ))
135-
128+ self .form_list .append (gen_approval (get_approvers_from_area (form .clean_data ['area' ]), PickApprover ))
136129 self .form_list .append (Preview )
137130 super (NonWgWizard , self ).process_step (request , form , step )
138131 def done (self , request , form_list ):
@@ -142,6 +135,9 @@ def done(self, request, form_list):
142135 if add_edit == 'add' or add_edit == 'edit' :
143136 template = 'mailinglists/nwg_addedit_email.txt'
144137 approver = self .clean_forms [2 ].clean_data ['approver' ]
138+ if self .clean_forms [1 ].clean_data ["area" ] == "none" :
139+ self .clean_forms [1 ].clean_data ["area" ] = None
140+
145141 list = NonWgMailingList (** self .clean_forms [1 ].clean_data )
146142 list .__dict__ .update (self .clean_forms [2 ].clean_data )
147143 list .id = None # create a new row no matter what
0 commit comments