[inscription.py] même si ça ne marche pas, ça avance

darcs-hash:20090702060256-bd074-ab492040ebcc2a840147055ed4437dbaffd84a59.gz
This commit is contained in:
Antoine Durand-Gasselin 2009-07-02 08:02:56 +02:00
parent 23f3251fd6
commit ac80f43a4f

View file

@ -58,8 +58,8 @@ class Field():
if check != None: self.check_hook = check
else: self.check_hook = (lambda x: True)
def fill(self, string):
self.input = string[0]
def fill(self, post):
self.input = post.get(self.id, [''])[0]
def check(self):
self.error_txt= '' # Devrait pourtant être déjà vide
@ -91,6 +91,147 @@ class Field():
request.add_msg(self.error_msg)
return champ
class MenuField(Field):
etablissements = [ ("ENS", u"ENS Cachan"),
("IUT Cachan", u"IUT Cachan"),
("Maximilien Sorre", u"Maximilien Sorre"),
("Gustave Eiffel", u"Gustave Eiffel"),
("P1", u"Paris I"),
("P2", u"Paris II"),
("P3", u"Paris III"),
("P4", u"Paris IV"),
("P5", u"Paris V"),
("P6", u"Paris VI"),
("P7", u"Paris VII"),
("P8", u"Paris VIII"),
("P9", u"Paris IX"),
("P10", u"Paris X"),
("P11", u"Paris XI"),
("P12", u"Paris XII"),
("P13", u"Paris XIII"),
("IUFM", u"IUFM") ]
labos = [ ("CMLA", u"CMLA - Centre de Mathématiques et de Leurs Applications"),
("GAPP", u"GAPP - Groupe d'Analyse des Politiques Publiques"),
("IDHE", u"IDHE - Institutions et Dynamiques Historiques de l'Economie"),
("LBPA", u"LBPA - Laboratoire de Biotechnologies et Pharmacologie génétique Appliquées"),
("LMT", u"LMT - Laboratoire de Mécanique et Technologie"),
("LPQM", u"LPQM - Laboratoire de Photonique Quantique et Moléculaire"),
("LSV", u"LSV - Laboratoire de Spécification et Vérification"),
("LURPA", u"LURPA - Laboratoire Universitaire de Recherche en Production Automatisée"),
("PPSM", u"PPSM - Laboratoire de Photophysique et Photochimie Supramoléculaires et Macromoléculaires"),
("SATIE", u"SATIE - Systèmes et Applications des Technologies de l\'Information et de l'Energie"),
("STEF", u"STEF - Sciences Techniques Education Formation") ]
annee_ens = [ ("1", u"1A (license)"), ("2", u"2A (master 1)"),
("3", u"3A (agrégation)"), ("4", u"4A (master 2)"),
("5", u"5A (thèse 1)"), ("6", u"6A (thèse 2)"),
("7", u"7A (thèse 3)"), ("8", u"8A+") ]
annee = [ ("-2", u"Seconde"), ("-1", u"Première"), ("0", u"Terminale"),
("1", u"BAC+1 (L1)"), ("2", u"BAC+2 (L2)"), ("3", u"BAC+3 (L3)"),
("4", u"BAC+4 (M1)"), ("5", u"BAC+5 (M2)"), ("6", u"BAC+6 (thèse 1)"),
("7", u"BAC+7 (thèse 2)"), ("8", u"BAC+8 (thèse 3)"), ("9", "Autre") ]
sections = [ ("A0", u"A0 - Informatique"),
("A1", u"A1 - Mathématiques"),
("A2", u"A2 - Physique fondamentale"),
("A'2", u"A'2 - Physique appliquée"),
("A''2", u"A''2 - Chimie"),
("A3", u"A3 - Biochimie"),
("EEA", u"EEA"),
("B123", u"B123 - Technologie mécanique"),
("B1", u"B1 - Mécanique"),
("B2", u"B2 - Génie civil"),
("B3", u"B3 - Génie mécanique"),
("B1", u"B1 - Mécanique"),
("B2", u"B2 - Génie civil"),
("B3", u"B3 - Génie mécanique"),
("B4", u"B4 - Génie électrique"),
("C", u"C - Art et création industrielle"),
("D2", u"D2 - Economie gestion"),
("D3", u"D3 - Sciences sociales"),
("E", u"E - Anglais") ]
prompt1 = u"Choisissez votre année d'étude"
prompt2 = u"Choisissez votre filière"
prompt2bis = u"Précisez votre filière"
prompt2ter= u"Précisez votre laboratoire"
def render(self, request, parser):
variants = [ '', '1', '2', '2bis', '2ter' ]
for i in variants:
eval('champ%s = html.UL(CLASS="formulaire_field")' %i)
eval('champ%s.append(html.LI(CLASS="formulaire_id").append(self.prompt%s))'% (i,i))
def gen_menu(nom, champs, **kw):
menu = html.SELECT(NAME=nom, **kw)
for opt, legend in champs:
menu.append(html.OPTION(VALUE=opt).append(legend))
return menu
menu = gen_menu('etablissement', self.etablissements,
onchange='TestEtudes(document.forms.preinscription.etablissement.value)')
champ.append(html.LI(CLASS="formulaire_input").append(menu))
menu = gen_menu('annee', self.annee)
champ1.append(html.LI(CLASS="nens_input").append(menu))
menu = gen_menu('annee_ens', self.annee_ens,
onchange='TestAnnee(document.forms.preinscription.annee_ens.value)')
champ2.append(html.LI(CLASS="ens_input").append(menu))
menu = gen_menu('section_ens', self.sections)
champ2bis.append(html.LI(CLASS="ens_yinput").append(menu))
menu = gen_menu('labo_ens', self.labos)
champ2ter.append(html.LI(CLASS="ens_oinput").append(menu))
if self.error_txt:
error = wikiutil.renderText(request, parser, self.error_txt)
champ.append(html.LI(CLASS="formulaire_error").append(error))
if self.error_msg:
request.add_msg(self.error_msg)
return (u'%s\n'* len(variants)) % (eval('champ'+i) for i in variants)
class PasswordField(Field):
def fill(self, post):
self.input = post.get(self.id, [''])[0]
self.input2 = post.get(self.id+'2',[''])[0]
def check(self):
self.error_txt= '' # Devrait pourtant être déjà vide
self.default = ''
if self.input == self.input2:
self.content = self.input
return True
else:
self.error_txt = u'Les deux mots de passe diffèrent'
return False
def render(self, request, parser):
champ = html.UL(CLASS="formulaire_field")
champ.append(html.LI(CLASS="formulaire_id").append(self.prompt))
input = html.INPUT(type=self.input_type,onchange="testPassword(document.forms.preinscription.pass.value)", name=self.id)
champ.append(html.LI(CLASS="formulaire_input").append(input))
champ.append(html.LI().append('<img name="verdict" />'))
champ2 = html.UL(CLASS="formulaire_field")
champ2.append(html.LI(CLASS="formulaire_id").append('Retapez le mot de passe'))
input = html.INPUT(type=self.input_type, name=self.id+'2')
champ2.append(html.LI(CLASS="formulaire_input").append(input))
if self.error_txt:
error = wikiutil.renderText(request, parser, self.error_txt)
champ2.append(html.LI(CLASS="formulaire_error").append(error))
return u'%s\n%s\n' % (champ, champ2)
def is_name(self):
"""Vérifie que le champ input de l'objet passé en argument est un nom valide."""
analysed_content = unicodedata.normalize('NFKD', self.input)
@ -146,36 +287,23 @@ class FormulaireInscription():
ip = request.remote_addr
def erase_password(self):
self.default = ''
return True
pass2_field = Field("pass2", u"Mot de passe", input_type='password', check=erase_password)
def is_correctpassword(self):
self.default = ''
if pass2_field.input == self.input:
return True
else:
self.error_txt=u'Attention les mots de passe diffèrent'
return False
mac_field = Field("mac", u"Adresse physique de votre carte réseau", check=is_valid_mac, default=get_mac(ip))
mac_field.ip = ip
self.champs = [ Field("nom", "Nom", check=is_name),
Field("prenom", u"Prénom", check=is_name),
Field("tel", u"Numéro de téléphone", check=is_phonenumber),
Field("pass1", u"Mot de passe", input_type='password', check=is_correctpassword),
pass2_field,
PasswordField("pass", u"Mot de passe", input_type='password'),
Field("dns", u"Nom de votre ordinateur", check=is_dns),
mac_field
mac_field,
MenuField('etablissement', u"Choisissez votre établissement d'études")
]
def _create_form(request, parser, formulaire):
url = request.page.url(request)
ret = html.FORM(action=url)
ret = html.FORM(action=url, NAME="preinscription")
ret.append(html.INPUT(type='hidden', name='action', value='inscription'))
f = html.UL(CLASS="formulaire_preinscription")
@ -199,7 +327,7 @@ def _check_form(post, formulaire):
"""
errors = []
for field in formulaire.champs:
field.fill(post.get(field.id, ''))
field.fill(post)
for field in formulaire.champs:
if not field.check():
errors.append(field.id)
@ -212,7 +340,6 @@ def _perform_inscription(request, formulaire):
results += '%(id)s: %(content)s\n' % field.__dict__
request.write(results)
def execute(pagename, request):
request.page = Page(request, pagename)
request.formatter.setPage(request.page)
@ -229,7 +356,7 @@ def execute(pagename, request):
return(_perform_inscription(request, formulaire))
request.emit_http_headers()
request.theme.send_title(u"Formulaire de préinscription", pagename=pagename)
request.theme.send_title(u"Formulaire de préinscription", pagename=pagename, html_head='<script type="text/javascript" src="/wiki/crans-www/js/passwd.js"></script>')
request.write(request.formatter.startContent("content"))
form = _create_form(request, parser, formulaire)