Retired non-WG mailing list update submission tool

- Legacy-Id: 1825
This commit is contained in:
Pasi Eronen 2009-11-07 12:34:11 +00:00
parent b6a2aeff5f
commit 0f81d3e01a
16 changed files with 16 additions and 670 deletions

View file

@ -1,103 +0,0 @@
# Copyright The IETF Trust 2007, All Rights Reserved
from django import newforms as forms
from models import NonWgMailingList
from ietf.idtracker.models import PersonOrOrgInfo
import re
class NonWgStep1(forms.Form):
add_edit = forms.ChoiceField(choices=(
('add', 'Add a new entry'),
('edit', 'Modify an existing entry'),
('delete', 'Delete an existing entry'),
), widget=forms.RadioSelect)
list_id = forms.ChoiceField(required=False)
list_id_delete = forms.ChoiceField(required=False)
def __init__(self, *args, **kwargs):
super(NonWgStep1, self).__init__(*args, **kwargs)
choices=[('', '--Select a list here')] + NonWgMailingList.choices()
self.fields['list_id'].choices = choices
self.fields['list_id_delete'].choices = choices
def clean_list_id(self):
if self.clean_data.get('add_edit', None) == 'edit':
if not self.clean_data.get('list_id'):
raise forms.ValidationError, 'Please pick a mailing list to modify'
return self.clean_data['list_id']
def clean_list_id_delete(self):
if self.clean_data.get('add_edit', None) == 'delete':
if not self.clean_data.get('list_id_delete'):
raise forms.ValidationError, 'Please pick a mailing list to delete'
return self.clean_data['list_id_delete']
# multiwidget for separate scheme and rest for urls
class UrlMultiWidget(forms.MultiWidget):
def decompress(self, value):
if value:
if '//' in value:
(scheme, rest) = value.split('//', 1)
scheme += '//'
else:
scheme = 'http://'
rest = value
return [scheme, rest]
else:
return ['', '']
def __init__(self, choices=(('http://', 'http://'), ('https://', 'https://')), attrs=None):
widgets = (forms.RadioSelect(choices=choices, attrs=attrs), forms.TextInput(attrs=attrs))
super(UrlMultiWidget, self).__init__(widgets, attrs)
def format_output(self, rendered_widgets):
return u'%s\n%s\n<br/>' % ( u'<br/>\n'.join(["%s" % w for w in rendered_widgets[0]]), rendered_widgets[1] )
# If we have two widgets, return the concatenation of the values
# (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.
def value_from_datadict(self, data, name):
try:
scheme = data[name + '_0']
if scheme == 'n/a':
return ''
return scheme + data[name + '_1']
except KeyError:
try:
return data[name]
except KeyError:
return ''
class PickApprover(forms.Form):
"""
When instantiating, supply a list of person tags in approvers=
"""
approver = forms.ChoiceField(choices=(
('', '-- Pick an approver from the list below'),
))
def __init__(self, approvers, *args, **kwargs):
super(PickApprover, self).__init__(*args, **kwargs)
self.fields['approver'].choices = [('', '-- Pick an approver from the list below')] + [(person.person_or_org_tag, str(person)) for person in PersonOrOrgInfo.objects.filter(pk__in=approvers)]
class DeletionPickApprover(PickApprover):
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}))
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)
pass
class MultiEmailField(forms.CharField):
'''Ensure that each of a carraige-return-separated
list of e-mail addresses is valid.'''
def clean(self, value):
value = super(MultiEmailField, self).clean(value)
bad = list()
for addr in value.split("\n"):
addr = addr.strip()
if addr != '' and not(forms.fields.email_re.search(addr)):
bad.append(addr)
if len(bad) > 0:
raise forms.ValidationError, "The following email addresses seem to be invalid: %s" % ", ".join(["'" + addr + "'" for addr in bad])
return value

View file

@ -42,16 +42,6 @@ class NonWgMailingList(models.Model):
msg_to_ad = models.TextField(blank=True)
def __str__(self):
return self.list_name
def save(self, *args, **kwargs):
if self.id is None:
generate = True
while generate:
self.id = ''.join([random.choice('0123456789abcdefghijklmnopqrstuvwxyz') for i in range(35)])
try:
NonWgMailingList.objects.get(pk=self.id)
except NonWgMailingList.DoesNotExist:
generate = False
super(NonWgMailingList, self).save(*args, **kwargs)
def choices():
return [(list.id, list.list_name) for list in NonWgMailingList.objects.all().filter(status__gt=0)]
choices = staticmethod(choices)

