
Ignore-this: 197a121bac23ae72a086535cc612311c darcs-hash:20090906134550-bd074-801938dc1daca12012adb24aeb4bff939ab75728.gz
241 lines
11 KiB
Python
Executable file
241 lines
11 KiB
Python
Executable file
#! /usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
u"""Nouvelle interface utilisateur du système de gestion des machines et
|
|
adhérents du crans. Largement inspirée par l'ancienne version écrite par
|
|
Frédéric Pauget.
|
|
|
|
Copyright (C) 2009 Antoine Durand-Gasselin <adg@crans.org>
|
|
Licence : GPLv2
|
|
|
|
Utilise des wizard.Scenario des objets qu'on construit avec wizard.Steps
|
|
(qu'on construit avec des dialogwizard.DialogStepGenerator). Ces
|
|
Scenario sont ensuite lancés: transformés en wizard.Running, qui prend
|
|
en argument un dictionnaire, et renvoie un dictionnaire rempli selon les
|
|
choix faits par l'utilisateur dans l'interface dialog. (reste à bien
|
|
gérer les exceptions et les erreurs).
|
|
|
|
Idéalement, on \"tranforme\" les crans_ldap.Adherents en dicos, que l'on
|
|
modifie avec des dialog.Running, et on les sauve dans la base de donnée.
|
|
Bon là où ça se complique c'est qu'il faudrait reporter en temps réel
|
|
les erreurs qui sont renvoyées par crans_ldap.
|
|
|
|
Après on peut inscrire des gens de deux manières différentes: soit avec
|
|
un crans_ldap.Adherent(), soit avec un dico construit à partir d'infos
|
|
rentrés depuis la préinscription.
|
|
|
|
"""
|
|
|
|
### Rapport de bug automatique
|
|
# Destinataires, si vide n'envoi rien
|
|
To = ['fred@crans.org', 'glondu@crans.org', 'dimino@crans.org',
|
|
'salles@crans.org', 'cohen@crans.org', 'segaud@crans.org',
|
|
'adg@crans.org']
|
|
|
|
import os, sys#, string
|
|
# import dialog
|
|
# from whos import aff
|
|
# import signal, getopt
|
|
# from time import strftime, strptime, localtime, mktime
|
|
# import re
|
|
#
|
|
# import affich_tools, config
|
|
# from lock import make_lock, remove_lock
|
|
from ldap_crans import crans_ldap, script_utilisateur#, blacklist_items, ann_scol, droits_possibles, droits_critiques, smtpserv,
|
|
sys.path.append('/usr/scripts')
|
|
from lib.dialogwizard.wizard import Scenario, Running, step_scenario, unit_scenario
|
|
from lib.dialogwizard.dialogwizard import DialogStepGenerator
|
|
from ldap_crans import Adherent #, AssociationCrans, Club
|
|
# from ldap_crans import Machine, MachineFixe, MachineWifi, MachineCrans, BorneWifi
|
|
# import user_tests
|
|
|
|
# isadm = user_tests.isadm()
|
|
# isdeconnecteur = user_tests.isdeconnecteur()
|
|
|
|
#db = crans_ldap()
|
|
#droits = db.search("uid=%s" % script_utilisateur)['adherent'][0].droits()
|
|
droits = []
|
|
isimprimeur = u"Imprimeur" in droits
|
|
iscontroleur = u'Tresorier' in droits
|
|
isbureau = u'Bureau' in droits
|
|
encoding = sys.stdin.encoding or 'utf-8'
|
|
|
|
if u'Nounou' in droits and not os.environ.has_key('DIALOGRC') \
|
|
and not os.path.exists(os.path.expanduser('~/.dialogrc')):
|
|
os.environ['DIALOGRC'] = '/etc/dialog.rc'
|
|
|
|
dsgen = DialogStepGenerator(u'Gestion des adhérents et machines du Crans')
|
|
|
|
#########################################################################
|
|
## Fonctions de remplissage ou modification des paramètres d'un adhérent
|
|
|
|
prompt_new_adher = \
|
|
dsgen.form_step (u"Inscription adhérent", '',
|
|
[{'var': 'nom', 'label': 'Nom :', 'field_len': 20},
|
|
{'var': 'prenom', 'label': u'Prénom :', 'field_len': 20},
|
|
{'var': 'tel', 'label': u'Numéro de téléphone', 'field_len': 13},
|
|
{'var': 'chbre', 'label': u'Chambre :', 'field_len': 5} ])
|
|
|
|
prompt_addr_ext = \
|
|
dsgen.form_step (u"Adresse extérieure de %(nom)s", '',
|
|
[{'var': 'addr1', 'label': 'Adresse', 'field_len': 40},
|
|
{'var': 'addr2', 'label': '', 'field_len': 40},
|
|
{'var': 'addr3', 'label': 'Code Postal :', 'field_len': 6},
|
|
{'var': 'addr4', 'label': 'Ville :', 'field_len': 20}])
|
|
|
|
def prompt_etudes(name):
|
|
etab_step = \
|
|
dsgen.select_step(u'Études de %(nom)s (1/3)',
|
|
u"Choisissez l'établissement :",
|
|
'etud1',
|
|
[("ENS", u"ENS -- École Normale Supérieure de Cachan "),
|
|
("IUT Cachan", u"IUT Cachan"),
|
|
("Maximilien Sorre", u"Maximilien Sorre"),
|
|
("Gustave Eiffel", u"Gustave Eiffel"),
|
|
("P1", u"P1 -- Université Panthéon Sorbonne"),
|
|
("P2", u"P2 -- Université Panthéon Assas"),
|
|
("P3", u"P3 -- Université de la Sorbonne Nouvelle"),
|
|
("P4", u"P4 -- Université Paris Sorbonne"),
|
|
("P5", u"P5 -- Université René Descartes"),
|
|
("P6", u"P6 -- Université Pierre et Marie Curie"),
|
|
("P7", u"P7 -- Université Denis Diderot"),
|
|
("P8", u"P8 -- Université Vincennes Saint Denis"),
|
|
("P9", u"P9 -- Université Paris Dauphine"),
|
|
("P10", u"P10 -- Université de Nanterre"),
|
|
("P11", u"P11 -- Université de Paris Sud (Orsay)"),
|
|
("P12", u"P12 -- Université Val de Marne"),
|
|
("P13", u"P13 -- Université Paris Nord"),
|
|
("IUFM", u"IUFM"),
|
|
("Personnel ENS", u"Personnel ENS"),
|
|
("Personnel CROUS", u"Personnel CROUS"),
|
|
("autre", u"autre")])
|
|
|
|
etab_other = \
|
|
dsgen.input_step(u'Études de %(nom)s (1/3)',
|
|
u"Préciser l'établissement :",
|
|
'etud1')
|
|
|
|
year_ens_step = \
|
|
dsgen.select_step(u"Études de %(nom)s (2/3)",
|
|
u"Choisissez l'année administrative",
|
|
'etud2',
|
|
[("1", u"License"),
|
|
("2", u"Master 1"),
|
|
("3", u"Agrégation"),
|
|
("4", u"Master 2"),
|
|
("5", u"1ère année thèse"),
|
|
("6", u"2ème année thèse"),
|
|
("7", u"3ème année thèse"),
|
|
("", "Autre")])
|
|
|
|
year_step = \
|
|
dsgen.input_step(u"Études de %(nom)s (2/3)",
|
|
u"Année adminstrative :\nET UNIQUEMENT l'ANNEE : la section sera demandée après.",
|
|
'etud2')
|
|
|
|
section_step = \
|
|
dsgen.input_step(u'Études de %(nom)s (3/3)',
|
|
u'Section :',
|
|
'etud3')
|
|
|
|
section_step = \
|
|
dsgen.select_step(u'Études de %(nom)s (3/3)',
|
|
u'Choisissez la section :',
|
|
'etud3',
|
|
[ ("A0", "Informatique"),
|
|
("A1", "Mathématiques"),
|
|
("A2", "Physique fondamentale"),
|
|
("A''2", "Chimie"),
|
|
{'label': "A'2", 'item': "Physique appliquée",
|
|
'show_cond': (lambda d: d['etud2'] in ['3','4'])},
|
|
("A3", "Biochimie"),
|
|
{'label': "B123", 'item':"Technologie mécanique",
|
|
'show_cond': (lambda d: d['etud2'] == '1') },
|
|
{'label': "B1", 'item': "Mécanique",
|
|
'show_cond': (lambda d: d['etud2'] in ['2','3','4'])},
|
|
{'label': "B2", 'item': "Génie civil",
|
|
'show_cond': (lambda d: d['etud2'] in ['2','3','4'])},
|
|
{'label': "B3", 'item': "Génie mécanique",
|
|
'show_cond': (lambda d: d['etud2'] in ['2','3','4'])},
|
|
("EEA", "Électronique, électrotechnique et automatique"),
|
|
("C", "Art et création industrielle"),
|
|
("D2", "Economie gestion"),
|
|
("D3", "Sciences sociales"),
|
|
("E", "Anglais") ])
|
|
|
|
labo_step = \
|
|
dsgen.select_step(u'Études de %(nom)s (3/3)',
|
|
u'Choisissez le laboratoire :',
|
|
'etud3',
|
|
[ ("CMLA", u"Centre de Mathématiques et de Leurs Applications"),
|
|
("GAPP", u"Groupe d'Analyse des Politiques Publiques"),
|
|
("IDHE", u"Institutions et Dynamiques Historiques de l'Economie"),
|
|
("LBPA", u"Laboratoire de Biotechnologies et Pharmacologie génétique Appliquées"),
|
|
("LMT", u"Laboratoire de Mécanique et Technologie"),
|
|
("LPQM", u"Laboratoire de Photonique Quantique et Moléculaire"),
|
|
("LSV", u"Laboratoire de Spécification et Vérification"),
|
|
("LURPA", u"Laboratoire Universitaire de Recherche en Production Automatisée"),
|
|
("PPSM", u"Laboratoire de Photophysique et Photochimie Supramoléculaires et Macromoléculaires"),
|
|
("SATIE", u"Systèmes et Applications des Technologies de l'Information et de l'Energie"),
|
|
("STEF", u"Sciences Techniques Education Formation") ])
|
|
|
|
etudes_scenar = Scenario()
|
|
etudes_scenar.nest(etab_step)
|
|
|
|
ens_scenar = Scenario()
|
|
ens_scenar.nest(year_ens_step)
|
|
ens_scenar.branch((lambda d: d['etud2'] in ['1','2','3','4']),
|
|
step_scenario(section_step),
|
|
step_scenario(labo_step))
|
|
|
|
other_etab_scenar = Scenario()
|
|
other_etab_scenar.nest(year_step)
|
|
other_etab_scenar.nest(section_step)
|
|
|
|
etudes_scenar.branch((lambda d: d['etud1'] == 'other'),
|
|
step_scenario(etab_other),
|
|
unit_scenario())
|
|
|
|
etudes_scenar.branch((lambda d: d['etud1'] == 'ENS'),
|
|
ens_scenar, other_etab_scenar)
|
|
|
|
return etudes_scenar
|
|
|
|
# prompt_connexion = \
|
|
# dsgen.form_step (u"Type de connexion",
|
|
# u'Inscription adhérent',
|
|
# 'typ', [('1', 'Adhésion'),
|
|
# ('2', 'Inscription gratuite')])
|
|
|
|
prompt_papiers = \
|
|
dsgen.checklist_step('', u'État administratif de %(nom)s',
|
|
[('carte', u"Carte d'étudiant %s-%s fourniee" % (ann_scol, ann_scol+1)),
|
|
('paiement%s' % ann_scol, u'Cotisation %s réglée et charte signée' % ann_scol),
|
|
('chartema', u'Charte des membres actifs signée')])
|
|
|
|
prompt_login = \
|
|
dsgen.input_step(u'Choix du login pour %(nom)s',
|
|
u'Le choix du login doit faire au maximum 15 caractères\nIl ne doit *pas* être un pseudo ou un prénom, mais doit être relié au nom de famille\nSeuls les caractères alphabétiques et le - sont autorisés', 'login')
|
|
|
|
prompt_mailaddress = \
|
|
dsgen.input_step(u'Addresse mail extérieure de %(nom)s',
|
|
'', 'mail')
|
|
|
|
dummy_scenar = Scenario()
|
|
dummy_scenar.nest(prompt_new_adher)
|
|
dummy_scenar.nest(prompt_addr_ext)
|
|
dummy_scenar.quote(prompt_etudes('toto'))
|
|
|
|
Running(dummy_scenar).run()
|
|
|
|
def inscrit_in_ldap(adherent):
|
|
"""Prend en argument un dictionnaire, et l'inscrit dans la base ldap
|
|
|
|
Les champs suivants ont OBLIGATOIRES:
|
|
nom, prenom, chbre, mail, login
|
|
|
|
Les champs suivants sont OPTIONNELS:
|
|
carte, paiementYEAR, tel, etud1, etud2, etud3, addr1, addr2, addr3, addr4
|
|
"""
|
|
|
|
adher = Adherent()
|