A little progress on the mailing list request tool.

- Legacy-Id: 177
This commit is contained in:
Bill Fenner 2007-05-28 18:51:55 +00:00
parent 2f56324baa
commit e38f1dc967
4 changed files with 76 additions and 19 deletions

View file

@ -1,6 +1,6 @@
from django import newforms as forms
from models import NonWgMailingList, ImportedMailingList
from ietf.idtracker.models import PersonOrOrgInfo, GroupIETF
from ietf.idtracker.models import PersonOrOrgInfo, GroupIETF, Acronym
class NonWgStep1(forms.Form):
add_edit = forms.ChoiceField(choices=(
@ -56,9 +56,20 @@ class ListReqStep1(forms.Form):
self.fields['list_to_close'].choices = [('', '-- Select List To Close')] + ImportedMailingList.choices(dname)
self.fields['domain_name'].initial = dname
def clean_group(self):
if self.clean_data.get('mail_type', '').endswith('wg'):
group = self.clean_data['group']
action = self.clean_data.get('mail_type', '')
if action.endswith('wg'):
if not self.clean_data.get('group'):
raise forms.ValidationError, 'Please pick a working group'
group_name = Acronym.objects.get(pk=group).acronym
#group_list_exists = ImportedMailingList.objects.filter(acronym=group_name).count()
group_list_exists = ImportedMailingList.objects.filter(group_acronym=group).count()
if action.startswith('close'):
if group_list_exists == 0:
raise forms.ValidationError, 'The %s mailing list does not exist.' % group_name
else:
if group_list_exists:
raise forms.ValidationError, 'The %s mailing list already exists.' % group_name
return self.clean_data['group']
def clean_list_to_close(self):
if self.clean_data.get('mail_type', '') == 'closenon':
@ -122,4 +133,16 @@ class DeletionPickApprover(PickApprover):
# A form with no required fields, to allow a preview action
class Preview(forms.Form):
preview = forms.BooleanField(required=False)
#preview = forms.BooleanField(required=False)
pass
class ListReqAuthorized(forms.Form):
authorized = forms.BooleanField()
def clean_authorized(self):
if not(self.clean_data.get('authorized', 0)):
raise forms.ValidationError, 'You must assert that you are authorized to perform this action.'
return self.clean_data['authorized']
# subclass pickapprover here too?
class ListReqClose(forms.Form):
pass

View file

@ -1,5 +1,5 @@
from django.db import models
from ietf.idtracker.models import Acronym, Areas, PersonOrOrgInfo
from ietf.idtracker.models import Acronym, Area, PersonOrOrgInfo
import random
class ImportedMailingList(models.Model):
@ -44,7 +44,7 @@ class MailingList(models.Model):
('2', 'Non-WG Mailing List'),
('3', 'Close Non-WG Mailing List'),
)
mailing_list_id = models.CharField('Unique ID', primary_key=True, maxlength=25)
mailing_list_id = models.CharField('Unique ID', primary_key=True, maxlength=25, editable=False)
request_date = models.DateField()
mlist_name = models.CharField('Mailing list name', maxlength=250)
short_desc = models.CharField(maxlength=250)
@ -68,7 +68,7 @@ class MailingList(models.Model):
approved = models.BooleanField()
approved_date = models.DateField(null=True, blank=True)
reason_to_delete = models.TextField(blank=True)
domain_name = models.CharField(blank=True, maxlength=10)
domain_name = models.CharField(maxlength=10)
def __str__(self):
return self.mlist_name
def save(self, *args, **kwargs):
@ -94,7 +94,7 @@ class NonWgMailingList(models.Model):
list_url = models.CharField("List URL", maxlength=255)
admin = models.TextField("Administrator(s)' Email Address(es)", blank=True)
purpose = models.TextField(blank=True)
area = models.ForeignKey(Areas, db_column='area_acronym_id')
area = models.ForeignKey(Area, db_column='area_acronym_id')
subscribe_url = models.CharField("Subscribe URL", blank=True, maxlength=255)
subscribe_other = models.TextField("Subscribe Other", blank=True)
# Can be 0, 1, -1, or what looks like a person_or_org_tag, positive or neg.

View file

@ -1,11 +1,11 @@
from django.conf.urls.defaults import *
from ietf.idtracker.models import Areas
from ietf.idtracker.models import Area
from ietf.mailinglists import views
from ietf.mailinglists.models import NonWgMailingList
from ietf.mailinglists.forms import NonWgStep1
urlpatterns = patterns('django.views.generic.list_detail',
(r'^area_lists/$', 'object_list', { 'queryset': Areas.objects.filter(status=1).select_related().order_by('acronym.acronym'), 'template_name': 'mailinglists/areas_list.html' }),
(r'^area_lists/$', 'object_list', { 'queryset': Area.objects.filter(status=1).select_related().order_by('acronym.acronym'), 'template_name': 'mailinglists/areas_list.html' }),
(r'^nonwg_lists/$', 'object_list', { 'queryset': NonWgMailingList.objects.filter(status__gt=0) }),
)
urlpatterns += patterns('',

View file

@ -1,6 +1,6 @@
from forms import NonWgStep1, ListReqStep1, PickApprover, DeletionPickApprover, UrlMultiWidget, Preview
from models import NonWgMailingList
from ietf.idtracker.models import Areas, PersonOrOrgInfo
from forms import NonWgStep1, ListReqStep1, PickApprover, DeletionPickApprover, UrlMultiWidget, Preview, ListReqAuthorized, ListReqClose
from models import NonWgMailingList, MailingList
from ietf.idtracker.models import Area, PersonOrOrgInfo
from django import newforms as forms
from django.shortcuts import render_to_response
from django.template import RequestContext
@ -46,7 +46,7 @@ nonwg_widgets = {
}
nonwg_querysets = {
'area': Areas.objects.filter(status=1)
'area': Area.objects.filter(status=1)
}
nonwg_callback = form_decorator(fields=nonwg_fields, widgets=nonwg_widgets, attrs=nonwg_attrs, querysets=nonwg_querysets)
@ -102,7 +102,7 @@ class NonWgWizard(wizard.Wizard):
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([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 Area.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)
def done(self, request, form_list):
@ -133,18 +133,52 @@ def non_wg_wizard(request):
wiz = NonWgWizard([ NonWgStep1 ])
return wiz(request)
list_fields = {
'mailing_list_id': None,
'request_date': None,
'auth_person': None,
'approved': None,
'approved_date': None,
'reason_to_delete': None,
}
list_widgets = {
}
list_attrs = {
}
list_callback = form_decorator(fields=list_fields, widgets=list_widgets, attrs=list_attrs)
class ListReqWizard(wizard.Wizard):
def get_template(self):
return "mailinglists/nwg_wizard.html"
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))
c = self.form_list[self.step].__name__
templates.append("mailinglists/list_wizard_%s.html" % (c))
templates.append("mailinglists/list_wizard_step%d.html" % (self.step))
templates.append("mailinglists/list_wizard.html")
return templates
# want to implement parse_params to get domain for list
def process_step(self, request, form, step):
form.full_clean()
if step == 0:
self.clean_forms = [ form ]
else:
self.clean_forms.append(form)
if step == 0:
if form.clean_data['mail_type'].endswith('non') and form.clean_data['domain_name'] != 'ietf.org':
self.form_list.append(ListReqAuthorized)
if form.clean_data['mail_type'].startswith('close'):
self.form_list.append(ListReqClose)
else:
self.form_list.append(forms.form_for_model(MailingList))
#XXX not quite
super(ListReqWizard, self).process_step(request, form, step)
def list_req_wizard(request):
wiz = ListReqWizard([ ListReqStep1 ])
return wiz(request)
def non_wg_submit(request):
form = NonWgStep1()
return render_to_response('mailinglists/step1.html', { 'form': form })