View file

@ -30,47 +30,9 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import unittest
import re
from django.test.client import Client
from ietf.utils.test_utils import RealDatabaseTest
from ietf.utils.test_utils import SimpleUrlTestCase
class MailingListsUrlTestCase(SimpleUrlTestCase):
def testUrls(self):
self.doTestUrls(__file__)
class NonWgWizardAddTest(unittest.TestCase):
def testAddStep1(self):
print "Testing /list/nonwg/update/ add step 1"
c = Client()
response = c.post('/list/nonwg/update/', {'0-add_edit':'add'})
self.assertEquals(response.status_code, 200)
self.assert_('input type="hidden" name="hash_0"' in response.content)
self.assert_("Step 2" in response.content)
self.assert_("List URL:" in response.content)
class NonWgWizardDeleteTest(unittest.TestCase, RealDatabaseTest):
def setUp(self):
self.setUpRealDatabase()
def tearDown(self):
self.tearDownRealDatabase()
def testDeleteStep1(self):
print "Testing /list/nonwg/update/ delete step 1"
# First, get one valid list_id
c = Client()
response = c.get('/list/nonwg/update/')
self.assertEquals(response.status_code, 200)
p = re.compile(r'option value="(.+)">secdir', re.IGNORECASE)
m = p.search(response.content)
self.assert_(m != None)
list_id = m.group(1)
#print "Using list_id "+list_id
# Then attempt deleting it
response = c.post('/list/nonwg/update/', {'0-add_edit':'delete', '0-list_id_delete':list_id})
self.assertEquals(response.status_code, 200)
self.assert_('input type="hidden" name="hash_0"' in response.content)
self.assert_('Message to the Area Director' in response.content)

View file

@ -1,5 +1,5 @@
200 /list/area/
200 /list/wg/
200 /list/nonwg/
200 /list/nonwg/update/
301 /list/nonwg/update/
200 /list/request/

View file

@ -1,17 +1,15 @@
# Copyright The IETF Trust 2007, All Rights Reserved
from django.conf.urls.defaults import patterns
from ietf.idtracker.models import Area
from ietf.mailinglists import views
from ietf.idtracker.models import Area, IETFWG
from ietf.mailinglists.models import NonWgMailingList
#from ietf.mailinglists.forms import NonWgStep1
urlpatterns = patterns('django.views.generic.list_detail',
(r'^area/$', 'object_list', { 'queryset': Area.objects.filter(status=1).select_related().order_by('acronym.acronym'), 'template_name': 'mailinglists/areas_list.html' }),
(r'^nonwg/$', 'object_list', { 'queryset': NonWgMailingList.objects.filter(status__gt=0) }),
(r'wg/$', 'object_list', { 'queryset': IETFWG.objects.filter(email_archive__startswith='http'), 'template_name': 'mailinglists/wgwebmail_list.html' }),
)
urlpatterns += patterns('',
(r'^nonwg/update/$', views.non_wg_wizard),
(r'^nonwg/update/$', 'django.views.generic.simple.redirect_to', { 'url': 'http://datatracker.ietf.org/list/nonwg/'}),
(r'^request/$', 'django.views.generic.simple.direct_to_template', { 'template': 'mailinglists/instructions.html' }),
(r'^wg/$', views.list_wgwebmail),
)

View file

