Retired non-WG mailing list update submission tool
- Legacy-Id: 1825
This commit is contained in:
parent
b6a2aeff5f
commit
0f81d3e01a
ietf
mailinglists
templates/mailinglists
|
@ -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
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
200 /list/area/
|
||||
200 /list/wg/
|
||||
200 /list/nonwg/
|
||||
200 /list/nonwg/update/
|
||||
301 /list/nonwg/update/
|
||||
200 /list/request/
|
|
@ -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),
|
||||
)
|
||||
|
|
|
@ -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})
|
||||
|
|
|
@ -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> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
</blockquote>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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> </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> </td></tr>
|
||||
<tr valign="top"><td>Approving Area Director: </td><td>{{ approver|escape }}</td></tr>
|
||||
</table>
|
||||
|
||||
{% endblock %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
Loading…
Reference in a new issue