Add preview and done to NonWgWizard.
- Legacy-Id: 161
This commit is contained in:
parent
0ceb9e2b0c
commit
b8aa94d007
|
@ -89,6 +89,8 @@ class UrlMultiWidget(forms.MultiWidget):
|
||||||
|
|
||||||
# If we have two widgets, return the concatenation of the values
|
# If we have two widgets, return the concatenation of the values
|
||||||
# (Except, if _0 is "n/a" then return an empty string)
|
# (Except, if _0 is "n/a" then return an empty string)
|
||||||
|
# _0 might not exist if no radio button is selected (i.e., an
|
||||||
|
# empty form), so return empty string.
|
||||||
# Otherwise, just return the value.
|
# Otherwise, just return the value.
|
||||||
def value_from_datadict(self, data, name):
|
def value_from_datadict(self, data, name):
|
||||||
try:
|
try:
|
||||||
|
@ -97,7 +99,10 @@ class UrlMultiWidget(forms.MultiWidget):
|
||||||
return ''
|
return ''
|
||||||
return scheme + data[name + '_1']
|
return scheme + data[name + '_1']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return data[name]
|
try:
|
||||||
|
return data[name]
|
||||||
|
except KeyError:
|
||||||
|
return ''
|
||||||
|
|
||||||
class PickApprover(forms.Form):
|
class PickApprover(forms.Form):
|
||||||
"""
|
"""
|
||||||
|
@ -114,3 +119,7 @@ class DeletionPickApprover(PickApprover):
|
||||||
ds_name = forms.CharField(label = 'Enter your name', widget = forms.TextInput(attrs = {'size': 45}))
|
ds_name = forms.CharField(label = 'Enter your name', widget = forms.TextInput(attrs = {'size': 45}))
|
||||||
ds_email = forms.EmailField(label = 'Enter your email', widget = forms.TextInput(attrs = {'size': 45}))
|
ds_email = forms.EmailField(label = 'Enter your email', widget = forms.TextInput(attrs = {'size': 45}))
|
||||||
msg_to_ad = forms.CharField(label = 'Message to the Area Director', widget = forms.Textarea(attrs = {'rows': 5, 'cols': 50}))
|
msg_to_ad = forms.CharField(label = 'Message to the Area Director', widget = forms.Textarea(attrs = {'rows': 5, 'cols': 50}))
|
||||||
|
|
||||||
|
# A form with no required fields, to allow a preview action
|
||||||
|
class Preview(forms.Form):
|
||||||
|
preview = forms.BooleanField(required=False)
|
||||||
|
|
|
@ -1,9 +1,27 @@
|
||||||
from forms import NonWgStep1, ListReqStep1, PickApprover, DeletionPickApprover, UrlMultiWidget
|
from forms import NonWgStep1, ListReqStep1, PickApprover, DeletionPickApprover, UrlMultiWidget, Preview
|
||||||
from models import NonWgMailingList
|
from models import NonWgMailingList
|
||||||
from ietf.idtracker.models import Areas
|
from ietf.idtracker.models import Areas, PersonOrOrgInfo
|
||||||
from django import newforms as forms
|
from django import newforms as forms
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
|
from django.template import RequestContext
|
||||||
from ietf.contrib import wizard, form_decorator
|
from ietf.contrib import wizard, form_decorator
|
||||||
|
from ietf.utils.mail import send_mail
|
||||||
|
|
||||||
|
def formchoice(form, field):
|
||||||
|
if not(form.is_valid()):
|
||||||
|
return None
|
||||||
|
d = str(form.clean_data[field])
|
||||||
|
for k, v in form.fields[field].choices:
|
||||||
|
if str(k) == d:
|
||||||
|
return v
|
||||||
|
# oddly, one of the forms stores the translated value
|
||||||
|
# in clean_data; the other stores the key. This second
|
||||||
|
# if wouldn't be needed if both stored the key.
|
||||||
|
# This whole function wouldn't be needed if both stored
|
||||||
|
# the value.
|
||||||
|
if str(v) == d:
|
||||||
|
return v
|
||||||
|
return None
|
||||||
|
|
||||||
nonwg_fields = {
|
nonwg_fields = {
|
||||||
'id': None,
|
'id': None,
|
||||||
|
@ -41,22 +59,35 @@ def gen_approval(approvers, parent):
|
||||||
return BoundApproval
|
return BoundApproval
|
||||||
|
|
||||||
class NonWgWizard(wizard.Wizard):
|
class NonWgWizard(wizard.Wizard):
|
||||||
form0 = None
|
clean_forms = []
|
||||||
def get_template(self):
|
def get_template(self):
|
||||||
templates = []
|
templates = []
|
||||||
if self.form0:
|
if self.step > 0:
|
||||||
action = {'add': 'addedit', 'edit': 'addedit', 'delete': 'delete'}[self.form0.clean_data['add_edit']]
|
action = {'add': 'addedit', 'edit': 'addedit', 'delete': 'delete'}[self.clean_forms[0].clean_data['add_edit']]
|
||||||
templates.append("mailinglists/nwg_wizard_%s_step%d.html" % (action, self.step))
|
templates.append("mailinglists/nwg_wizard_%s_step%d.html" % (action, self.step))
|
||||||
templates.append("mailinglists/nwg_wizard_%s.html" % (action))
|
templates.append("mailinglists/nwg_wizard_%s.html" % (action))
|
||||||
templates.append("mailinglists/nwg_wizard_step%d.html" % (self.step))
|
templates.append("mailinglists/nwg_wizard_step%d.html" % (self.step))
|
||||||
templates.append("mailinglists/nwg_wizard.html")
|
templates.append("mailinglists/nwg_wizard.html")
|
||||||
return templates
|
return templates
|
||||||
|
def render_template(self, *args, **kwargs):
|
||||||
|
self.extra_context['clean_forms'] = self.clean_forms
|
||||||
|
if self.step == 3:
|
||||||
|
form0 = self.clean_forms[0]
|
||||||
|
add_edit = form0.clean_data['add_edit']
|
||||||
|
if add_edit == 'add' or add_edit == 'edit':
|
||||||
|
# Can't get the choice mapping directly from the form
|
||||||
|
self.extra_context['area'] = formchoice(self.clean_forms[1], 'area')
|
||||||
|
self.extra_context['approver'] = formchoice(self.clean_forms[2], 'approver')
|
||||||
|
print "formchoice for area = %s" % formchoice(self.clean_forms[1], 'area')
|
||||||
|
else:
|
||||||
|
print "add_edit = %s" % add_edit
|
||||||
|
return super(NonWgWizard, self).render_template(*args, **kwargs)
|
||||||
def failed_hash(self, step):
|
def failed_hash(self, step):
|
||||||
raise NotImplementedError("step %d hash failed" % step)
|
raise NotImplementedError("step %d hash failed" % step)
|
||||||
def process_step(self, request, form, step):
|
def process_step(self, request, form, step):
|
||||||
form.full_clean()
|
form.full_clean()
|
||||||
if step == 0:
|
if step == 0:
|
||||||
self.form0 = form
|
self.clean_forms = [ form ]
|
||||||
if form.clean_data['add_edit'] == 'add':
|
if form.clean_data['add_edit'] == 'add':
|
||||||
self.form_list.append(forms.form_for_model(NonWgMailingList, formfield_callback=nonwg_callback))
|
self.form_list.append(forms.form_for_model(NonWgMailingList, formfield_callback=nonwg_callback))
|
||||||
elif form.clean_data['add_edit'] == 'edit':
|
elif form.clean_data['add_edit'] == 'edit':
|
||||||
|
@ -64,14 +95,28 @@ class NonWgWizard(wizard.Wizard):
|
||||||
elif form.clean_data['add_edit'] == 'delete':
|
elif form.clean_data['add_edit'] == 'delete':
|
||||||
list = NonWgMailingList.objects.get(pk=form.clean_data['list_id_delete'])
|
list = NonWgMailingList.objects.get(pk=form.clean_data['list_id_delete'])
|
||||||
self.form_list.append(gen_approval([ad.person_id for ad in list.area.areadirectors_set.all()], DeletionPickApprover))
|
self.form_list.append(gen_approval([ad.person_id for ad in list.area.areadirectors_set.all()], DeletionPickApprover))
|
||||||
|
self.form_list.append(Preview)
|
||||||
|
else:
|
||||||
|
self.clean_forms.append(form)
|
||||||
if step == 1:
|
if step == 1:
|
||||||
form0 = self.get_form(0, request.POST)
|
form0 = self.clean_forms[0]
|
||||||
form0.full_clean()
|
|
||||||
self.form0 = form0
|
|
||||||
add_edit = form0.clean_data['add_edit']
|
add_edit = form0.clean_data['add_edit']
|
||||||
if add_edit == 'add' or add_edit == 'edit':
|
if add_edit == 'add' or add_edit == 'edit':
|
||||||
self.form_list.append(gen_approval([ad.person_id for ad in Areas.objects.get(area_acronym=form.clean_data['area']).areadirectors_set.all()], PickApprover))
|
self.form_list.append(gen_approval([ad.person_id for ad in Areas.objects.get(area_acronym=form.clean_data['area']).areadirectors_set.all()], PickApprover))
|
||||||
|
self.form_list.append(Preview)
|
||||||
super(NonWgWizard, self).process_step(request, form, step)
|
super(NonWgWizard, self).process_step(request, form, step)
|
||||||
|
def done(self, request, form_list):
|
||||||
|
add_edit = self.clean_forms[0].clean_data['add_edit']
|
||||||
|
# save row to database properly
|
||||||
|
if add_edit == 'add' or add_edit == 'edit':
|
||||||
|
template = 'mailinglists/nwg_addedit_email.txt'
|
||||||
|
approver = self.clean_forms[2].clean_data['approver']
|
||||||
|
else:
|
||||||
|
template = 'mailinglists/nwg_delete_email.txt'
|
||||||
|
approver = self.clean_forms[1].clean_data['approver']
|
||||||
|
approver_email = PersonOrOrgInfo.objects.get(pk=approver).email()
|
||||||
|
send_mail(request, [ approver_email ], None, 'Request to %s on the Non-WG Mailing List Web Page' % add_edit, template, {'forms': self.clean_forms})
|
||||||
|
return render_to_response( 'mailinglists/nwg_wizard_done.html', {'forms': self.clean_forms}, context_instance=RequestContext(request) )
|
||||||
|
|
||||||
def non_wg_wizard(request):
|
def non_wg_wizard(request):
|
||||||
wiz = NonWgWizard([ NonWgStep1 ])
|
wiz = NonWgWizard([ NonWgStep1 ])
|
||||||
|
|
4
ietf/templates/mailinglists/nwg_addedit_email.txt
Normal file
4
ietf/templates/mailinglists/nwg_addedit_email.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
This is a request to add or edit a non-wg list.
|
||||||
|
|
||||||
|
I got {{ forms }}
|
||||||
|
|
4
ietf/templates/mailinglists/nwg_delete_email.txt
Normal file
4
ietf/templates/mailinglists/nwg_delete_email.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
This is a request to delete a non-wg list.
|
||||||
|
|
||||||
|
I got {{ forms }}
|
||||||
|
|
|
@ -11,4 +11,6 @@
|
||||||
<input type="submit">
|
<input type="submit">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
clean_forms: {{ clean_forms|escape }}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
46
ietf/templates/mailinglists/nwg_wizard_addedit_step3.html
Normal file
46
ietf/templates/mailinglists/nwg_wizard_addedit_step3.html
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{% extends "mailinglists/nwg_wizard_base.html" %}
|
||||||
|
|
||||||
|
{% block nwgcontent %}
|
||||||
|
<h2>Step 4</h2>
|
||||||
|
<h4>Please verify the following information:</h4>
|
||||||
|
<form action="." method="POST">
|
||||||
|
<table bgcolor="#88AED2" cellspacing="1" border="0">
|
||||||
|
<tr valign="top"><td>
|
||||||
|
<table bgcolor="#f3f8fd" cellpadding="3" cellspacing="0" border="0">
|
||||||
|
<tr valign="top">
|
||||||
|
<td colspan=2>
|
||||||
|
<h3>Request Submit Confirmation</h3>
|
||||||
|
Please review the following information that you are about to submit.<br>
|
||||||
|
Once you click the 'Submit' button below, this request will be sent to
|
||||||
|
the selected Area Director for approval.<br>
|
||||||
|
<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr valign="top"><td>Request Type:</td><td>
|
||||||
|
{% ifequal clean_forms.0.add_edit "add" %}
|
||||||
|
Adding a new entry
|
||||||
|
{% else %}
|
||||||
|
Editing an existing entry
|
||||||
|
{% endifequal %}</td></tr>
|
||||||
|
<tr valign="top"><td>Submitter's Name:</td><td>{{ clean_forms.1.s_name.data|escape }}</td></tr>
|
||||||
|
<tr valign="top"><td>Submitter's Email Address:</td><td>{{ clean_forms.1.s_email.data|escape }}</td></tr>
|
||||||
|
<tr valign="top"><td>Mailing List Name:</td><td>{{ clean_forms.1.list_name.data|escape }}</td></tr>
|
||||||
|
<tr valign="top"><td>URL or Email Address of Mailing List: </td><td><pre>{{ clean_forms.1.list_url.data|escape }}</pre></td></tr>
|
||||||
|
<tr valign="top"><td>URL to Subscribe: </td><td><pre>{% firstof clean_forms.1.subscribe_url.data "Not Applicable" %}</pre></td></tr>
|
||||||
|
<tr valign="top"><td>Other Info. to Subscribe: </td><td><pre>{{ clean_forms.1.subscribe_other.data|escape }}</pre></td></tr>
|
||||||
|
<tr valign="top"><td>Administrator(s)' Email Address(es): </td><td><pre>{{ clean_forms.1.admin.data|escape|linebreaks }}</pre></td></tr>
|
||||||
|
<tr valign="top"><td>Purpose: </td><td>{{ clean_forms.1.purpose.data|escape }}</td></tr>
|
||||||
|
<tr valign="top"><td>Area: </td><td><pre>{{ area }}</pre></td></tr>
|
||||||
|
<tr valign="top"><td>Approving Area Director: </td><td><pre>{{ approver|escape }}</pre></td></tr>
|
||||||
|
<tr valign="top">
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<input type="submit" value=" Submit ">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</table>
|
||||||
|
{{ previous_fields }}
|
||||||
|
<input type="hidden" name="{{ step_field }}" value="{{ step }}" />
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
Loading…
Reference in a new issue