@ -1,155 +1,2 @@
# Copyright The IETF Trust 2007, All Rights Reserved
from forms import NonWgStep1, PickApprover, DeletionPickApprover, UrlMultiWidget, Preview
from models import NonWgMailingList
from ietf.idtracker.models import Area, PersonOrOrgInfo, Role, IETFWG
from django import newforms as forms
from django.shortcuts import render_to_response
from django.template import RequestContext
from ietf.contrib import wizard, form_decorator
from ietf.utils.mail import send_mail_subj
def get_approvers_from_area (area_id) :
if not area_id :
return [ad.person_id for ad in Role.objects.filter(role_name__in=("IETF", "IAB", ))]
else :
return [ad.person_id for ad in Area.objects.get(area_acronym=area_id).areadirector_set.all()]
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 = {
'id': None,
'status': None,
'ds_name': None,
'ds_email': None,
'msg_to_ad': None,
'area': forms.ModelChoiceField(Area.objects.filter(status=1), required=False, empty_label='none'),
}
nonwg_attrs = {
's_name': {'size': 50},
's_email': {'size': 50},
'list_name': {'size': 80},
}
nonwg_widgets = {
'list_url': UrlMultiWidget(choices=(('http://', 'http://'), ('https://', 'https://'), ('mailto:', 'mailto:')), attrs = {'size': 50}),
'admin': forms.Textarea(attrs = {'rows': 3, 'cols': 50}),
'purpose': forms.Textarea(attrs = {'rows': 4, 'cols': 70}),
'subscribe_url': UrlMultiWidget(choices=(('n/a', 'Not Applicable'), ('http://', 'http://'), ('https://', 'https://')), attrs = {'size': 50}),
'subscribe_other': forms.Textarea(attrs = {'rows': 3, 'cols': 50}),
}
nonwg_callback = form_decorator(fields=nonwg_fields, widgets=nonwg_widgets, attrs=nonwg_attrs)
def gen_approval(approvers, parent):
class BoundApproval(parent):
_approvers = approvers
def __init__(self, *args, **kwargs):
super(BoundApproval, self).__init__(self._approvers, *args, **kwargs)
return BoundApproval
class NonWgWizard(wizard.Wizard):
clean_forms = []
def get_template(self):
templates = []
if self.step > 0:
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.html" % (action))
templates.append("mailinglists/nwg_wizard_step%d.html" % (self.step))
templates.append("mailinglists/nwg_wizard.html")
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')
if self.step == 2:
form0 = self.clean_forms[0]
add_edit = form0.clean_data['add_edit']
if add_edit == 'delete':
self.extra_context['list_q'] = NonWgMailingList.objects.get(pk=self.clean_forms[0].clean_data['list_id_delete'])
self.extra_context['approver'] = formchoice(self.clean_forms[1], 'approver')
return super(NonWgWizard, self).render_template(*args, **kwargs)
# def failed_hash(self, request, step):
# raise NotImplementedError("step %d hash failed" % step)
def process_step(self, request, form, step):
form.full_clean()
if step == 0:
self.clean_forms = [ form ]
if form.clean_data['add_edit'] == 'add':
self.form_list.append(forms.form_for_model(NonWgMailingList, formfield_callback=nonwg_callback))
elif form.clean_data['add_edit'] == 'edit':
list = NonWgMailingList.objects.get(pk=form.clean_data['list_id'])
f = forms.form_for_instance(list, formfield_callback=nonwg_callback)
# form_decorator's method of copying the initial data
# from form_for_instance() to the ModelChoiceField doesn't
# work, so we set it explicitly here.
f.base_fields['area'].initial = list.area_id
self.form_list.append(f)
elif form.clean_data['add_edit'] == 'delete':
list = NonWgMailingList.objects.get(pk=form.clean_data['list_id_delete'])
self.form_list.append(gen_approval(get_approvers_from_area(list.area is None or list.area_id), DeletionPickApprover))
self.form_list.append(Preview)
else:
self.clean_forms.append(form)
if step == 1:
form0 = self.clean_forms[0]
add_edit = form0.clean_data['add_edit']
if add_edit == 'add' or add_edit == 'edit':
self.form_list.append(gen_approval(get_approvers_from_area(form.clean_data['area']), PickApprover))
self.form_list.append(Preview)
super(NonWgWizard, self).process_step(request, form, step)
def done(self, request, form_list):
add_edit = self.clean_forms[0].clean_data['add_edit']
list = None
old = None
if add_edit == 'add' or add_edit == 'edit':
template = 'mailinglists/nwg_addedit_email.txt'
approver = self.clean_forms[2].clean_data['approver']
list = NonWgMailingList(**self.clean_forms[1].clean_data)
list.__dict__.update(self.clean_forms[2].clean_data)
list.id = None # create a new row no matter what
list.status = 0
if add_edit == 'edit':
old = NonWgMailingList.objects.get(pk=self.clean_forms[0].clean_data['list_id'])
else:
template = 'mailinglists/nwg_delete_email.txt'
approver = self.clean_forms[1].clean_data['approver']
list = NonWgMailingList.objects.get(pk=self.clean_forms[0].clean_data['list_id_delete'])
list.__dict__.update(self.clean_forms[1].clean_data)
list.status = 1
list.save()
approver_email = PersonOrOrgInfo.objects.get(pk=approver).email()
approver_name = PersonOrOrgInfo.objects.get(pk=approver)
send_mail_subj(request, [ approver_email ], None, 'mailinglists/nwg_wizard_subject.txt', 'mailinglists/nwg_wizard_done_email.txt', {'add_edit': add_edit, 'old': old, 'list': list, 'forms': self.clean_forms})
return render_to_response( 'mailinglists/nwg_wizard_done.html', {'approver': approver_name, 'add_edit': add_edit, 'old': old, 'list': list, 'forms': self.clean_forms}, context_instance=RequestContext(request) )
def non_wg_wizard(request):
wiz = NonWgWizard([ NonWgStep1 ])
return wiz(request)
def list_wgwebmail(request):
wgs = IETFWG.objects.filter(email_archive__startswith='http')
return render_to_response('mailinglists/wgwebmail_list.html', {'object_list': wgs})

