diff --git a/wiki/action/inscription.py b/wiki/action/inscription.py index 8719dcfc..21e5ff69 100644 --- a/wiki/action/inscription.py +++ b/wiki/action/inscription.py @@ -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('')) + + 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='') request.write(request.formatter.startContent("content")) form = _create_form(request, parser, formulaire)