View file

@ -1,56 +1,22 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% load ietf_filters %}
<html>
<HEAD><TITLE>IETF Non-WG Mailing Lists</title>
<STYLE TYPE="text/css">
<!--
TD {text-decoration: none; color: #000000; font: 11pt;}
body {
margin:0;
padding:0;
font-style: normal;
}
th {
padding:6px 0px 10px 30px;
line-height:1em;
font-size: 1.0em;
color: #333;
}
/* Links
----------------------------------------------- */
a:link, a:visited {
border-bottom:1px dotted #69f;
color:#36c;
text-decoration:none;
}
a:visited {
border-bottom-color:#969;
color:#36c;
}
a:hover {
border-bottom:1px solid #f00;
color:#f00;
}
a.noline:link, a.noline:visited, a.noline:hover {border-style:none;}
-->
</STYLE>
<head><title>IETF Non-WG Mailing Lists</title>
</head>
<body>
<blockquote>
<center><h2>IETF Non-WG Mailing Lists</h2></center>
<p>This page attempts to list all the active, publicly visible lists that are
considered to be related to the IETF, but are not the main list of any working
group, in alphabetical order by list name.</p>
<p>It includes lists that are for discussion of particular topics, lists
that have belonged to former working groups but are still active, lists that
are specified in the registration rules of some parameter registry as
"forreview," and others of less clear classification.</p>
<p>Mail sent to all these lists is considered an "IETF Contribution" as defined
in RFC 3978, section 1., point C. (formerly known as the NOTE WELL
statement).</p>
"for review," and others of less clear classification.</p>
<p>Mail sent to all these lists is considered an IETF "Contribution"
as defined in RFC 5378, Section 1 (see also the <a href="http://www.ietf.org/about/note-well.html">NOTE WELL</a> statement).</p>
<p>Details of adding lists to this page can be found at the bottom of the
page.</p>
@ -83,8 +49,11 @@ page.</p>
</table>
<p>To add a list, or to update or delete an existing entry, please go to the
<A HREF="{% url ietf.mailinglists.views.non_wg_wizard %}">IETF Non-WG Mailing List Posting Page</a>. When adding a list, please provide the following information:</p>
<p>To add a list, or to update or delete an existing entry, please
send an email to an appropriate Area Director for approval, and ask
him/her to forward the approved request to ietf-action@ietf.org. When
adding a list, please provide the following information:</p>
<ul>
<li>The name and email address of the submitter
<li>The name of the list
@ -94,8 +63,6 @@ page.</p>
<li>The IETF Area to which the list belongs</li>
<li>The URL or other instructions for subscribing to the list</li></ul>
<p>An AD for the specified Area must approve the request to add, update, or delete a listing.
An AD can also request that the listing be changed or removed. </p>
<p>The following types of lists SHOULD be added:</p>
<ul>
<li>Directorates (see also the <a
@ -123,9 +90,5 @@ maintain.</p>
<p>This list is maintained by the IETF Secretariat. The guidelines are set by
the IESG.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</blockquote>
</body>
</html>

View file

@ -1,25 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "mailinglists/nwg_wizard_base.html" %}
{% block nwgcontent %}
<a href="/list/nonwg/"><b>View Current list</b></a><br>
</p><p>
<h2>Step {{ step|add:"1" }}</h2>
<form action="." method="POST">
<input type="hidden" name="{{ step_field }}" value="{{ step }}" />
{{ previous_fields }}
<table bgcolor="#88AED2" cellspacing="1" border="0">
<tr valign="top"><td>
<table bgcolor="#f3f8fd" cellpadding="3" cellspacing="0" border="0">
<tr><td colspan="2">
<h3>Please select approving Area Director: </h3>
</td></tr>
{{ form }}
</table>
</td></tr></table>
<input type="submit">
</form>
{% endblock %}

View file

@ -1,29 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "mailinglists/nwg_wizard_base.html" %}
{% block nwgcss %}
tr > th { text-align: left; vertical-align: top; }
{% endblock %}
{% block nwgcontent %}
<h2>Step {{ step|add:"1" }}</h2>
<h4>Please provide the following information:</h4>
<form action="." method="POST">
<table bgcolor="#88AED2" cellspacing="1" border="0" width="714">
<tr valign="top"><td>
<table bgcolor="#f3f8fd" cellpadding="3" cellspacing="0" border="0">
{{ form }}
<tr>
<td></td>
<td>
<input type="submit" value=" SUBMIT ">
</td>
</tr>
</table>
</td></tr>
</table>
{{ previous_fields }}
<input type="hidden" name="{{ step_field }}" value="{{ step }}" />
</form>
{% endblock %}

View file

@ -1,47 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "mailinglists/nwg_wizard_base.html" %}
{% block nwgcontent %}
<h2>Step {{ step|add:"1" }}</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.data "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 %}

View file

@ -1,26 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{% block title %}IETF Non WG Mailing List Submit Form{% endblock %}
{% block css %}
ul.errorlist { color: red; border: 1px solid red; }
{% block nwgcss %}{% endblock %}
{% endblock %}
{% block head %}
{% block javascript %}{% endblock %}
<link rel="stylesheet" type="text/css" href="http://www.ietf.org/css/base.css" />
{% endblock %}
{% block content %}
<blockquote>
<img src="/images/nwg/mail_title_submission.gif" border="0"><br>
<img src="/images/nwg/t_un1.gif" border="0">
<!-- form step {{ step }} -->
<br>
{% block nwgcontent %}
form goes here
{% endblock %}
</blockquote>
{% endblock %}

View file

@ -1,45 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "mailinglists/nwg_wizard_base.html" %}
{% block nwgcontent %}
<h2>Step {{ step|add:"1" }}</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>
Deleting an existing entry
</td></tr>
<tr valign="top"><td>Submitter's Name:</td><td>{{ clean_forms.1.ds_name.data|escape }}</td></tr>
<tr valign="top"><td>Submitter's Email Address:</td><td>{{ clean_forms.1.ds_email.data|escape }}</td></tr>
<tr valign="top"><td>Mailing List Name:</td><td>{{ list_q.list_name|escape }}</td></tr>
<tr valign="top"><td>URL or Email Address of Mailing List: </td><td><pre>{{ list_url|escape }}</pre></td></tr>
<tr valign="top"><td>URL to Subscribe: </td><td><pre>{% firstof list_q.subscribe_url "Not Applicable" %}</pre></td></tr>
<tr valign="top"><td>Other Info. to Subscribe: </td><td><pre>{{ list_q.subscribe_other|escape }}</pre></td></tr>
<tr valign="top"><td>Administrator(s)' Email Address(es): </td><td><pre>{{ list_q.admin|escape|linebreaks }}</pre></td></tr>
<tr valign="top"><td>Purpose: </td><td>{{ list_q.purpose|escape }}</td></tr>
<tr valign="top"><td>Area: </td><td><pre>{{ list_q.area }}</pre></td></tr>
<tr valign="top"><td>Approving Area Director: </td><td><pre>{{ approver|escape }}</pre></td></tr>
<tr valign="top"><td>Message to AD: </td><td><pre>{{ clean_forms.1.msg_to_ad.data|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 %}

View file

@ -1,43 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "mailinglists/nwg_wizard_base.html" %}
{% block nwgcontent %}
<a href="/list/nonwg/"><b>View Current list</b></a><br>
</p>
<p>
Your request to {% ifequal add_edit "edit" %}edit{% else %}{% ifequal add_edit "add" %}add{% else %}delete{% endifequal %}{% endifequal %} the entry for the Non-WG Mailing List that is described below has been sent to the following Area Director for approval:</p>
<p>
<b>{{ approver|escape }}</b>
</p>
<table cellpadding="0" cellspacing="0" border="0">
{% if old %}
<tr valign="top"><td><b>Current Entry</b></td><td></td></tr>
<tr valign="top"><td>Submitter's Name: </td><td>{{ old.s_name }}</td></tr>
<tr valign="top"><td>Submitter's Email Address: </td><td>{{ old.s_email }}</td></tr>
<tr valign="top"><td>List Name: </td><td>{{ old.list_name }}</td></tr>
<tr valign="top"><td>URL or Email Address of Mailing List: </td><td>{{ old.list_url }}</td></tr>
<tr valign="top"><td>URL to Subscribe: </td><td>{{ old.subscribe_url }}</td></tr>
<tr valign="top"><td>Other Info. to Subscribe: </td><td>{{ old.subscribe_other }}</td></tr>
<tr valign="top"><td>Administrator(s)' Email Address(es): </td><td>{{ old.admin }}</td></tr>
<tr valign="top"><td>Purpose: </td><td>{{ old.purpose }}</td></tr>
<tr valign="top"><td>Area: </td><td>{{ old.area }}</td></tr>
<tr valign="top"><td>&nbsp;</td></tr>
<tr valign="top"><td><b>Revised Entry</b></td><td></td></tr>
{% endif %}
<tr valign="top"><td>Submitter's Name: </td><td>{% ifequal add_edit "delete" %}{{ list.ds_name }}{% else %}{{ list.s_name }}{% endifequal %}</td></tr>
<tr valign="top"><td>Submitter's Email Address: </td><td>{% ifequal add_edit "delete" %}{{ list.ds_name }}{% else %}{{ list.s_email }}{% endifequal %}</td></tr>
<tr valign="top"><td>Mailing List Name: </td><td>{{ list.list_name }}</td></tr>
<tr valign="top"><td>URL or Email Address of Mailing List: </td><td>{{ list.list_url }}</td></tr>
<tr valign="top"><td>URL to Subscribe: </td><td>{{ list.subscribe_url }}</td></tr>
<tr valign="top"><td>Other Info. to Subscribe: </td><td>{{ list.subscribe_other }}</td></tr>
<tr valign="top"><td>Administrator(s)' Email Address(es): </td><td>{{ list.admin }}</td></tr>
<tr valign="top"><td>Purpose: </td><td>{{ list.purpose }}</td></tr>
<tr valign="top"><td>Area: </td><td>{{ list.area }}</td></tr>
{% ifequal add_edit "delete" %}
<tr valign="top"><td>Message from submitter: </td><td>{{ list.msg_to_ad }}</td></tr>
{% endifequal %}
<tr valign="top"><td>&nbsp;</td></tr>
<tr valign="top"><td>Approving Area Director: </td><td>{{ approver|escape }}</td></tr>
</table>
{% endblock %}

View file

@ -1,36 +0,0 @@
The Secretariat has received a request to {% ifequal add_edit "edit" %}edit an existing entry on{% else %}{% ifequal add_edit "add" %}add a new entry to{% else %}delete an existing entry from{% endifequal %}{% endifequal %}
the "IETF Non-WG Mailing Lists" Web Page, https://datatracker.ietf.org/list/nonwg/
The details of the request are provided below.
Please approve or deny this request via the "IETF Non-WG Mailing List Approval Page,"
https://datatracker.ietf.org/cgi-bin/nwg_list_approve.cgi?id={{ list.id }}&old_id={% firstof old.id "0" %}
You can use the same user name and password that you use with the I-D Tracker.
-------------------------
{% if old %}
Current Entry:
Submitter's Name: {{ old.s_name }}
Submitter's Email Address: {{ old.s_email }}
List Name: {{ old.list_name }}
URL or Email Address of Mailing List: {{ old.list_url }}
URL to Subscribe: {{ old.subscribe_url }}
Other Info. to Subscribe: {{ old.subscribe_other }}
Administrator(s)' Email Address(es): {{ old.admin }}
Purpose: {{ old.purpose }}
Area: {{ old.area }}
Revised Entry:
{% endif %}
Submitter's Name: {% ifequal add_edit "delete" %}{{ list.ds_name }}{% else %}{{ list.s_name }}{% endifequal %}
Submitter's Email Address: {% ifequal add_edit "delete" %}{{ list.ds_name }}{% else %}{{ list.s_email }}{% endifequal %}
Mailing List Name: {{ list.list_name }}
URL or Email Address of Mailing List: {{ list.list_url }}
URL to Subscribe: {{ list.subscribe_url }}
Other Info. to Subscribe: {{ list.subscribe_other }}
Administrator(s)' Email Address(es): {{ list.admin }}
Purpose: {{ list.purpose }}
Area: {{ list.area }}
{% ifequal add_edit "delete" %}
Message from submitter:
{{ list.msg_to_ad }}
{% endifequal %}

View file

@ -1,51 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "mailinglists/nwg_wizard_base.html" %}
{% block javascript %}
<script language="javascript">
function get_selected_val() {
buttons = document.form_post["0-add_edit"]
selected = ""
for (i = 0; i < buttons.length; i++)
if (buttons[i].checked)
selected = buttons[i].value
return selected
}
function activate_nwg_widgets() {
selected = get_selected_val()
if (selected == "") {
return
}
if (selected == "add") {
document.form_post["0-list_id"].disabled=true
document.form_post["0-list_id_delete"].disabled=true
}
if (selected == "edit") {
document.form_post["0-list_id"].disabled=false
document.form_post["0-list_id_delete"].disabled=true
} if (selected == "delete") {
document.form_post["0-list_id"].disabled=true
document.form_post["0-list_id_delete"].disabled=false
}
}
</script>
{% endblock %}
{% block nwgcontent %}
<h4>Please use this Web tool to add a new entry to the <a href="/list/nonwg/">IETF Non-WG Mailing Lists</a> Web page, to update the information on an existing entry, or to delete an existing entry.</h4>
<a href="/list/nonwg/"><b>View Current list</b></a><br>
</p><p>
<h2>Step 1</h2>
<h3>Please select one:</h3>
<form action="." method="POST" name="form_post">
<label for="{{ form.add_edit.auto_id }}_0"><input onClick="activate_nwg_widgets()" type="radio" id="{{ form.add_edit.auto_id }}_0" value="add" name="{{ form.add_edit.html_name }}" /> Add a new entry</label><br>
<label for="{{ form.add_edit.auto_id }}_1"><input onClick="activate_nwg_widgets()" type="radio" id="{{ form.add_edit.auto_id }}_1" value="edit" name="{{ form.add_edit.html_name }}" /> Modify an existing entry</label>{{ form.list_id }}<br>
<label for="{{ form.add_edit.auto_id }}_2"><input onClick="activate_nwg_widgets()" type="radio" id="{{ form.add_edit.auto_id }}_2" value="delete" name="{{ form.add_edit.html_name }}" /> Delete an existing entry</label>{{ form.list_id_delete }}<br>
<input type="submit" value=" Proceed ">
<!--
onClick="if (document.form_get.add_edit[0].checked == false && document.form_get.add_edit[1].checked == false && document.form_get.add_edit[2].checked == false) {alert('Please select one of three options');return false;}">
-->
</form>
{% endblock %}

View file

@ -1,9 +0,0 @@
{% ifequal add_edit "edit" %}
Request to Edit an Existing Entry on the Non-WG Mailing List Web Page
{% else %}
{% ifequal add_edit "add" %}
Request to Add a New Entry to the Non-WG Mailing List Web Page
{% else %}
Request to Delete an Existing Entry on the Non-WG Mailing List Web Page
{% endifequal %}
{% endifequal %}